IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Conserver valeur variable en fin d´exécution de code VBA excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut Conserver valeur variable en fin d´exécution de code VBA excel
    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.

  2. #2
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour andromedor le forum tu peus faire un truc comme cela tu l'ecris dans une cellule avant de fermer ton classeur & sauve puis a l'open de ton classseur tu la récuperes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub es()
      Dim mavar As Long
         mavar = 10
         [a1] = mavar
         'et l 'inverse pour la recuperer
         mavar = [a1]
    End Sub

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut
    Ok merci laetitia. J´avais pensé a une solution de ce type mais je cherchais quelque chose plus rigoureux au niveau de la programmation car je suppose que ca doit exister.

  4. #4
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    bonjour à tous,

    Ok merci laetitia. J´avais pensé a une solution de ce type mais je cherchais quelque chose plus rigoureux au niveau de la programmation car je suppose que ca doit exister.
    Je ne vois pas ce qu'il n'y a pas de rigoureux dans la solution proposée par Laetitia, c'est une solution comme une autre et à mon avis une bonne solution.

    Il en existe d'autres : ecrire dans la base de registre, ecrire dans une cellule dans une feuille cachée par exemple, ecrire dans un fichier et le lire ...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 4
    Par défaut
    Bonjour,

    Citation Envoyé par aalex_38 Voir le message
    Je ne vois pas ce qu'il n'y a pas de rigoureux dans la solution proposée par Laetitia, c'est une solution comme une autre et à mon avis une bonne solution.
    Il en existe d'autres : ecrire dans la base de registre, ecrire dans une cellule dans une feuille cachée par exemple, ecrire dans un fichier et le lire ...
    Ce que andromedor semble rechercher, c'est donner à son code VBA une mémoire permanente pour ses variables, indépendamment du classeur Excel, permettant de conserver leur valeur même si la macro a terminé de s'exécuter, si le classeur est fermé puis ré-ouvert, ou si le PC éteint puis rallumé.

    C'est dommage, aalex_38 a évoqué une solution mais ne l'a pas expliquée afin qu'elle soit utilisable, du coup son commentaire ne fait pas avancer le sujet.

    Tu peux écrire dans la base de registre de Windows en utilisant les fonctions VBA :
    - SaveSetting (AppName As String, Section As String, Key As String, Setting As String)
    - GetSetting (AppName As String, Section As String, Key As String)

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim sauvegarde_nom As String
    sauvegarde_nom = "Saucisse cocktail"
    SaveSetting "Excel", "Module_de_Code", "Nom Conservé", sauvegarde_nom
     
    Dim lecture_nom As String
    lecture_nom = GetSetting("Excel", "Module_de_Code", "Nom Conservé")
    MsgBox lecture_nom
    Cordialement

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    389
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 389
    Par défaut
    Bonjour,

    Peut être une autre solution

    dans le module Thisworbook

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        laValeur = Application.InputBox("Saississez une valeur quelconque", , , , , , , 1 + 2)
        ActiveWorkbook.Save
    End Sub
     
    Private Sub Workbook_Open()
        test
    End Sub
    dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Property Get laValeur() As Variant
        laValeur = [Essai]
    End Property
     
    Public Property Let laValeur(ByVal maValeur As Variant)
        ThisWorkbook.Names.Add "Essai", maValeur, False
    End Property
     
    Sub test()
    On Error Resume Next
        MsgBox laValeur
    End Sub
    A adapter

    JP

  7. #7
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, on peut passer par un fichier ini, voir ici

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour Schlobax, JPierreM et kiki29,

    Je doute qu'après plus de 2 ans la question soit toujours d'actualité.
    Ceci dit, vos réponses serviront peut-être à d'autres qui cherchent dans les anciennes discussions.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Par défaut
    Merci quand même pour vos réponses. Je pesne que ça servira toujours

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Par défaut
    j'utilise ceci pour conserver une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Names.Add Name:="VariableConservee", RefersTo:=MaVariable
    et pour la récuperer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVariable = [VariableConservee]

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 8
    Par défaut
    Même 6ans plus tard, ces commentaires m'ont bien servit AlainTech. Merci à tous!!

    Coridalement

  12. #12
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 132
    Par défaut
    Je viens de penser à un problème de gestion des évènements dans le temps en ayant recours à des valeurs booléennes pour désactiver les évènements dans certaines conditions et dès la première recherche je tombe sur cet ancien post qui propose de nombreuses possibilités. (Au passage si quelqu'un a d'autres propositions que mon idée pour gérer les évènements dans le temps je suis preneur)

    Merci aux utilisateurs qui consacrent du temps à répondre aux questions !

    J'en profite aussi pour rappeler que rechercher permet souvent de trouver des perles donc il ne faut pas négliger cet aspect

  13. #13
    Membre confirmé
    Homme Profil pro
    COMPTABLE
    Inscrit en
    Décembre 2014
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : COMPTABLE
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2014
    Messages : 56
    Par défaut
    Citation Envoyé par Schlobax Voir le message
    Bonjour,



    Ce que andromedor semble rechercher, c'est donner à son code VBA une mémoire permanente pour ses variables, indépendamment du classeur Excel, permettant de conserver leur valeur même si la macro a terminé de s'exécuter, si le classeur est fermé puis ré-ouvert, ou si le PC éteint puis rallumé.

    C'est dommage, aalex_38 a évoqué une solution mais ne l'a pas expliquée afin qu'elle soit utilisable, du coup son commentaire ne fait pas avancer le sujet.

    Tu peux écrire dans la base de registre de Windows en utilisant les fonctions VBA :
    - SaveSetting (AppName As String, Section As String, Key As String, Setting As String)
    - GetSetting (AppName As String, Section As String, Key As String)

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim sauvegarde_nom As String
    sauvegarde_nom = "Saucisse cocktail"
    SaveSetting "Excel", "Module_de_Code", "Nom Conservé", sauvegarde_nom
     
    Dim lecture_nom As String
    lecture_nom = GetSetting("Excel", "Module_de_Code", "Nom Conservé")
    MsgBox lecture_nom
    Cordialement
    bonjour
    j'ai créer une fonction sur Excel
    est ce que je peux utiliser ce code pour enregistrer les resultats ?
    Et ect ce que je dois ecrire ce code dans le Module de la Fonction ?
    ou bien dans le Workbook ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] inserer une variable a partir d'une cellule dans mon code VBA / EXCEL 2013
    Par schoret dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/10/2014, 09h40
  2. Réponses: 5
    Dernier message: 17/03/2013, 11h26
  3. Aide pour simplifier un code VBA Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 24/01/2008, 16h15
  4. Code VBA excel form et modules
    Par Cptnikita dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/10/2007, 10h15
  5. Problème avec un code Vba Excel
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/10/2007, 16h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo