Problème lancement macro à partir d'une liste déroulante

Bonjour à tous,

Je suis débutant en VBA j'ai découvert les macros sous Excel il y a seulement 1 semaine ^^. Donc ne soyer indulgent s'il vous plait.

Alors tout d'abord je vais vous expliquez un peu le contexte. J'ai du exporter des données (ici des listes d'objets contenu dans des bibliothèques d'un AS400 d'IBM que je viens aussi de découvrir), donc j'ai du exporter ces données contenu dans 4 bibliothèques pour 5 environnements différents. Et ensuite j'ai du faire un gros travail de comparaison entre les 5 environnements afin de voir si les données étaient cohérentes. (la finalité de la chose c'est qu'on met en place un environnement de développement pour une application déjà existante qu'on internalise)

Le problème qui survient c'est que j'ai énormément de macros, et j'ai donc mis en place une liste déroulante contenant le nom des macros, avec un bouton faisant appel à une nouvelle macro qui récupère la valeur active de la liste déroulante et lance cette macro. La est le problème, le nom de la macro est bloqué dans la variable et je ne peux pas faire de call. J'ai donc cherché sur le net et je suis tombé sur le CallByName, tout content j'ai essayé cette méthode et bim impossible de trouver quels paramètres lui mettre entrée. J'ai pensé que je devais indiquer le classeur (Workbooks) pour l'objet, car pour moi une macro s'applique bien sur celui-ci mais le CallByName n'est pas géré par celui-ci.

Voilà mon problème, pour information j'ai réussi à le faire de manière qu'on pourrait dire de "bourrin" avec un long if ...elseif mais c'est immonde. Je voudrais donc savoir si CallByName s'applique dans mon cas, si oui comment faire en sorte que cela fonctionne.

Ma macro de lancement lorsque je n'y arrivais pas:

Sub Liste_deroulante()

'

' Liste deroulante Macro

'

Dim Feuil As String

Dim ValListe As String

ValListe = Worksheets(Feuil).Cells(1, 4).Value

Resultat = CallByName(Workbooks(1), ValListe, VbMethod)

End Sub

PS: si je mets du temps à répondre c'est normal, je n'ai accès à mon Excel qu'à mon boulot, et c'est pas super bien vu d'être sur un forum pendant les heures de travail ^^ donc ne vous fâchez pas. Si j'ai oublié quoi que ce soit excusez moi d'avance et dites le moi. MERCI !

up (svp)

Bonjour, bonjour !

Voir dans l'aide VBA si l'instruction existe …


Copier / Coller n'est pas coder !

Elle existe...

Ah ? Bien dans ce cas en la suivant tu dois t"en sortir …

J'ai consulté l'aide avant de venir poster sur le forum, donc justement non je n'y arrives pas ...

Comme de mon côté dans différentes versions d'Excel elle n'existe pas dans l'aide VBA

et ce même dans la documentation électronique de la version 2013 !

Pourtant l'aide VBA est assez claire et souvent documentée d'exemples, il suffit juste de la lire et d'appliquer …

Mais patiente au cas où un autre intervenant en dispose.

Sinon tu peux contourner par une simple instruction If ou Select Case et là c'est sûr, c'est bien dans l'aide VBA !

J'ai utilisé un if pour faire ce que je voulais. C'est simplement pour moi que je demande parce que je ne comprends pas ou est le problème.

Voici ce que me donne l'aide comme exemple :

"

CallByName, fonction, exemple

Cet exemple utilise la fonction CallByName pour appeler la méthode Move d'un bouton Command.

L'exemple utilise aussi une feuille (Form1) comportant un bouton (Command1) et une étiquette (Label1). Lorsque la feuille est chargée, la propriété Caption de l'étiquette a pour valeur "Move", nom de la méthode à appeler. Lorsque vous cliquez sur le bouton, la fonction CallByName appelle la méthode pour modifier l'emplacement du bouton.

Option Explicit

Private Sub Form_Load()

Label1.Caption = "Move" ' Nom de la méthode Move.

End Sub

Private Sub Command1_Click()

If Command1.Left <> 0 Then

CallByName Command1, Label1.Caption, vbMethod, 0, 0

Else

CallByName Command1, Label1.Caption, vbMethod, 500, 500

End If

"

Effectivement elle existe : Office 2013 CallByName Function

Je ne comprends pas pourquoi je ne l'ai pas trouvée dans l'aide de la version 2007.

Là je ne peux tester car je n'ai qu'une version 2003 sous le coude et, conformément aux règles de ce forum,

joindre un classeur afin qu'un éventuel intervenant disposant d'une version supérieure puisse apporter son aide …

C'est pas grave je peux patienter c'est simplement pour ma culture personnelle, si cette méthode fonctionne dans mon cas elle me permet d'éclaircir mon code et c'est bien plus plaisant pour les autres qui auront à le lire par la suite. (et je sais qu'il va être réutilisé pour le coup)

(j'avais bien cherché avant de venir poster sur le forum, je sais qu'on voit souvent des gens qui ne s'informe pas et poste sans réfléchir mais dans mon cas non ^^)

Merci quand même de t'être intéressé à mon soucis et désolé pour les fautes d'orthographe.

Encore désolé d'être passé à côté …

Si un classeur est joint, je pourrais regarder dès qu'un ordinateur portable avec la version 2007 sera de retour d'ici 48 heures …

Si j'ai le temps je ferais un classeur exemple, mais la vous donner mon fichier Excel ne servirait pas à grand chose étant donné que j'effectues des connexions avec plusieurs AS400 pour récupérer des données. Et puis mon fichier est assez conséquent c'est pas agréable à lire pour quelqu'un d'extérieur. Merci encore ^^

Comme j'aurais accès en fait à la version 2007 vendredi au mieux et ne pouvant accéder souvent qu'aux fichiers sans macro .xlsx …

Sinon d'autres intervenants pourront aussi répondre.

Rechercher des sujets similaires à "probleme lancement macro partir liste deroulante"