Nom de macro en variable ou en boucle VBA Excel 2017

Résolu
DragonBallZ1981 -  
 DragonBallZ1981 -

Bonjour,

Aillant de problème résolu grâce à votre aide je reviens vers vous.

Je sais pas trop comment expliquer ça mais est-il possible de mettre le nom d'une macro en variable afin de mettre une seule fois la condition ou bien de la décomposé pour l'utilisé dans une boucle

Exemple:

J'ai différente macro 

Sub Menuiserie_1

Sub Menuiserie_2

Sub Menuiserie_3

etc...

1ère solution, est-il possible de faire

Dim Menuiserie As Sub

If xxxxx Then

Menuiserie = Menuiserie_1

ElseIf xxxxx Then

Menuiserie=Menuiserie_2

ElseIf xxxxx Then

Menuiserie=Menuiserie_3

End if

Call Menuiserie

Ou bien 2ème solution si c'est possible en boucle

For m = 1 To Nbr_Menuiserie

Call Menuiserie_m

next m

Merci de votre aide


Windows / Chrome 104.0.0.0

3 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     

    Bonjour,

    Un exemple avec toutes les macros dans un même module :

    Option Explicit
    
    Sub Menuiserie_1()
    MsgBox "M1"
    End Sub
    
    Sub Menuiserie_2()
    MsgBox "M2"
    End Sub
    
    Sub Menuiserie_3()
    MsgBox "M3"
    End Sub
    
    Sub EnvoiAvecIf()
    Dim res As String
    res = InputBox("saisir un chiffre entre 1 et 3", "Quelle macro lancer?")
    If Val(res) < 1 Or Val(res) > 3 Then
        MsgBox "Imbécile!"
    Else
        Application.Run "Menuiserie_" & res
    End If
    End Sub
    
    Sub EnvoiEnBoucle()
    Dim i As Integer
    For i = 1 To 3
        Application.Run "Menuiserie_" & i
    Next
    End Sub

    Pour le cas ou les macros à appeler seraient dans un autre module (exemple Module12) :

    Option Explicit
    
    Sub EnvoiAvecIf()
    Dim res As String
    res = InputBox("saisir un chiffre entre 1 et 3", "Quelle macro lancer?")
    If Val(res) < 1 Or Val(res) > 3 Then
        MsgBox "Imbécile!"
    Else
        Application.Run "Module12.Menuiserie_" & res
    End If
    End Sub
    
    Sub EnvoiEnBoucle()
    Dim i As Integer
    For i = 1 To 3
        Application.Run "Module12.Menuiserie_" & i
    Next
    End Sub

    0
  2. DragonBallZ1981
     

    Bonjour Pijaku,

    Merci beaucoup, j'avais essayer le "Application.run" mais j'avais pas réussis, peut-être à cause des modules.

    Je vais bien étudier ta solution et l'adapter a mon besoin,

    Encore merci beaucoup pour l'aide apporter sur ce site.

    Je reviendrais clôturer le sujet lorsque j'aurai réussis.

    Merci.

    0
  3. DragonBallZ1981
     

    Bonjour a tous,

    C'est parfait, j'ai réussi a l'adapter dans mon code.

    Merci beaucoup de votre aide.

    Cordialement

    0