Fabriquer un nom de sub et la lancer

bonsoir à tous,

dans une de mes macro "je crée" un nom de sub avec un prefixe fixe ( ici Sam ) et un suffixe provenant d'une textbox ici TxtAgW =1

choice = "Sam" & TxtAgW

Donc choice = Sam1

et Sam1 est une macro que j'aimerai lancer mais j'ai pas trouvé l'astuce,

Si vous avez des idées,

Bonsoir

je ne sais pas si cela est possible d'appeler une sub par le nom contenu dans une variable mais peut-etre une solution simple

if choice = "sam1" then sam1

ou si plusieurs sub avec un select case

Select Case choice
Case "sam1": sam1
case "sam2":sam2
'.....
End Select

fred

ok c'est peut être une solution, du coup il va falloir que je définisse tous les cas, ( environs une quinzaine) en fait j'esperai ne pas avoir à passer par cette solution

si quelqun à une autre idée je suis preneur

Bon bah j'ai trouvé en faisant une recherche google... 10 secondes.....

pour faire simple utiliser application.run

Application.Run (choice)

Fred

Rebonsoir fred 2406

bon on dirait que tes recherches sur google on été plus pertinente que les miennes.,

Mais je n'arrive toujours pas à lancer cette macro

Du coup j'ai tester avec Application.run, run, Call, CallbyName rien à faire je ne lance toujours pas la macro soit il me manque des arguments, soit la macro n'est pas dans mon classeur ( d'apres l'editeur vb)

Je vous laisse un exemple de mon fichier, la sub se trouve sur l'userform generateur qui se lance à l'ouverture selectionner "Calendrier" on coche Samedi ou dimanche et on entre 1,2 ou 3 dans la textbox qui s'affiche.

La macro ChoiFWE ( sur le userform ) doit lancer la sub Sam1,2 ou 3 ou dim1,2 ou 3 si vous avez coché Dimanche se trouvant sur le module WE

Merci pour vos idées

7p-rh-6-74.xlsm (260.09 Ko)

Bonsoir,

La réponse de Fred est la bonne ! C'est à toi de savoir ce que tu fais !

Il n'y a aucune chance de trouver une procédure "choice"...

Et le nom du classeur est de trop !

Si quelque chose de plus que le nom de proc. devait s'avérer nécessaire, ce serait le nom du module... (a-priori pas ici)

NB- Si tu te décidais à indenter ton code, à ne pas multiplier les modules, etc. on pourrait travailler rationnellement sur ton code...

Cordialement.

MFerrand a écrit :

Bonsoir,

La réponse de Fred est la bonne ! C'est à toi de savoir ce que tu fais !

c'est bien le problème je tâtonne et même en parcourant les aides sur le net rien y fait doit y avoir un truc que je pige pas

Il n'y a aucune chance de trouver une procédure "choice"...

j'aimerai pourtant

Et le nom du classeur est de trop !

un essaie désespéré qui n'a pas abouti :'

NB- Si tu te décidais à indenter ton code, à ne pas multiplier les modules, etc. on pourrait travailler rationnellement sur ton code...

j' y travaille mais n'ayant fait de programmation avant j'ai pas encore les réflexes

Bref c'est pas ce soir que je vais comprendre pourtant d’après vos explications ça devrait fonctionner direct,

Même en suivant les explications de Fred j'abouti à rien

Tu es lent à capter là !

Si tu mets "choice" (entre guillemets), tu appelles une procédure dont nom est 'choice' !

Si choice est une variable contenant le nom de la proc. à appeler, ta variable tient lieu de ce nom, et pour qu'elle le renvoie, les guillemets sont de trop !

Cordialement.

Bonjour

donc comme l'a dit Mferrand

remplacer dans ton code

Application.Run "P_RH6.74.xlsm!choice"

par

Application.Run (choice)

donc en fait ce que je t'ai donné hier dans une précédente réponse

Fred

bonjour Fred,

Bon voilà la modification que j'ai faite selon vos conseils (j'ai testé des 10000 autrse choses, d’après ce que j'ai vu sur le net ....) mais j'ai toujours un retour d'erreur comme quoi la macro 'Sam3' ( Samedi coché et 3 dans la textbox " n'existe pas ou que les macro sont désactivés....

Function ChoiFWE()

If None.Value = False Then
    If Samedi.Value = False Then
        If FSD.Value = False Then
        MsgBox "Veuillez saisir une des options Week-end.", 16
            ChoiFWE = True
            Exit Function
        ElseIf FSD.Value = True Then
            If TxtAgW = "" Then
            MsgBox "Veuillez saisir le nombre d'agent travaillant le week end.", 16
            ChoiFWE = True
            Exit Function
            Else
            choice = "Dim" & TxtAgW.Value
            End If
        End If
    ElseIf Samedi.Value = True Then
        If TxtAgW = "" Then
        MsgBox "Veuillez saisir le nombre d'agent travaillant le week end.", 16
        ChoiFWE = True
            Exit Function
        Else
        choice = "Sam" & TxtAgW.Value

        End If
     End If
