Par exemple, dans Excel, vous pouvez faire Outils/Options, onglet General, cocher "Liste des derniers fichiers utilisés", et mettre cette valeur sur 9 (Ce qui veut simplement dire que quand vous allez continuer à travailler avec Excel, petit à petit, il va "garnir" le menu Fichier avec, en dessous la liste de tous les derniers fichiers que vous avez ouvert, jusqu'à un maximum de 9). Et bien, cette option de 9 fichiers, il est bien possible que ce soit dans la base de registre qu'elle soit stockée (Bien que je n'en soit pas sûr pour cet exemple précis, mais c'est quand même un bon exemple)
Vous aussi, vous pouvez stocker des informations système dans la base de registre. Les avantages sont nombreux :
L'instruction pour enregistrer quelque chose dans la base de registre est SaveSettings. Ce que vous sauvegardez avec SaveSettings sinstallera automatiquement dans (Avec Windows 2000) :
HKEY_USERS \ S-4-6-23-9092171932-311282134-1221991238-2009 \ Software \ VB and VBA Program Settings
Le chiffre en bleu est l'identification (fictive) de mon nom d'utilisateur.
Avant d'aller plus loin, et à titre d'exercice, essayez de trouver dans la base de registre (Démarrer/Exécuter : regedit), ce fameux endroit VB and VBA Program Settings
Dans cette clé (VB and VBA Program Settings) vont donc se trouver les clés et sous-clés de votre application.
Par exemple, imaginons que vous avez développé une feuille Excel complexe (une application), que nous vous avez nommée "UltraCalc" - Ce n'est pas forcément le nom du fichier .XLS, c'est un titre, tout simplement, vous avez plusieurs genres d'options, mais vous voulez sauvegarder dans la partie "Informations personnelles", le "Nom de l'utilisateur" qui serait égal à "André Dupont". Vous écririez alors ceci dans une macro VBA :
Sub TestRegistre()
SaveSetting appname:="UltraCalc",
section:="Informations personnelles",
key:="Nom de l'utilisateur", setting:="André
Dupont"
End Sub
Dès que vous avez exécuté cette ligne de code, si vous retournez dans RegEdit, vous allez voir ceci :
ASTUCE : Pour retrouver plus facilement cet endroit, une fois que vous êtes dans RegEdit, faites Edition/Rechercher : andré Dupont, et OK. Il va directement vous positionner sur la clé Informations Personnelles
On aurait pu également écrire la ligne de code comme ceci, bien entendu, mais ça me parait moins clair :
SaveSetting "UltraCalc", "Informations personnelles", "Nom de l'utilisateur", "André Dupont"
Puisqu'on a écrit quelque chose dans la base de registre, il faut bien entendu pouvoir le lire avec VBA. L'instruction GetSetting s'en charge. Voici l'instruction si nous voulons afficher André Dupont :
MsgBox GetSetting(appname:="UltraCalc", section:="Informations personnelles", key:="Nom de l'utilisateur")
Si vous exécutez ceci, il va donner un message "André Dupont"
Remarquez les parenthèses en plus - C'est parce que SaveSetting ne renvoie pas de valeur qu'il ne faut pas de parenthèses. GetSetting renvoie le nom de l'utilisateur, donc il faut des parenthèses.
Si vous avez fait une faute d'orthographe, ou si la clé n'existe simplement pas, comme dans ces deux cas :
MsgBox GetSetting(appname:="UltraCalk",
section:="Informations personnelles", key:="Nom de l'utilisateur")
MsgBox GetSetting(appname:="UltraCalc",
section:="Informations personnelles", key:="Date de
naissance")
Il n'y a pas d'erreur, mais simpement le MsgBox sera vide.
Il est possible de pallier à ce genre de circonstances simplement en utilisant un paramètre de plus : Default, comme ceci :
MsgBox GetSetting(appname:="UltraCalk",
section:="Informations personnelles", key:="Nom de l'utilisateur",Default:="Y'a
rien !")
Affichera "André dupont"
MsgBox GetSetting(appname:="UltraCalc",
section:="Informations personnelles", key:="Date de
naissance",Default:="Y'a rien !")
Affichera "Y'a rien !"
MsgBox GetSetting(appName:="UltraCalc",
section:="Informations personnelles", key:="Nom de l'utilisateur",Default:="Y'a
rien !")
Affichera "Y'a rien !"
On peut effacer soit l'appName (Ici UltraCalc), ce qui détruira tout ce qui est sous-jacent, ou la section (Ici par exemple Informations personnelle), ou une simple clé (Nom de l'utilisateur).
Exemples :
DeleteSetting appname:="Ultracalc",
section:="Informations personnelles", key:="Nom de l'utilisateur"
DeleteSetting appname:="Ultracalc", section:="Informations personnelles"
DeleteSetting appname:="Ultracalc"
A nouveau, on n'est pas obligé de nommer les paramètres :
DeleteSetting "Ultracalc",
"Informations personnelles", "Nom de l'utilisateur"
DeleteSetting "Ultracalc", "Informations personnelles"
DeleteSetting "Ultracalc"
Si on fait une faute d'orthographe, une erreur est générée (Rattrappable avec On Error bien entendu)
Une excellente utilisation de la base de registre pourrait consister à protéger une application. Par exemple, vous livrez à un client un classeur avec plein de macros, mais vous ne savez pas s'il va vous payer pour votre travail de programmation. Vous allez alors faire en sorte que le classeur accepte de s'ouvrir 5 fois, et à la 6ème fois, un message d'erreur "Votre période d'essai est terminée.", et le classeur se ferme automatiquement, le client est obligé de prendre contact avec vous pour que vous le laissiez ouvrir le classeur autant de fois qu'il le désire.
En fait, nous allons créer une clé Version d'essai, dans la section Démarrage, de l'application UltraCalc, qui va être à la base mise sur 0, et qui va s'augmenter de 1 en 1 à chaque ouverture du classeur UlktraCalc.XLS. Pour que ce soit absolument automatique, nous mettrons ce code dans Workbook_Open, qui s'exécutera automatiquement à l'ouverture de UltraCalc.XLS.
Marche à suivre :
End Sub
Il s'agit d'une procédure qui va s'exécuter automatiquement
lors de l'ouverture de ce classeur. Consultez
les événements de feuilles et de classeur si vous désirez
en savoir plus sur ces procédures automatiques.
Nous allons commencer par déterminer si cette clé existe. Si elle n'existe pas, il faut la créer, et lui donner 0 comme valeur, et si elle existe, nous allons simplement l'augmenter de 1 à chaque voyage. Allons-y pas à pas. Dans cette première version du programme, nous allons déterminer avec GetSetting si cette clé existe. Vous vous rappelez de Default qui est renvoyé en cas d'inexistance ? Nous allons l'utiliser. Dans ce cas, si vous exécutez ce programme plusieurs fois de suite, vous aurez toujours le message "Première utilisation", puisque GetSetting renvoie inlassablement rien, puisque la clé n'existe pas, et qu'aucun SaveSetting ne vient créer la clé :
Private Sub Workbook_Open()
If GetSetting(appname:="UltraCalc",
section:="Démarrage", key:="Version d'essai", Default:="rien")
= "rien" Then
MsgBox "première utilisation"
Else
MsgBox "pas la première utilisation"
End If
End Sub
Dans cette 2ème version améliorée, nous allons préciser que si justement GetSetting renvoie "rien", alors, avec SaveSetting, il faut mettre cette valeur à 0. Si vous excécutez cette procédure plusieurs fois de suite, la première fois, vous aurez le message "Première utilisation", et toutes les autres fois, vous aurez "Pas la première utilisation"
Private Sub Workbook_Open()
If GetSetting(appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", Default:="rien") = "rien"
Then
MsgBox "première utilisation"
SaveSetting appname:="UltraCalc",
section:="Démarrage", key:="Version d'essai", setting:=0
Else
MsgBox "pas la première utilisation"
End If
End Sub
Nous savons donc à la fin de cette procédure que la clé existe, et qu'elle a été créée si nécessaire. Les MsgBox sont devenus inutiles. Enlevons-les :
Private Sub Workbook_Open()
If GetSetting(appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", Default:="rien") = "rien"
Then
SaveSetting appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", setting:=0
Else
End If
End Sub
Le Ellse est aussi devenu inutile. Finalement, tout ce qui nous importait était de créer la clé si elle n'existait pas. Point !
Private Sub Workbook_Open()
If GetSetting(appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", Default:="rien") = "rien"
Then
SaveSetting appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", setting:=0
End If
End Sub
Maintenant, en dessous du End If, qui finalement n'aura eu l'éphémère utilité qu'au premier lancement du programme, nous allons augmenter la valeur de Version D'essai de 1. Attention, la ligne de code est longue :
Private Sub Workbook_Open()
If GetSetting(appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", Default:="rien") = "rien"
Then
SaveSetting appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", setting:=0
End If
SaveSetting appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", setting:=GetSetting(appname:="UltraCalc",
section:="Démarrage", key:="Version d'essai")
+ 1
End Sub
Ici, le Setting:= n'est pas un simple chiffre comme 1, 6 ou 85, mais en fait, la récupération de la clé GetSetting(appname:="UltraCalc", section:="Démarrage", key:="Version d'essai") PLUS UN
Si vous exécutez ce programme 6 fois, alors, la clé de registre sera égale à 6. Faites le, et ensuite, manuellement, allez dans la base de registre (regedit), et supprimez la clé Version D'essai pour pouvoir recommencer depuis 0 notre programme de protection.
Maintenant, il s'agit de donner un message d'erreur et de fermer immédiatement le classeur lorsqu'on dépasse 5 ouvertures de UltraCalc.XLS. Nous allons commencer par simplement afficher si oui ou non on a dépassé la limite des 5 ouvertures. Essayez d'exécuter ce programme 8 fois de suite (vous pouvez cliquer dans le programme et appuyer sur F5, c'est plus rapide). Si vous avez bien pris la peine d'effacer la clé avant de lancer ce programme, vous allez constater que les 5 premières exécution donnent le premier message, et toutes les autres sonnent le 2ème message :
Private Sub Workbook_Open()
If GetSetting(appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", Default:="rien") = "rien"
Then
SaveSetting appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", setting:=0
End If
SaveSetting appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", setting:=GetSetting(appname:="UltraCalc",
section:="Démarrage", key:="Version d'essai") + 1
If GetSetting(appname:="UltraCalc",
section:="Démarrage", key:="Version d'essai") <=
5 Then
MsgBox "vous n'avez pas
dépassé la limite"
Else
MsgBox "vous AVEZ
dépassé la limite"
End If
End Sub
Bien. Nous allons donc maintenant corriger le programme de manière à ce qu'il ne nous affiche pas bêtement si oui ou non on a dépassé la limite, mais seulement si on l'a dépassée, alors, il s'agit d'avertir l'utilisateur qu'il a dépassé la période d'essai, et que le classeur va être fermé.
Private Sub Workbook_Open()
If GetSetting(appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", Default:="rien") = "rien"
Then
SaveSetting appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", setting:=0
End If
SaveSetting appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai", setting:=GetSetting(appname:="UltraCalc",
section:="Démarrage", key:="Version d'essai") + 1
If GetSetting(appname:="UltraCalc", section:="Démarrage",
key:="Version d'essai") > 5 Then
MsgBox "Votre pédiode
d'essai est terminée"
ThisWorkbook.Close
End If
End Sub
Pour tester réellement ce programme :
Maintenant, normalement, vous êtes bloqué, vous ne pouvez plus entrer dans UltraCalc. Vous avez 3 solutions pour y entrer :
Si vous analysez tout ce que nous venons de faire, c'est bien intéressant, mais il y a évidememnt de grosses failles. C'éait juste un exercice de base pour apprendre à utiliser utilement la base de registre.