Conserver variable en fin d´exécution du cod

Résolu/Fermé
andromedor - 15 janv. 2010 à 08:45
 andromedor - 20 janv. 2010 à 15:36
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
15 janv. 2010 à 13:21
Salut,
Peut être tout simplement en la "stockant" dans une cellule d'une feuille du classeur Excel, genre en EZ15900.
0
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
19 janv. 2010 à 13:34
non. C'est la seule que je connaisse.
Plusieurs pistes ici
0
Merci quand même pour ton aide Pijaku.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
20 janv. 2010 à 09:38
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 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
20 janv. 2010 à 10:04
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
20 janv. 2010 à 10:46
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 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
20 janv. 2010 à 10:48
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
20 janv. 2010 à 10:57
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 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
20 janv. 2010 à 11:20
mouais, pourquoi faire simple en utilisant sa tete quand on peu faire compliqué en utilisant l'aide de vba
0
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