Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Appeler macro par variable

18 réponses
Avatar
garnote
Bonjour le monde,

La cellule E12 contient la liste :
Autriche
Belgique
France
J'ai aussi trois macros nommées :
AAutriche
ABelgique
AFrance
Je tente alors d'appeler une de ces macros
de la façon suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
Call nom
End If
End Sub
mais ça ne fonctionne pas :-(
Comment contourner cet affreux dilemme ?

Serge

10 réponses

1 2
Avatar
Vincent.
Salut !
Apparemment, tout marche bien dès que tu enlèves le Call.
Pourquoi... aucune idée ! (enfin, presque aucune ;-o )
A+

V.

-----Message d'origine-----
Bonjour le monde,

La cellule E12 contient la liste :
Autriche
Belgique
France
J'ai aussi trois macros nommées :
AAutriche
ABelgique
AFrance
Je tente alors d'appeler une de ces macros
de la façon suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
Call nom
End If
End Sub
mais ça ne fonctionne pas :-(
Comment contourner cet affreux dilemme ?

Serge


.



Avatar
garnote
J'ai enlevé le Call et ça ne fonctionne pas plus :-(
Je peux y arriver avec une zone de liste, mais
c'est plus laborieux. Et j'ai un autre problème.
Avec seulement quatre cartes de pays, je pèse
déjà 480 Ko, alors je n'ose pas imaginer mon poids
quand tous les pays du monde auront leur carte !!!

Private Sub ListBox1_Change()
ind = ListBox1.ListIndex + 1
Select Case ind
Case 1
Call AAutriche
Case 2
Call ABelgique
Case 3
Call AEspagne
Case 4
Call AFrance
End Select
End Sub

Serge

"Vincent." a écrit dans le message de
news: dfcc01c3efdc$de556d90$
Salut !
Apparemment, tout marche bien dès que tu enlèves le Call.
Pourquoi... aucune idée ! (enfin, presque aucune ;-o )
A+

V.

-----Message d'origine-----
Bonjour le monde,

La cellule E12 contient la liste :
Autriche
Belgique
France
J'ai aussi trois macros nommées :
AAutriche
ABelgique
AFrance
Je tente alors d'appeler une de ces macros
de la façon suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
Call nom
End If
End Sub
mais ça ne fonctionne pas :-(
Comment contourner cet affreux dilemme ?

Serge


.



Avatar
Vincent.
Effectivement, c'était n'importe quoi ce je disais
précédemment, je me repenche sur le pb de ce pas !
A+

-----Message d'origine-----
J'ai enlevé le Call et ça ne fonctionne pas plus :-(
Je peux y arriver avec une zone de liste, mais
c'est plus laborieux. Et j'ai un autre problème.
Avec seulement quatre cartes de pays, je pèse
déjà 480 Ko, alors je n'ose pas imaginer mon poids
quand tous les pays du monde auront leur carte !!!

Private Sub ListBox1_Change()
ind = ListBox1.ListIndex + 1
Select Case ind
Case 1
Call AAutriche
Case 2
Call ABelgique
Case 3
Call AEspagne
Case 4
Call AFrance
End Select
End Sub

Serge

"Vincent." a écrit
dans le message de

news: dfcc01c3efdc$de556d90$
Salut !
Apparemment, tout marche bien dès que tu enlèves le Call.
Pourquoi... aucune idée ! (enfin, presque aucune ;-o )
A+

V.

-----Message d'origine-----
Bonjour le monde,

La cellule E12 contient la liste :
Autriche
Belgique
France
J'ai aussi trois macros nommées :
AAutriche
ABelgique
AFrance
Je tente alors d'appeler une de ces macros
de la façon suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
Call nom
End If
End Sub
mais ça ne fonctionne pas :-(
Comment contourner cet affreux dilemme ?

Serge


.




.




Avatar
michdenis
Bonjour Garnote,

La suggestion faite par Vincent fonctionne très bien.

attention :

A ) Attention au Mot "private" dans la déclaration de la procédure. Ce mot limite l'appel de cette procédure par une autre
procédure située dans le même module


B ) où tes macros ont-elles été enregistré ?
Si tu es dans un module standard et que tu veuilles appeler une macro écrite dans le module de la feuille1, tu dois
écrire le nom de la feuille devant le nom de la macro.

Feuil1.NomDeLaMacro


Salutations!




"garnote" a écrit dans le message de news:QE5Wb.30508$
J'ai enlevé le Call et ça ne fonctionne pas plus :-(
Je peux y arriver avec une zone de liste, mais
c'est plus laborieux. Et j'ai un autre problème.
Avec seulement quatre cartes de pays, je pèse
déjà 480 Ko, alors je n'ose pas imaginer mon poids
quand tous les pays du monde auront leur carte !!!

Private Sub ListBox1_Change()
ind = ListBox1.ListIndex + 1
Select Case ind
Case 1
Call AAutriche
Case 2
Call ABelgique
Case 3
Call AEspagne
Case 4
Call AFrance
End Select
End Sub

Serge

"Vincent." a écrit dans le message de
news: dfcc01c3efdc$de556d90$
Salut !
Apparemment, tout marche bien dès que tu enlèves le Call.
Pourquoi... aucune idée ! (enfin, presque aucune ;-o )
A+

V.

-----Message d'origine-----
Bonjour le monde,

La cellule E12 contient la liste :
Autriche
Belgique
France
J'ai aussi trois macros nommées :
AAutriche
ABelgique
AFrance
Je tente alors d'appeler une de ces macros
de la façon suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
Call nom
End If
End Sub
mais ça ne fonctionne pas :-(
Comment contourner cet affreux dilemme ?

Serge


.



Avatar
garnote
Voici le contexte :

Dans un module de feuille :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
'Call nom ne fonctionne pas
'Call AAutriche ou Call ABelgique ... fonctionne
End If
End Sub

Dans un module Standard :

Sub AAutriche()
ActiveSheet.Shapes("Autriche").ZOrder msoBringToFront
End Sub
Sub ABelgique()
ActiveSheet.Shapes("Belgique").ZOrder msoBringToFront
End Sub
Sub AEspagne()
ActiveSheet.Shapes("Espagne").ZOrder msoBringToFront
End Sub
Sub AFrance()
ActiveSheet.Shapes("France").ZOrder msoBringToFront
End Sub





"michdenis" a écrit dans le message de news:
eFtL7I#
Bonjour Garnote,

La suggestion faite par Vincent fonctionne très bien.

attention :

A ) Attention au Mot "private" dans la déclaration de la procédure. Ce mot
limite l'appel de cette procédure par une autre

procédure située dans le même module


B ) où tes macros ont-elles été enregistré ?
Si tu es dans un module standard et que tu veuilles appeler une macro
écrite dans le module de la feuille1, tu dois

écrire le nom de la feuille devant le nom de la macro.

Feuil1.NomDeLaMacro


Salutations!




"garnote" a écrit dans le message de
news:QE5Wb.30508$

J'ai enlevé le Call et ça ne fonctionne pas plus :-(
Je peux y arriver avec une zone de liste, mais
c'est plus laborieux. Et j'ai un autre problème.
Avec seulement quatre cartes de pays, je pèse
déjà 480 Ko, alors je n'ose pas imaginer mon poids
quand tous les pays du monde auront leur carte !!!

Private Sub ListBox1_Change()
ind = ListBox1.ListIndex + 1
Select Case ind
Case 1
Call AAutriche
Case 2
Call ABelgique
Case 3
Call AEspagne
Case 4
Call AFrance
End Select
End Sub

Serge

"Vincent." a écrit dans le message de
news: dfcc01c3efdc$de556d90$
Salut !
Apparemment, tout marche bien dès que tu enlèves le Call.
Pourquoi... aucune idée ! (enfin, presque aucune ;-o )
A+

V.

-----Message d'origine-----
Bonjour le monde,

La cellule E12 contient la liste :
Autriche
Belgique
France
J'ai aussi trois macros nommées :
AAutriche
ABelgique
AFrance
Je tente alors d'appeler une de ces macros
de la façon suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
Call nom
End If
End Sub
mais ça ne fonctionne pas :-(
Comment contourner cet affreux dilemme ?

Serge


.








Avatar
michdenis
Allo Serge,

Es-tu toujours là ? arrête de chercher !!! c'est une grosse coquille.

Il y en a qui teste le poisson d'avril avant le temps... comme tu disais hier !!!

;-)))