ElseIf None.Value = True Then

End If
Application.Run (choice) '<------------------------- choice à bien la valeur du  nom de la macro mais j'ai le message d'erreur
End Function

Merci pour les réponses et bonne fête en attendant de trouver une solution

Bonjour,

Essaie :

Application.Run "WE." & choice

(n'oublie pas le point...)

Cordialement.

Re

je pense que le problème est plus profond

visiblement sam1 est probablement les autres sont des mots réservés par Microsoft pour faire quoi ... ??!!

Car dans le code test ci dessous les deux premiers fonctionnent sans soucis et quand cela fait appel a sam1 cela plante....

donc les noms de fonctions a revoir...

fred

Sub test()
Dim arg As String
arg = "tri"
Application.Run (arg)
arg = "samedi1"
Application.Run (arg)
arg = "sam1"
Application.Run (arg)
End Sub

Sub tri()
MsgBox "je suis dans la sub tri"
End Sub

Sub samedi1()
MsgBox "je suis dans la sub samedi1"
End Sub
Sub sam1()
MsgBox "je suis dans la sub sam1"
End Sub

Merci Mferrand, Merci Fred,

Je croyais que mon cas était complètement désespérer et la réponse de fred me donne un peu de baume au coeur.

Je viens de tester en modifiant mon nom de sub c'est impéccable.

incroyable que j'ai fais mes tests sur un nom " non utilisable" sur excel. ( qui pourrait quand même nous le dire dans le message d'erreur)

Encore merci.

Joyeuses Fetes et à bientôt

(je devrais reprendre mon ancien surnom : The Bugman)

j'ai juste trouce sur Excel Exchange une Ref a SAM mais je ne suis pas certain que se soit lié

Bonjour,

Pour résumer... Il vaut mieux que votre nom de Sub ne ressemble pas à une adresse de cellule

Sub xfe1(): MsgBox "xfe1": End Sub
Sub sam2(): MsgBox "sam2": End Sub
Sub xfd3(): MsgBox "xfd3": End Sub
Sub XFD(): MsgBox "XFD": End Sub

Sub test()
Dim arg$

arg = "xfe" & 1
   Application.Run arg 'Ok (Je ne suis pas une cellule)
arg = "XFD"
   Application.Run arg 'Ok (Je ne suis pas une cellule)

On Error Resume Next
arg = "xfd" & 3
   Application.Run arg 'Pas Ok (Je suis une cellule)
arg = "sam" & 2
   Application.Run arg 'Pas Ok (Je suis une cellule)
End Sub

Joyeux Noël !

Bonjour à tous,

Pour résumer... Il vaut mieux que votre nom de Sub ne ressemble pas à une adresse de cellule

comme dit Galopin !

C'est effectivement, ce qui entraînait un comportement un peu aberrant lors des essais que j'ai fait : le fait que Sam1 apparaissait en têtre dans la boîte de dialogue macro, même si j'en lançais une autre, faisait que l'affichage de la feuille active se modifiait pour me mettre à l'écran la cellule SAM1 !!

Cela aurait bloqué comme nom dans le gestionnaire de noms, cependant la macro se lançait tout de même par Application.Run, mais nom dûment précédé du nom du module...

Joyeux Noël !

Bonjour à tous,

quand je vois :

            If TxtAgW = "" Then
            MsgBox "Veuillez saisir le nombre d'agent travaillant le week end.", 16
            ChoiFWE = True
            Exit Function
            Else
            choice = "Dim" & TxtAgW.Value
            End If

je me dis que tes (au moins) 16 macros Dimxx ne doivent pas être fondamentalement différentes et que tu aurais tout autant intérêt à appeler une macro unique à laquelle tu passes le paramètre (x).

Sub machin()
    truc 16
End Sub

Sub truc(x As Long)
    MsgBox x
End Sub

eric

Merci pour toutes les explications et je temps consacré à comprendre le problème

Bonnes fêtes à tous et à bientôt.

Eric !

Saisi hier d'une demande d'intervention sur un sujet que j'avais regardé au passage sans me manifester, sur lequel tu avais déjà fourni un avis, j'ai cru bon d'ajouter que tes avis étaient toujours pertinents !

Je te remercie donc de confirmer ce point de vue !

Joyeux Noël

Rechercher des sujets similaires à "fabriquer nom sub lancer"