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 :

utilisation d'une variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 30
    Par défaut utilisation d'une variable
    Bonjour,

    j'ai un souci avec une macro.
    Dans une macro (appelée macro1), je fais apparaitre un msgbox me laissant le choix de repondre Yes ou No. Ce msgbox est appelé "Question2"

    suivant la reponse donnée, la macro doit executer ou pas une partie du code (je lui fait executer un saut dans le code afin qu'une partie de celui-ci ne soit pas executé)

    A la fin de la macro, une autre macro (appelée macro2) se trouvant dans une autre feuille excel doit se lancer.

    jusque la pas de prob.

    La ou je cale c'est qd je souhaite que cette deuxieme macro utilise la variable "Question2" pour effectuer une partie du second code. La macro2 ne retient pas la valeur attriubée a cette variable lors de la macro1.

    Je teste en faisant un msgbox(Question2), mais aucune valeur n'apparait dans le popup.

    Ma question est donc la suivante : Comment faire pour que la valeur attribuée a ma variable Question2 me "suive" lors de l'execution de la macro2?

    Merci

  2. #2
    Membre éclairé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Par défaut
    Bonjour,

    Si tes deux macro sont dans le même module, il faut déclarer ta variable en haut du module en dehors des macros pour que la variable soit global.

    Sinon, le plus simple est de copier ta variable dans une cellule xls et de la récupérer ensuite dans ta macro 2.

  3. #3
    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
    Sinon tu peux passer un paramètre a macro2 du genre

    '
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Appel a macro2 : 
    call macro2(MonParam)

    Et dans macro2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub macro2(byval MonString as string)
    '...
    end sub

    si tu ne veux pas que la donnée soit obligatoire tu peux utiliser le mot clef optional


    Edit: Mieux vaut 3 réponses que pas de réponses du tout !

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Algorithmie de base les variable d'une fontion ne sont pas connue par une autre fonction

    Soit tu déclare ta variable en public (ce qui peu si tu ne fais pas attention provoquer quelque problème)
    Soit tu luis passe la variable en argument
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    sub macro1 ()
    dim rep as string
    rep = InputBox("taper un texte")
     
    macro2 rep
    end sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sub macro2(ligne as string)
    ligne="Vous avez taper" & Chr(13) & ligne
    msgbox ligne
    end sub
    Edit : je crois que j'ai été un peu long a répondre deux personne son passé par la entre temps

  5. #5
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 30
    Par défaut
    mes deux macros sont dans des fichiers excel distincts

    pas l'impression que cela marche...

    pour lancer la seconde macro je fais :

    application.run"nom_du_fichier_excel.xls!macro2"

  6. #6
    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
    pas l'impression que cela marche...
    quoi donc ?


    A la fin de la macro, une autre macro (appelée macro2) se trouvant dans une autre feuille excel doit se lancer.

    jusque la pas de prob.
    donc tu arrives bien a appeller une autre macro ? Peut être pourrais-tu montre le bout de code correspondant

  7. #7
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Il me semble que tu peux lui transmettre des arguments (pas le temps de chercher ou je l'avais lut je te laisse voir les tuto s'il faut)

    Mais regarde ce que dit la formidable aide excel sur run
    Cette méthode exécute une macro ou appelle une fonction. Elle peut être utilisée pour exécuter une macro écrite en Visual Basic ou dans le langage de macro de Microsoft Excel ou pour exécuter une fonction dans une DLL ou une XLL.

    expression.Run(Macro, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)

    expression Obligatoire. Expression qui renvoie un objet Application.

    Macro Argument de type Variant facultatif. Macro à exécuter. Il peut s'agir d'une chaîne de caractères contenant le nom de la macro, d'un objet Range indiquant l'endroit où se trouve la fonction ou encore d'un identificateur de Registre pour une fonction DLL (XLL) inscrite dans le Registre. En cas d'utilisation d'une chaîne de caractères, celle-ci sera évaluée dans le contexte de la feuille active.

    Arg1-Arg30 Argument de type Variant facultatif. Arguments à transmettre à la fonction.

    Donc tu peux lui donner des arguments sans aucun problème

    Au pire tu peux toujours passer par une cellule mais certain diront que c'est moins propre

    Edit je viens de tester

    dans un module de test1.xls
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub macro1()
    Dim rep As String
    rep = InputBox("taper un texte")
     
    Application.Run "test2.xls!macro", rep
    End Sub
    dans un module de test2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub macro(ligne As String)
    ligne = "Vous avez taper" & Chr(13) & ligne
    MsgBox ligne
    End Sub
    Ca marche sans problème

  8. #8
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 30
    Par défaut
    voici un bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Question2 = MsgBox("Do the SD input files need to be saved under the share drive for the client?", vbYesNo, "files to be saved?")
     
    If Question2 = 6 Then
    Else
    GoTo zapp:
    End If
     
    ActiveWorkbook.SaveAs Filename:= _ (...)
     
    zapp:
    donc si le reponse est oui cela sauve les fichiers, si non cela ne les sauve pas

    Ensuite des operations sont encore effectuées
    A la fin une autre macro est appelée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run "nomdefichier2.xls!macro2", Question2
    donc en faisant ceci (la commande si dessus), la macro2 va devrait utiliser la valeur de la variable Question2 (donc 6 si c'est oui, 7 si c'est non) dans la seconde macro?

    Par exemple si dans macro2 je fais

    devrait donc apparaitre soit 6 ou 7 suivant le bouton sur lequel j'ai cliqué dans la premiere macro?

  9. #9
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Permièrement utilise les balise code quand tu donne un code la c'est pas lisible
    Regarde la fin du premier post du forum il y a une explication imagé (voila meme le lien direct)après l'avoir vu un protozoaire trisomique pourrait le faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Question2 = 6 Then
    ActiveWorkbook.SaveAs Filename:= _ (...)
    End If
    c'est quand même mieux que les goto n'importe quel prof d'algo te le dira.

    Pour revenir a ton problème

    Il faut quand tu déclare ta macro préciser quelle attend des arguments
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sub macro2(Question2 as integer)
    et ensuite tu fait
    Les variables ne sont pas obligé d'avoir le même nom d'un macro a l'autre mais tu peut très bien remplacer question2 dans n'importe quel nom de variable dans la deuxième macro

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


    test ton programme pour voir ou tu passes, sinon fait un test de base du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Montest()
    Question2 = "7"
    Application.Run "nomdefichier2.xls!MonTest2", Question2
    ''''''''' Attention sortie pour test
    Exit sub
    '....
    '......
    End sub
    Et dans nomdefichier2.xls la macro MonTest2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    sub MonTest2(byval reponse as string)
    msgbox reponse
    exit sub
    end sub
    Edit : La réponse de Krovax est parfaite

    Edit2 :

    En general, on "developpe"des outils dans l'urgence.
    Je rajouterai

    En general, dans l'urgence on "developpe"des outils ...

    ... qui ne marchent pas bien.

    Je crois que c'est vrai du débutant à l'expert.

    Sauf que l'expert a suffisamment d'expérience pour ...

    En tout cas macduss, c'est cool si ça fonctionne

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

Discussions similaires

  1. Utilisation d'une Variable(Vb) dans d'autre language
    Par cach dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/02/2005, 12h00
  2. Pl/SQL utilisation d'une variable dans un select
    Par larg dans le forum PL/SQL
    Réponses: 17
    Dernier message: 30/11/2004, 17h08
  3. utilisation d'une variable globale
    Par ZZ dans le forum ASP
    Réponses: 3
    Dernier message: 03/12/2003, 19h11
  4. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23
  5. Réponses: 4
    Dernier message: 05/06/2002, 14h35

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