Conserver variable en fin d´exécution du cod

Résolu
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.
Configuration: Windows 2000 Internet Explorer 6.0

8 réponses

  1. Modérateur
    Salut,
    Peut être tout simplement en la "stockant" dans une cellule d'une feuille du classeur Excel, genre en EZ15900.
    1. 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?
  2. Modérateur
    non. C'est la seule que je connaisse.
    Plusieurs pistes ici
    1. Merci quand même pour ton aide Pijaku.
  3. Modérateur
    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
    1. 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
      1. Modérateur
        Salut garion,
        Bien sur. Mais la question est de stocker une variable sans la placer dans une cellule... D'où le code.
    2. ah d'accord, mais ou es concervé la valeur alors ? dans une partie non accessible graphiquement du fichier ?
      1. Modérateur
        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
        1. mouais, pourquoi faire simple en utilisant sa tete quand on peu faire compliqué en utilisant l'aide de vba
          1. 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.