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

8 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut,
    Peut être tout simplement en la "stockant" dans une cellule d'une feuille du classeur Excel, genre en EZ15900.
    0
    1. 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
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    non. C'est la seule que je connaisse.
    Plusieurs pistes ici
    0
    1. andromedor
       
      Merci quand même pour ton aide Pijaku.
      0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  4. garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   408
     
    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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut garion,
      Bien sur. Mais la question est de stocker une variable sans la placer dans une cellule... D'où le code.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   408
     
    ah d'accord, mais ou es concervé la valeur alors ? dans une partie non accessible graphiquement du fichier ?
    0
  7. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  8. garion28 Messages postés 1545 Date d'inscription   Statut Membre Dernière intervention   408
     
    mouais, pourquoi faire simple en utilisant sa tete quand on peu faire compliqué en utilisant l'aide de vba
    0
  9. 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