[VBA excel] regroupement de macros

Résolu
pol_38 -  
 giheller -
Hello

Je suis débutant en VBA pour excel et j'aimerais savoir comment affecter plusieurs "sous macro", inscrite dans le même module, à une seule macro.

Pour l'instant, la seule solution que j'ai trouvé consiste à "concatener" les différentes macros pour en former une seule, mais je trouve que cette solution n'est pas très élégante...

Merci de vos avis!
Configuration: Windows XP
Internet Explorer 6.0

11 réponses

  1. ruzakruzak Messages postés 466 Date d'inscription   Statut Membre 247
     
    Tu mets tes macros dans des modules et, quand tu en as, besoin tu les appelles avec la fonction Call.

    par exemple tu as un sub qui s'appelle rato, eh bien tu utilises la ligne suivante pour l'utiliser avec un argument positif :

    Sub jeteste()
    ' mon début de code
    Call rato
    'ma suite de code
    End sub

    ---
    J'ai des preuves !
    4
  2. Kvo Messages postés 27 Statut Membre 3
     
    Bonjour,
    Comme l'a dit ruzakruzak, il faut utiliser la fonction call.
    Supposons que tu ais les procédures suivantes dans le même module.

    sub abc
    end sub
    ------------
    sub def
    end sub
    ------------
    sub ghi
    end sub
    ------------

    Si tu veux exécuter à l'affilée les 3 procédures tu dois en créer une quatrième qui appelle les trois autres avec la fonction call. Exemple:

    sub jkl
    call abc
    call def
    call ghi
    end sub

    Lorsque tu seras sous Excel tu exécuteras la procedure jkl bien entendu :)

    Petite précision: crée ta procédure appellante dans le même module que les autres pour le moment, puis renseigne toi sur les différentes portées des procédures.
    Bon courage.
    1
  3. pol_38
     
    ok merci du tuyau, mais ce n'est pas excatement ce que je cherchais à savoir. J'essaie d'être plus précis:

    Disons que j'ai un module, comprenant plusieurs macros, séparés par une ligne; du genre:

    sub(machin)
    x
    x
    x
    End sub
    -----------------------------
    Sub(truc)
    x
    x
    End Sub
    -------------------------

    Et je voudrais lancer toutes les macro de ce module en une seule fois, sans rien changer dans le module.
    Est-possible?

    a+
    0
  4. fl0 Messages postés 365 Statut Membre 209
     
    salut les gars
    excusez pour le derangement
    quelqu'un peut il me dire comment on créer une nouvelle discussion
    g unprobleme sous Access et g vraiment besoin du forum
    Merci de me repondre meme si je ne vous aide pas
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pol_38 Messages postés 5 Date d'inscription   Statut Membre
     
    ok thanks a lot!
    0
    1. bicki
       
      Bonjour à tous,

      j'ai un petit soucis dans mes macros avec une fonction call:

      Ma fonction de base commence par un

      Sub (1)
      for i = 41 to 712
      ....

      .....

      call sub 2Bonjour à tous,

      j'ai un petit soucis dans mes macros avec une fonction call:

      Ma fonction de base commence par un

      for i = 41 to 712
      ....

      .....

      call sub 2

      Mon soucis c'est que j'aimerais qu'en faisant appel à ma fonction (sub2) l'indice soit pris en compte dans cette fonction, or par défaut ce n'est pas le cas.

      Pourriez vous me dire comment faire passer un indice d'une fonction à une autre sans le réécrire dans la sub 2?

      je pense à un truc du genre

      call sub2 (with i=indice) ou quelque chose comme ca, mais je ne trouve pas d'indication correcte

      Merci à vous et j'espere avoir été assez clair
      0
  7. giheller
     
    bonjour,

    call sub2(i)

    sub2(k)
    'là on utilise k
    end sub
    0
    1. bicki
       
      OK, merci

      Pour ton indice i je comprends,

      Mais pour le k je ne sais pas quoi mettre car je ne connais pas à l'avance la valeur que ca va prendre. Comment puis-je la définir?

      dans ma sub(2) il faut que je fasse appel à cet indice ou pas?

      c'est ce que je pensais avoir compris dans ton exemple mais alors pourquoi prendre un k et aps un i?
      0
      1. bicki > bicki
         
        En fait j'ai mis mon indice entre () dans ma sub principale et lorsque je fais tourner le programme il me met un message d'erreur:

        Nombre d'arguments incorrect ou affectation de propriété incorrecte.

        Je sens que c'est un détail... mais pas encore résolu

        PS: désolé du double
        0
      2. giheller > bicki
         
        Bonsoir,

        pour k tu ne mets rien il prend la valeur de i passé par l'appel du sousu programme.
        0
  8. Polux31 Messages postés 7219 Statut Membre 1 204
     
    bonjour,

    Passe ton argument en utilisant une variable globale que tu déclares dans ton module de macros.

    Option Explicit
    
    Dim k As Variant
    
    Sub (1)
    for i = 41 to 712
    K = i
    .... 
    
    ..... 
    
    call sub 2
    
    Sub2 (k)
    ....
    


    ;o)

    Polux
    0
  9. Utilisateur anonyme
     
    Bonjour,

    Autre exemple :

    Supossons 3 routines dans le module 1 :

    Option Explicit
    
    Sub AfficheResultat(ByVal MonResultat As Long)
        MsgBox MonResultat
    End Sub
    '
    
    Sub CalculResultat(ByVal Indice1 As Long, ByRef Indice2 As Long)
        Indice2 = (Indice1 * 2)
    End Sub
    '
    
    Sub EntreeValeur(ByRef donnees As Long)
    
        Dim Valeur As Variant
        
        Valeur = InputBox("Enterz un nombre : ", "DONNÉES", "100")
        
        donnees = Transforme(Valeur)
        
    End Sub
    '
    
    Function Transforme(ByVal Entree As Variant) As Long
        Transforme = CLng(Val(Entree))
    End Function
    '
    


    Maintenant on souhaite faire l'appel des ces routines à partir d'un tierce module.

    Soit le module 2 :

    Option Explicit
    
    Sub Principal()
    
        Dim Reponse As Long, Multiplicateur As Long
    
        Multiplicateur = 5
    
        Module1.EntreeValeur Reponse
        Module1.CalculResultat Multiplicateur, Reponse
        Module1.AfficheResultat Reponse
        
    End Sub
    '
    
    Sub Principal2()
    
        Dim Reponse As Long, Multiplicateur As Long
    
        Multiplicateur = 5
    
        Call Module1.EntreeValeur(Reponse)
        Call Module1.CalculResultat(Multiplicateur, Reponse)
        Call Module1.AfficheResultat(Reponse)
        
    End Sub
    '
    


    Remarquer la syntaxe lorsque l'on utilise l'instrction CALL.

    Remarquer aussi la différence entre ByVal et ByRef.

    Byval passe la valeur de la variable
    ByRef passe l'adresse de la variable ( donc modifiable ).

    Cordialement.
    Bonne continuité.

    Lupin
    0
  10. bicki
     
    Merci pour les infos, ca semble fonctionner en faisant juste apple à mon i ou k entre ().

    Merci à vous
    0
  11. cocodi
     
    bonjour tout le monde
    j'ai à peu prés le meme probleme avec la fonction call.

    dans mes macro quand j'ai par exemple
    "call active_feuille_param"
    ou
    call cibler("sommer")
    cela ne marche pas, j'ai toujours une erreur au niveau du débogage et je comprends pas grand chose;
    meci de me dire ce qu'il faut faire
    0
  12. giheller
     
    Bonjour,
    et si tu expliquais ce que tu veux faire.

    un call appelle une macro.
    call active_feuille_param c'est quoi ? une macro ou le nom d'une feuiile ?

    call cibler("sommer")
    cibler c'est une macro ? "sommer" du texte passé à la macro ?
    0