Salutations!


"michdenis" a écrit dans le message de news:eFtL7I%
Bonjour Garnote,

La suggestion faite par Vincent fonctionne très bien.

attention :

A ) Attention au Mot "private" dans la déclaration de la procédure. Ce mot limite l'appel de cette procédure par une autre
procédure située dans le même module


B ) où tes macros ont-elles été enregistré ?
Si tu es dans un module standard et que tu veuilles appeler une macro écrite dans le module de la feuille1, tu dois
écrire le nom de la feuille devant le nom de la macro.

Feuil1.NomDeLaMacro


Salutations!




"garnote" a écrit dans le message de news:QE5Wb.30508$
J'ai enlevé le Call et ça ne fonctionne pas plus :-(
Je peux y arriver avec une zone de liste, mais
c'est plus laborieux. Et j'ai un autre problème.
Avec seulement quatre cartes de pays, je pèse
déjà 480 Ko, alors je n'ose pas imaginer mon poids
quand tous les pays du monde auront leur carte !!!

Private Sub ListBox1_Change()
ind = ListBox1.ListIndex + 1
Select Case ind
Case 1
Call AAutriche
Case 2
Call ABelgique
Case 3
Call AEspagne
Case 4
Call AFrance
End Select
End Sub

Serge

"Vincent." a écrit dans le message de
news: dfcc01c3efdc$de556d90$
Salut !
Apparemment, tout marche bien dès que tu enlèves le Call.
Pourquoi... aucune idée ! (enfin, presque aucune ;-o )
A+

