OVH Cloud OVH Cloud

Sauveagrde de paramètres VBA

3 réponses
Avatar
abcd
Bonjour aux programmeurs

je voulais savoir ce que vous connaissiez et ou utilisiez pour=20
enregistrer des param=E8tres VBA de fa=E7on =E0 les r=E9cup=E9rer =E0 la =
r=E9ouverture=20
du classeur. Sans passer par un fichier ext=E9rieur (pas de .ini ni de=20
base de registre)

Il y a bien s=FBr la solution de garder une feuille masqu=E9e et invisi=
ble=20
que le code =E9crit et lit =E0 l'insu de l'utilisateur. On pourrait=20
=E9ventuellement imaginer un UserForm maintenu masqu=E9 (ce qui revient u=
n=20
peu au m=EAme).

Je trouve un peu "lourd" d'ajouter =E0 un classeur de tels objets si=20
c'est juste pour enregistrer une ou deux variables simples.

y a-t-il donc des m=E9thodes "l=E9g=E8res" pour stocker =E7a dans le cl=
asseur=20
ou dans les modules VBA ? Quels moyens simples imaginer ?

merci pour vos =E9changes

3 réponses

Avatar
Hervé
Bonsoir abcd,
Tu peux utiliser un ou plusieurs noms (Insertion|Nom|Définir...) mais avec
la macro tu peux les cacher de façon à ce qu'ils soient invisibles dans la
boite en question (Insertion|Nom|Définir...). Les valeurs sont stockées sous
forme de String, si elles sont numériques, utilise la fonction Val() pour
les convertir en nombre à la récupération. De cette façon, si tu as peu de
valeurs ça peut être une bonne solution. Teste pour voir :

'variables publiques pour être utilisées partout
Public Val1 As Double
Public Val2 As String

Sub LireNom()
Dim Nom As Name

'si le nom n'existe pas
On Error Resume Next

'récupère la 1ère valeur dans
'la variable publique Val1 (Double)
Set Nom = ThisWorkbook.Names("Valeur1")
If Err.Number = 0 Then
'doit être converti en nombre avec Val()
Val1 = Val(Right(Nom, Len(Nom) - 1))
End If

'récupère la 2ème valeur dans
'la variable publique Val2 (String)
Set Nom = ThisWorkbook.Names("Valeur2")
If Err.Number = 0 Then
Val2 = Right(Nom, Len(Nom) - 1)
End If

MsgBox Val1 * 10 & vbCrLf & Val2

End Sub

Sub AjoutModifNom()
Dim valeur1 As Double
Dim valeur2 As String
valeur1 = 125.789
valeur2 = "Test"

'inscrit les valeurs dans des Noms cachés
'les valeurs sont inscrites sous forme de chaine
'pour les nombres, faire une convertion avec Val()
'False = invisible
ThisWorkbook.Names.Add "Valeur1", valeur1, False
ThisWorkbook.Names.Add "Valeur2", valeur2, False

End Sub

Sub SupprimerNom()
Dim Nom As Name
On Error Resume Next
Set Nom = ThisWorkbook.Names("Valeur1")
Nom.Delete
Set Nom = ThisWorkbook.Names("Valeur2")
Nom.Delete

End Sub

Hervé.

"abcd" a écrit dans le message news:

Bonjour aux programmeurs

je voulais savoir ce que vous connaissiez et ou utilisiez pour
enregistrer des paramètres VBA de façon à les récupérer à la réouverture
du classeur. Sans passer par un fichier extérieur (pas de .ini ni de
base de registre)

Il y a bien sûr la solution de garder une feuille masquée et invisible
que le code écrit et lit à l'insu de l'utilisateur. On pourrait
éventuellement imaginer un UserForm maintenu masqué (ce qui revient un
peu au même).

Je trouve un peu "lourd" d'ajouter à un classeur de tels objets si
c'est juste pour enregistrer une ou deux variables simples.

y a-t-il donc des méthodes "légères" pour stocker ça dans le classeur
ou dans les modules VBA ? Quels moyens simples imaginer ?

merci pour vos échanges
Avatar
abcd
pour du texte, j'imagine qu'il faut aussi virer les guillemets
Set Nom = ThisWorkbook.Names("Valeur2")
Val2 = Mid(Nom, 3, Len(Nom) - 3)

mais je ne savais pas cette possibilité, c'est une première bonne i dée.

Un peu bidouille (la type de la variable n'est pas gardé) mais c'est
déjà une méthode efficace pour de petite variables.



D'autres astuces ?
Avatar
anonymousA
bonjour,

Il te faut pour utiliser ces instructions une référence à Microsoft
Visual Basic Extensibilty 3.5.
une autre manière possible, c'est d'enregistrer dans un module bien
précis de ton fichier des élements de variable, p.e ici dans le module2
a été enregistré la variable tataE ( à la ligne 3 du code dans le
module2). Par l'instruction suivante ailleurs dans ton code, tu
récupères la valeur 45 de la manière suivante

tata =
Split(ActiveWorkbook.VBProject.VBComponents("Module2").CodeModule.Lines(3,
1), "=")(1)
MsgBox tata

Ce n'est pas forcément la méthode la plus simple mais en dehors de
casser le code VBA du projet, elle permet de rendre inaccessibles les
données à contrario des méthodes de masquage de feuille ou de noms
cachés dont la facilité d'accès par un code VBA ultrasimple est grande.
Les valeurs peuvent changer ( utilisation de la métode find et
Replaceline de la bibliothèque VBIDE.

A+


Bonjour aux programmeurs

je voulais savoir ce que vous connaissiez et ou utilisiez pour
enregistrer des paramètres VBA de façon à les récupérer à la réouverture
du classeur. Sans passer par un fichier extérieur (pas de .ini ni de
base de registre)

Il y a bien sûr la solution de garder une feuille masquée et invisible
que le code écrit et lit à l'insu de l'utilisateur. On pourrait
éventuellement imaginer un UserForm maintenu masqué (ce qui revient un
peu au même).

Je trouve un peu "lourd" d'ajouter à un classeur de tels objets si
c'est juste pour enregistrer une ou deux variables simples.

y a-t-il donc des méthodes "légères" pour stocker ça dans le classeur
ou dans les modules VBA ? Quels moyens simples imaginer ?

merci pour vos échanges