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 :

Déclaration de variable qui sert dans plusieurs macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut Déclaration de variable qui sert dans plusieurs macro
    Bonjour,

    j'essaye d'avoir une variable qui contient une chaine de caractere (le nom d'un onglet) qui servirait pour plusieurs macros différentes

    j'ai donc mit en haut de module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Fournisseur As String
    et dans la premiere des macros, j'ai mit ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fournisseur = InputBox("Nom de l'onglet ?")
    mais ce qui me chagrine, c'est que ca marche par intermitence seulement

    J'utilise ma macro 1, j'indique le nom de l'onglet dans la fenetre qui pop, je lance ma macro 2, ca fonctionne, il se rappelle de la valeur de la variable.
    Et puis je lance ma macro 3 a répétition (je travaille dessus et donc je modifie un truc et puis je teste) et a un moment, ca se met a planter parce qu'il a oublié la valeur de ma variable

    Qu'est-ce que je fais qui peut occassionner cette perte de la valeur dema variable?
    Est-ce qu'il y aurait quelque chose a faire pour éviter ca?

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Tu n'as pas "re déclaré" ta variable à l'intérieur de la macro en question?

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut
    non, je ne l'ai déclarée qu'une seule fois, en haut de moduel

    si je l'avais redéclarée, j'aurai un probleme constant non? (ca ne marcherait pas du tout au lieu de marcher par intermitence ou j'ai mal compris?)

    aalex_38, donc ca t'arrive aussi de perdre la valeur stockée?
    Actuellement, pour éviter de tout faire crasher, j'ai mis un petit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Fournisseur = "" Then
    Fournisseur = InputBox("Nom de l'onglet ?")
    End If
    Au début de mes autres macros, donc ca ne plante plus misérablement, mais je ne comprend pas ce qu'il fait qu'il efface sa valeur

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    revois toutes tes macros, si par hasard tu n'as pas re déclaré ta variable dans certaines macros
    la variable publique déclarée dans un module général ne perdra pas sa valeur toute seul
    sauf si tu ferme ton classeur

  5. #5
    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 j'ai corrigé le lien
    En fait, j'aime bien maitriser ce que je fais et j'utilise rarement une variable publique en VBA, un lien ici : http://excel.developpez.com/faq/?page=VBA#VariablePubliqueVidee


    Edit : il existe d'autres solutions de sauvegarde des données, dans une plage nommée, comme je l'indique ci-dessus, dans une feuille (une feuille d'infos qui peut être masquée), ou alors en passant la valeur entre les procédures par exemple.

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut
    Je suis sure que je ne la déclare qu'a un seul endroit mercatog

    La macro va etre utilisée pour standardiser des fichiers de prix qui le sont assez peu. Donc l'onget concerné va changer a chaque fichier j'ai besoin de le changer en une seule manoeuvre
    Je peux effectivement la ranger aussi sec sur une des feuilles que je crée, là je suis sure qu'il va rester, mais ca ne me semblait pas tres propre

    Et puis surtout, je ne comprend pas comment ca peut marcher parfois oui parfois non alors que je ne ferme pas mon classeur

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Si tu peux expliquer davantage
    ta variable publique est déclarée dans un module public?
    tu travailles sur plusieurs fichiers?
    ..etc

  8. #8
    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,


    Je n'aime pas trop utiliser les variables publiques pour ces raisons, tu peux déclarer une variable (plage nommée) ou sauver la valeur dans une cellule.

    Un exemple perso d'uiltisation d'une plage nommée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    ' Boucle sur les names pour vérifier l'existence de Rep1
    For Each xname In Names
        If xname.NameLocal = "Rep1" Then
            Rep1Existe = True
            xname.RefersToR1C1 = "mavaleurasauvegarder"
            exit for
        End If
     Next
     
    ' Si la Variable n'existe pas on la crée
    If Not Rep1Existe Then
        ActiveWorkbook.Names.Add Name:="Rep1", RefersToR1C1:="mavaleurasauvegarder"
    End If
     
    Msgbox [Rep1]

Discussions similaires

  1. [AC-2000] Mémoriser une variable pour utilisation dans plusieurs procédures
    Par P'tit aviateur dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/07/2009, 10h49
  2. acceder à une variable qui est dans une condition
    Par Snipy dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2009, 12h39
  3. Réponses: 2
    Dernier message: 13/11/2008, 14h07
  4. Variable global utilisable dans plusieurs Forms
    Par nams2590 dans le forum Visual C++
    Réponses: 13
    Dernier message: 11/12/2007, 11h34
  5. Accéder à une variable qui est dans une string
    Par ploxien dans le forum Langage
    Réponses: 4
    Dernier message: 13/04/2007, 14h48

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