Aller au contenu

Sauvegarder et restaurer des valeurs personnalisées par programme avec VBA

Lorsque vous utilisez le mode Save defined cell values only, XLS Padlock vous permet de sauvegarder et restaurer des valeurs personnalisées en plus des valeurs de cellules prédéfinies. Cela est utile pour enregistrer des variables, des paramètres ou des données qui ne sont pas directement stockés dans une cellule.

Cette fonctionnalité repose sur deux événements VBA et deux fonctions de l’API VBA. Vous placez du code dans les sous-routines d’événement pour lire ou écrire vos données personnalisées lorsque l’utilisateur charge ou enregistre son travail.

Les deux sous-routines d’événement suivantes doivent être placées dans un module de votre classeur Excel. XLS Padlock les appellera automatiquement pendant le processus de sauvegarde et de chargement.

' Called when a user loads a save file.
Sub XLSPadlock_RestoreCustomValues()
' Your code to read values goes here.
MsgBox ("Restoring custom values...")
End Sub
' Called when a user saves their work.
Sub XLSPadlock_SaveCustomValues()
' Your code to write values goes here.
MsgBox ("Saving custom values...")
End Sub
  • WriteCustomCellValue(UniqueID, Value) : écrit une valeur de chaîne unique associée à un identifiant unique.
  • ReadCustomCellValue(UniqueID, DefaultValue) : lit une valeur de chaîne unique pour un identifiant donné. Si l’identifiant n’est pas trouvé, la fonction renvoie la DefaultValue.

Voici comment écrire une valeur unique :

Sub XLSPadlock_SaveCustomValues()
Dim XLSPadlock1 As Object
On Error Resume Next
Set XLSPadlock1 = Application.COMAddIns("GXLS.GXLSPLock").Object
XLSPadlock1.WriteCustomCellValue "MySetting", "MyValue"
End Sub

Et voici comment la relire :

Sub XLSPadlock_RestoreCustomValues()
Dim XLSPadlock1 As Object
On Error Resume Next
Set XLSPadlock1 = Application.COMAddIns("GXLS.GXLSPLock").Object
Dim MySettingValue As String
MySettingValue = XLSPadlock1.ReadCustomCellValue("MySetting", "Default")
End Sub

Lecture de toutes les valeurs sous forme de dictionnaire

Section titled “Lecture de toutes les valeurs sous forme de dictionnaire”

Vous pouvez également lire toutes les valeurs personnalisées enregistrées d’un coup en passant une chaîne vide comme identifiant à ReadCustomCellValue. Cela renvoie un objet Scripting.Dictionary.

Sub XLSPadlock_RestoreCustomValues()
Dim XLSPadlock1 As Object
On Error Resume Next
Set XLSPadlock1 = Application.COMAddIns("GXLS.GXLSPLock").Object
Dim Dict As Object ' Scripting.Dictionary
Set Dict = XLSPadlock1.ReadCustomCellValue("", "")
If Not Dict Is Nothing Then
For Each Key In Dict.Keys
MsgBox "Key: " & Key & ", Value: " & Dict(Key)
Next Key
End If
End Sub

Exemple complet : sauvegarde/restauration d’une colonne

Section titled “Exemple complet : sauvegarde/restauration d’une colonne”

Cette fonction d’assistance génère une chaîne séparée par des virgules à partir des valeurs d’une plage de cellules donnée.

Function CsvRange(myRange As Range) As String
Dim csvRangeOutput As String
Dim entry As Variant
For Each entry In myRange
If Not IsEmpty(entry.Value) Then
csvRangeOutput = csvRangeOutput & entry.Value & ","
End If
Next
If Len(csvRangeOutput) > 0 Then
CsvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End If
End Function

Cet événement est appelé lorsque l’utilisateur enregistre son travail. Il utilise la fonction d’assistance pour convertir l’intégralité de la plage utilisée de la colonne A en une seule chaîne et l’enregistre.

Sub XLSPadlock_SaveCustomValues()
Dim XLSPadlock1 As Object
On Error Resume Next
Set XLSPadlock1 = Application.COMAddIns("GXLS.GXLSPLock").Object
Dim rng As Range
Set rng = ThisWorkbook.Worksheets(2).Range("A1").CurrentRegion
Dim myString As String
myString = CsvRange(rng)
XLSPadlock1.WriteCustomCellValue "MyEntireColumnA", myString
End Sub

Cet événement est appelé lorsque l’utilisateur charge un fichier de sauvegarde. Il lit la chaîne et restaure les valeurs dans la colonne A.

Sub XLSPadlock_RestoreCustomValues()
Dim XLSPadlock1 As Object
On Error Resume Next
Set XLSPadlock1 = Application.COMAddIns("GXLS.GXLSPLock").Object
Dim Val As String
Val = XLSPadlock1.ReadCustomCellValue("MyEntireColumnA", "")
If Val <> "" Then
Dim r As Range, i As Long, ar
Set r = ThisWorkbook.Worksheets(2).Range("A:A")
r.ClearContents
ar = Split(Val, ",")
For i = 0 To UBound(ar)
r.Cells(i + 1, 1).Value = ar(i)
Next
End If
End Sub
## See Also
- [How to migrate user data from a previous version](excel-vba-migrate-user-data-updates)