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 :

changer un argument dans une procédure Sub


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut changer un argument dans une procédure Sub
    Bonjour,

    J'ai un soucis avec un code du type :

    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
    Sub 1 
    ....
          ARG = FALSE      
     
          Sub 2 (RefVal ARG As Boolean)
          ...
                 If .... Then 
                         ARG = TRUE
                         Exit Sub
                 End If
          ...
          End Sub 
     
          If ARG = TRUE Then Exit Sub
    ....
    End Sub
    Lorsque Sub 2 donne TRUE comme valeur à ARG, la valeur de ARG dans la Sub 1 reste FALSE

    Savez-vous comment faire pour que la Sub 2 change effectivement son argument ?

    Merci

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Tu doit déclarer la variable dans le dessus du module..
    Et tu a deux fois End Sub ?
    Peut-être oublier le reste avec le copier/coller ?
    A+
    Edit:
    Tu veux peut-être quelque chose dans le genre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function Change(ARG) As Boolean
        Change = Not ARG
    End Function
    Sub P1()
        '...
        'If .... Then
            ARG = Change(ARG)
        'End If
        '...
        If ARG = True Then Exit Sub
        '....
    End Sub
    Et la prochaine fois essaye de mettre un code LISIBLE

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

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Premièrement utilise les balise code s'il te plais.

    Pour ton soucis essaye ceci
    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
    17
    18
    19
    20
    21
    22
    23
     
    sub test1 ()
     
    ....
    ARG = FALSE 
     
     
    test2 arg
     
    end sub
     
    Sub 2 (ARG As Boolean)
    ...
    If .... Then
    ARG = TRUE
    Exit Sub
    End If
    ...
    End Sub
     
    If ARG = TRUE Then Exit Sub
    ....
    End Sub
    parceque la j'ai l'impression que tu décrit ta sub 2 dans ta sub 1...

    Si tu veux plus d'info voici un petit tuto qui pourrais t'interesser a ce propos

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Bonjour,

    Pourquoi n'utilises-tu pas une fonction pour cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function Test() As Boolean
    Le "retour" de la fonction sera équivalent à ta Sub2, vu que tu veux récupérer quelque chose en sortie.

    Sinon, en ce qui te concerne :

    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
    17
    Sub 1
    ....
    ARG = FALSE
     
    Call Sub 2()
     
    If ARG = TRUE Then
    ....
    End Sub 
     
    Sub 2 (RefVal ARG As Boolean)
    ...
    If .... Then
    ARG = TRUE
    End If
    ...
    End Sub
    On emploie les procédures de cette façon. La Sub 2 change la valeur de ton ARG. Pour changer l'ARG de Sub 1, tu dois l'appeler dans Sub 1.

    EDIt : il faut aussi, effectivement, déclarer ton ARG tout en haut. Enfin, tes Exit Sub ne servent à rien. End Sub permet de clore une procédure. Exist Sub, à l'arrêter en plein milieu. Tu n'as pas besoin d'un Exit avant un End. De plus, on n'emboîte pas 2 procédures, comme il a été dit. Soit tu écris le code de la 2ème dans la 1ère, soit tu appelles la 2ème.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    tu as le choix de transformer Sub2 en fonction qui renvoie un booléen ou de passer ARG par référence et non par valeur.

    Exemple1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Sub Sub1()
     .....
     ARG= False
     If Sub2(Arg)=True Then
      ...
     Else
      ....
     End if
    End sub
     
    Function Sub2(Arg As Boolean) As Boolean
     Sub2=False
     If ... Then Sub2=True
    End Function
    ou
    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
    17
    18
    Sub Sub1()
     ...
     ARG=False
     Call Sub2(ARG)
     If ARG=True Then
      ....
     Else
      ....
     End If
    End sub
     
    Sub Sub2(ByRef Arg As Boolean)
     If ... then
       Arg=True
     Else
       Arg=False
     End if
    End sub

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci pour vos réponses et désolé pour le manque d'effort dans ma présentation du code (Je l'ai pourtant codé avec un Call comme l'a fait ilank..)

    Je m'en suis tiré en définissant ma variable ARG en amont des deux Sub,
    elle devient globale sans être réinitialisée à la sortie des Sub

    ARG garde donc la valeur TRUE en sortant de la Sub2

    +

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 09/05/2013, 17h27
  2. appel de fonctions pour faire calculs dans une procédure sub
    Par panda78 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 09/08/2012, 18h14
  3. Pb argument dans une procédure (simple)
    Par vversaveau dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/07/2010, 12h11
  4. Réponses: 5
    Dernier message: 19/05/2009, 13h21
  5. passage d'un tableau en argument dans une procédure
    Par cati_78 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 23/11/2008, 18h11

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