Aller au contenu

Comment transférer les données utilisateur entre les mises à jour avec VBA

Lorsque vous mettez à jour votre classeur protégé et distribuez un nouvel EXE, vous pouvez rencontrer des difficultés pour garantir le transfert correct des données de vos utilisateurs, surtout si vous utilisez le mode Full Save. Ce mode crée un instantané complet du classeur au moment de l’enregistrement. Par conséquent, lorsqu’un utilisateur ouvre son ancien fichier de sauvegarde (.xlsc) avec la nouvelle application, il verra ses anciennes données dans l’ancienne structure du classeur et ne bénéficiera pas de vos dernières mises à jour (telles que de nouvelles fonctionnalités ou des corrections de bogues dans votre code VBA).

Cette rubrique explique comment utiliser un système d’exportation/importation basé sur VBA pour aider vos utilisateurs à migrer leurs données d’une ancienne version de votre application vers une nouvelle.

Ce processus comporte deux étapes principales : exporter les données depuis l’ancienne version et les importer dans la nouvelle.

1. Exporter les données utilisateur vers un fichier Excel

Section titled “1. Exporter les données utilisateur vers un fichier Excel”

La macro ci-dessous génère un fichier Excel .xlsx normal contenant les données de l’utilisateur. Vous devez inclure cette macro dans votre ancienne application, liée à un bouton, afin que les utilisateurs puissent exporter leurs données avant de mettre à niveau.

Sub GenerateData()
Dim savePath As String
'New workbook with 3 sheets
Workbooks.Add xlWBATWorksheet
ActiveSheet.Name = "SheetA"
Sheets.Add(After:=Sheets(1)).Name = "SheetB"
Sheets.Add(After:=Sheets(2)).Name = "SheetC"
ActiveWorkbook.Sheets("SheetA").Range("A1:C3").Value = ThisWorkbook.Sheets("SheetA").Range("A1:C3").Value
ActiveWorkbook.Sheets("SheetB").Range("B3").Value = ThisWorkbook.Sheets("SheetB").Range("B3").Value
ActiveWorkbook.Sheets("SheetC").Range("B1:C3").Value = ThisWorkbook.Sheets("SheetC").Range("B1:C3").Value
savePath = Application.GetSaveAsFilename("", "Excel workbook (*.xlsx),*.xlsx", 1, "Export User Data")
If savePath <> "False" Then ActiveWorkbook.SaveAs savePath, FileFormat:=51
ActiveWorkbook.Close False
End Sub

2. Téléverser les données vers le nouveau fichier EXE.

Section titled “2. Téléverser les données vers le nouveau fichier EXE.”

L’utilisateur doit ouvrir le nouvel EXE et exécuter la 3e macro ci-dessous pour téléverser les données (liez la macro à un bouton). Une fois que l’utilisateur exécute la macro, il sera invité à sélectionner le fichier (1re macro), et les données seront copiées (2e macro). La troisième macro exécute les deux macros, et c’est cette macro qui doit être liée au bouton. Là encore, vous devrez modifier les cellules et les noms d’onglets dans la deuxième macro, et vous pouvez également modifier le titre dans la première macro :

************* 1st macro:
Sub Open_Workbook_Dialog()
Dim my_FileName As Variant
my_FileName = Application.GetOpenFilename( _
FileFilter:="Excel Files,.xl;.xm", _
FilterIndex:=3, _
Title:="Select the old version of your file, where you will pull the data from", _
MultiSelect:=False)
If my_FileName <> False Then
Workbooks.Open Filename:=my_FileName
End If
End Sub
**************** 2nd macro:
Sub TransferData()
If Workbooks.Count > 1 Then
Workbooks(1).Sheets("SheetA").Range("A1:C3").Value = Workbooks(2).Sheets("SheetA").Range("A1:C3").Value
Workbooks(1).Sheets("SheetB").Range("B3").Value = Workbooks(2).Sheets("SheetB").Range("B3").Value
Workbooks(1).Sheets("SheetC").Range("B1:C3").Value = Workbooks(2).Sheets("SheetC").Range("B1:C3").Value
Workbooks(2).Close savechanges:=False
Else
MsgBox "The data hasn’t been transferred.", vbExclamation, "Error"
End If
End Sub
************ 3rd macro:
Sub TheTransfer()
Call Open_Workbook_Dialog
Call TransferData
End Sub

👉 Voir aussi :