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 :

portée de variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 62
    Par défaut portée de variable
    bonjour à tous.

    J'ai besoin de votre aide pour un problème qui me parait tellement simple et idiot mais je bloque depuis quelques minutes déjà...

    J'ai lu l'aide concernant les portées de variables.

    Dans mon, projet, j'ai besoin de connaitre le nom d'un workbook pourqu'une macro fonctionne correctement.

    Afin que le nom soit correct (et pas perturbé par l'exécution d'une autre macro entre temps), j'avais pensé au système suivant

    Dans la macro concernée qui est contenue dans la feuille 1 en mode WorkSheet_Change, j'ai mis la commande suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Workbooks(workbook_name).Activate
    et dans le workbook_Open qui contient cette macro, j'ai mis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public workbook_name As String
    Private Sub Workbook_Open()
        workbook_name = Application.ActiveWorkbook.Name
    End Sub
    Je me dis que ça devrait fonctionner puisqu'à l'ouverture, j'aurai le nom exact du fichier. Si je fais ça c'est parceque le nom du fichier changera peut être dans l'avenir et c'est pour permettre de faire évoluler le nom du fichier sans avoir à rentrer dans le code pour changer le nom.

    Cependant, cela ne fonctione pas et il me dit que l'indice n'est pas correct. En effet, le mode debug m'insique que le workbook_name est vide. Pourtant avec la déclaration en Public il me semble que cela devrait fonctionner

    Merci d'avance pour votre aide

  2. #2
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 15
    Par défaut
    Toute variable publique sera visible par l'ensemble des macros du projet (i.e. du classeur).
    Du coup, la portée de la variable workbook_name se restreind au classeur où elle a été déclarée.

    Le plus simple serait de figer dans le code le nom du workbook.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 62
    Par défaut
    Oui je sais que ça serait le plus simple mais je cherche une solution plus souple pour les mises à jour futures...

    Si je suis ton raisonnement, la portée de ma variable est pour tout le classeur c'est à dire pour toutes les feuilles et modules contenus par le classeur donc logiquement, elle devrait être visible dans "Sheet1" su même classeur. Je ne vois donc pas pourquoi cela ne fonctionne pas.

    Pour information, j'ai mis un MSgBox "" & workbook_name à la fin de Workbook_open et il me donne le bon nom du fichier. Neanmoins, ce nom ne va pas jusqu'à "Sheet1" ce qui n'est pas logique.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Eh non, une variable déclarée en public dans un module de Thisworkbook, n'est pas accessible depuis une feuille de code d'une feuille de calculs et inversement. Tu peux t'en sortir en la passant en paramètre de la feuille de code de la feuille de calculs vers une macro contenue dans un module standard.
    Mais tu nous dis pas tout
    De quel classeur veux-tu avoir le nom ? Celui qui contient la feuille dont tu utilises l'événement change ? Si c'est ça alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    workbook_name = ActiveWorkbook.Name
    Maintenant, si tu veux l'utiliser dans une macro située dans un module standard, tu passes son nom en paramètre
    Tu dis

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 15
    Par défaut
    Quel intérêt d'activer un classeur déjà activé ?

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par jalseth Voir le message
    Non c'est dans le même projet puisque c'est dans le même fichier Excel.
    Alors le nom du classeur est Thisworkbook.name, pas besoin de variable.

    Edit
    Citation Envoyé par SorrowLane Voir le message
    Quel intérêt d'activer un classeur déjà activé ?
    +1 (j'étais distrait par 20 jours de congés)

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 62
    Par défaut
    Je sais que ça parait un peu idiot ce que je fais mais comme j'utilise plusieurs Workbook je me demandais aussi pourquoi ça plantais sans raison alors qu'il est dans la macro. Ce que j'ai constaté c'est que si je le réactive artificiellement ça fonctionne. Moi je cherche pas à optimiser le code, je veux que ça marche et tout les moyens sont bon MDR...

    Je vais tenter le thisWorkbook.name

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 62
    Par défaut
    Alors j'ai vérifié les deux hypothèses...

    La technique de ouskel marche c'est à dire en mettant thisWorkBook.NAme. La macro ne plante pas et s'exécute à merveille...

    De plus, Laestic affirmait que les variable foncitonnait dans l'autre sens, je me suis donc dis qu'il n'y avait pas de raison pour que ça ne marche pas dans l'autre sens.... Par conséquent, le code suivant marche:

    Appliacation.Workbooks(ThisWorkbook.Workbook_name).Activate

    Merci à tous pour votre aide, je suis un peu plus familier avec les portées de variables désormais...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 44
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Eh non, une variable déclarée en public dans un module de Thisworkbook, n'est pas accessible depuis une feuille de code d'une feuille de calculs et inversement. [...]
    Euh si, en préfixant le nom par l'objet qui l'héberge (nom complet) :
    maFeuille.maVariablePublique
    maFeuille.monControle
    monModule.maVariablePublique
    monUserForm.maVariablePublique

    Juste en passant.

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par Laestic Voir le message
    Euh si, en préfixant le nom par l'objet qui l'héberge (nom complet) :
    maFeuille.maVariablePublique
    maFeuille.monControle
    monModule.maVariablePublique
    monUserForm.maVariablePublique

    Juste en passant.
    Merci, j'ignorais ça.

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

Discussions similaires

  1. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  2. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  3. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  4. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05
  5. [FLASH MX 2004][XML]portée de variable
    Par marco_ dans le forum Flash
    Réponses: 8
    Dernier message: 29/04/2004, 15h47

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