V.

-----Message d'origine-----
Bonjour le monde,

La cellule E12 contient la liste :
Autriche
Belgique
France
J'ai aussi trois macros nommées :
AAutriche
ABelgique
AFrance
Je tente alors d'appeler une de ces macros
de la façon suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
Call nom
End If
End Sub
mais ça ne fonctionne pas :-(
Comment contourner cet affreux dilemme ?

Serge


.



Avatar
Chris
Bonjour,

je pense qu'il vaut mieux passer par:

application.run(nom)

Pour ce qui est de la taille, je ne peux rien pour toi a
priori. Deux pistes: minimiser au préalable la taille des
images que tu utilises (passer les BMP en jpg, les
redimmensionner...), utiliser des liens pointant vers les
images plutôt que les images elles-même (j'avoue que
perso, je ne sais pas faire, mais je suis presque sûr que
c'est possible).

Voila!

chris.

-----Message d'origine-----
Bonjour le monde,

La cellule E12 contient la liste :
Autriche
Belgique
France
J'ai aussi trois macros nommées :
AAutriche
ABelgique
AFrance
Je tente alors d'appeler une de ces macros
de la façon suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
Call nom
End If
End Sub
mais ça ne fonctionne pas :-(
Comment contourner cet affreux dilemme ?

Serge


.



Avatar
michdenis
Bonjour Garnote,

Je crois que tu peux résoudre ton problème en utilisant :

Application.Run nom


Salutations!



"garnote" a écrit dans le message de news:w76Wb.30535$
Voici le contexte :

Dans un module de feuille :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
'Call nom ne fonctionne pas
'Call AAutriche ou Call ABelgique ... fonctionne
End If
End Sub

Dans un module Standard :

Sub AAutriche()
ActiveSheet.Shapes("Autriche").ZOrder msoBringToFront
End Sub
Sub ABelgique()
ActiveSheet.Shapes("Belgique").ZOrder msoBringToFront
End Sub
Sub AEspagne()
ActiveSheet.Shapes("Espagne").ZOrder msoBringToFront
End Sub
Sub AFrance()
ActiveSheet.Shapes("France").ZOrder msoBringToFront
End Sub





"michdenis" a écrit dans le message de news:
eFtL7I#
Bonjour Garnote,

La suggestion faite par Vincent fonctionne très bien.

attention :

A ) Attention au Mot "private" dans la déclaration de la procédure. Ce mot
limite l'appel de cette procédure par une autre

procédure située dans le même module


B ) où tes macros ont-elles été enregistré ?
Si tu es dans un module standard et que tu veuilles appeler une macro
écrite dans le module de la feuille1, tu dois

écrire le nom de la feuille devant le nom de la macro.

Feuil1.NomDeLaMacro


Salutations!




"garnote" a écrit dans le message de
news:QE5Wb.30508$

J'ai enlevé le Call et ça ne fonctionne pas plus :-(
Je peux y arriver avec une zone de liste, mais
c'est plus laborieux. Et j'ai un autre problème.
Avec seulement quatre cartes de pays, je pèse
déjà 480 Ko, alors je n'ose pas imaginer mon poids
quand tous les pays du monde auront leur carte !!!

Private Sub ListBox1_Change()
ind = ListBox1.ListIndex + 1
Select Case ind
Case 1
Call AAutriche
Case 2
Call ABelgique
Case 3
Call AEspagne
Case 4
Call AFrance
End Select
End Sub

Serge

"Vincent." a écrit dans le message de
news: dfcc01c3efdc$de556d90$
Salut !
Apparemment, tout marche bien dès que tu enlèves le Call.
Pourquoi... aucune idée ! (enfin, presque aucune ;-o )
A+

V.

-----Message d'origine-----
Bonjour le monde,

La cellule E12 contient la liste :
Autriche
Belgique
France
J'ai aussi trois macros nommées :
AAutriche
ABelgique
AFrance
Je tente alors d'appeler une de ces macros
de la façon suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
Call nom
End If
End Sub
mais ça ne fonctionne pas :-(
Comment contourner cet affreux dilemme ?

Serge


.








Avatar
Daniel.M
Salut Sergio,

Il te faut trouver une méthode qui prend une string et comprend qu'on appelle la
procédure correspondante. Cette méthode existe (Application.Run).

Private Sub Worksheet_Change(ByVal Target As Range)
Dim nom$
If Target.Address = "$E$12" Then
nom = "A" & Target
Application.Run nom
End If
End Sub

Salutations,

Daniel M.
Avatar
Vincent.
30 minutes pour arrive rà la solution Run... déjà évoqué
depuis 20 minutes !
Mais bon, y avait bien une solution :))
A+

