Conserver variable en fin d´exécution du cod

Résolu
andromedor -  
 andromedor -
Bonjour,

Dans le cadre d´une petite programmation dans VBA excel que je suis en train de faire, je souhaiterais qu´en fin d´éxécution de mes codes une variable reste conservée et ceci même après fermeture du classeur excel. Ainsi quand j´ouvre le classeur cette variable détient la valeur qu´elle avait lors de la dernière utilisation du programme.
Je me suis rendu compte que la declaration: Static nom_de_variable As Type ne permet de conserver la dernière valeur de la variable que lorsque le classeur n´a pas été fermé. Lorsque je réouvre le classeur la variable s´initialise automatiquement a 0 :~).

Quelqu´un a-t-il une solution?

Merci beaucoup pour votre aide.
A voir également:

8 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Salut,
Peut être tout simplement en la "stockant" dans une cellule d'une feuille du classeur Excel, genre en EZ15900.
0
andromedor
 
Oui c´est ce à quoi j´ai pensé. Mais je suppose qu´il existe une méthode un peu plus "rigoureuse" pour faire cela. N´as tu pas une idée?
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
non. C'est la seule que je connaisse.
Plusieurs pistes ici
0
andromedor
 
Merci quand même pour ton aide Pijaku.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,
Je viens d'essayer la méthode utilisée dans le lien du post 3. Cela fonctionne très bien. Je te laisse ici les codes et un fichier exemple. Ce dernier ajoute 1 à la variable "stockée" à chaque ouverture du classeur et l'inscris en A1.

Code à inscrire dans un module :

Public Property Get MaVar() As Variant
MaVar = [toto]
End Property

Public Property Let MaVar(ByVal vNewValue As Variant)
ThisWorkbook.Names.Add "toto", Int(vNewValue), False
End Property


Dans ton code de macro tu utilises la variable nommée :
MaVar
comme ceci par exemple :

Private Sub Workbook_Open()
If ThisWorkbook.Path = "" Then
    MaVar = 1
Else
MaVar = MaVar + 1
[A1] = MaVar
End If
End Sub


Sources : MichDenis cf lien post 3

Fichier exemple :
http://www.cijoint.fr/cjlink.php?file=cj201001/cij8pdtK9x.xls
0
garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   406
 
il n'y a pas besoin d'écrire tout ce code pour enregistrer une valeur dans une cellule et la récupérer a l'ouverture
tu a juste a jouer avec l'évenement before close et open de thisworkbook en ayant déclaré dans un module public mavar as variant
dans before close tu met sheets("feuille de variable").range("A1").value=mavar
et dans l'évenement open tu met: mavar=sheets("feuille de variable").range("A1").value

si tu veu tu peu désactiver les messages d'alerte et mettre du code pour la sauvegarde automatique
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Salut garion,
Bien sur. Mais la question est de stocker une variable sans la placer dans une cellule... D'où le code.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   406
 
ah d'accord, mais ou es concervé la valeur alors ? dans une partie non accessible graphiquement du fichier ?
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
A priori, sauf erreur d'interprétation de ma part, dans un "nom" du classeur, nom qui est lui caché :

Public Property Let MaVar(ByVal vNewValue As Variant)
ThisWorkbook.Names.Add "toto", Int(vNewValue), False
End Property
0
garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   406
 
mouais, pourquoi faire simple en utilisant sa tete quand on peu faire compliqué en utilisant l'aide de vba
0
andromedor
 
Merci Pijaku pour toute ton aide. Cette méthode fonctionne, je l´ai testé pour un integer. Je vais essayer de la tester desormais pour un tableau de valeurs. J´espère que les données stockées sous cette forme son inaccessibles à l´utilisateur.
0