V.

-----Message d'origine-----
Bonjour Garnote,

Je crois que tu peux résoudre ton problème en utilisant :

Application.Run nom


Salutations!



"garnote" a écrit dans le message de
news:w76Wb.30535$

Voici le contexte :

Dans un module de feuille :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
'Call nom ne fonctionne pas
'Call AAutriche ou Call ABelgique ... fonctionne
End If
End Sub

Dans un module Standard :

Sub AAutriche()
ActiveSheet.Shapes("Autriche").ZOrder msoBringToFront
End Sub
Sub ABelgique()
ActiveSheet.Shapes("Belgique").ZOrder msoBringToFront
End Sub
Sub AEspagne()
ActiveSheet.Shapes("Espagne").ZOrder msoBringToFront
End Sub
Sub AFrance()
ActiveSheet.Shapes("France").ZOrder msoBringToFront
End Sub





"michdenis" a écrit dans le
message de news:

eFtL7I#
Bonjour Garnote,

La suggestion faite par Vincent fonctionne très bien.

attention :

A ) Attention au Mot "private" dans la déclaration de
la procédure. Ce mot


limite l'appel de cette procédure par une autre
procédure située dans le même module


B ) où tes macros ont-elles été enregistré ?
Si tu es dans un module standard et que tu veuilles
appeler une macro


écrite dans le module de la feuille1, tu dois
écrire le nom de la feuille devant le nom de la macro.

Feuil1.NomDeLaMacro


Salutations!




"garnote" a écrit dans le message de
news:QE5Wb.30508$

J'ai enlevé le Call et ça ne fonctionne pas plus :-(
Je peux y arriver avec une zone de liste, mais
c'est plus laborieux. Et j'ai un autre problème.
Avec seulement quatre cartes de pays, je pèse
déjà 480 Ko, alors je n'ose pas imaginer mon poids
quand tous les pays du monde auront leur carte !!!

Private Sub ListBox1_Change()
ind = ListBox1.ListIndex + 1
Select Case ind
Case 1
Call AAutriche
Case 2
Call ABelgique
Case 3
Call AEspagne
Case 4
Call AFrance
End Select
End Sub

Serge

"Vincent." a écrit
dans le message de


news: dfcc01c3efdc$de556d90$
Salut !
Apparemment, tout marche bien dès que tu enlèves le
Call.


Pourquoi... aucune idée ! (enfin, presque aucune ;-o )
A+

V.

-----Message d'origine-----
Bonjour le monde,

La cellule E12 contient la liste :
Autriche
Belgique
France
J'ai aussi trois macros nommées :
AAutriche
ABelgique
AFrance
Je tente alors d'appeler une de ces macros
de la façon suivante :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$E$12" Then
nom = "A" & Target
Call nom
End If
End Sub
mais ça ne fonctionne pas :-(
Comment contourner cet affreux dilemme ?

Serge


.









.





1 2