OVH Cloud OVH Cloud

Comment affecter la même macro à 80 formes automatiques

3 réponses
Avatar
Nico
Bonsoir,

Mon problème est le suivant : j'ai positionné sur une feuille une carte
de France et sur cette dernière j'ai créé 80 formes automatiques
représentant 80 succursales.
Je souhaiterais qu'un UserForm apparaisse dès que je positionne le
curseur de la souris sur une de ces formes.
Cela, grâce à vous, je sais à peu près faire pour une forme. Mais
j'aimerais le faire pour toutes les formes sans avoir à me saisir les 80
Private Sub... pour faire apparaitre et les 80 Private Sub pour les
faire disparaitre sachant par ailleurs que le nombre de succursales peut
augmenter ou diminuer...

J'avais pensé passer par un module de classe, mais là je dois bien
avouer que je sèche lamentablement...

Y-aurait-il une âme charitable qui pourrait me mettre sur une piste SVP
??? Je vous remercie par avance.

NICO

3 réponses

Avatar
anonymousA
bonjour,

quand tu parles de formes automatiques moi je comprends des formes que l'on
peut créer à partir de la barre d'outils dessins donc des formes pour
lesquelles l'action de déclencher une macro passe par le choix "Affecter à
une macro".
Si c'est bien celà , je ne vois pas où apparaissent des Private Sub pour les
formes puisque ces types de formes ne sont pas des controles ActiveX.
Si tu veux que chacune de ces formes déclenche la même macro d'affichage
d'un même userform,tu peux t'éviter de déclarer pour chacune d'entre elles le
OnAction en écrivant la proc suivante:

Sub hh
UF1.show
end sub

Sub toto
for each s in activesheet.shapes
'(ici tu pourrais faire des testes si tu souhaites discriminer certains
shapes)
s.OnAction="hh"
next
end sub

Maintenant, je n'ai peut-être pas compris exactement ta question.

A+


Bonsoir,

Mon problème est le suivant : j'ai positionné sur une feuille une carte
de France et sur cette dernière j'ai créé 80 formes automatiques
représentant 80 succursales.
Je souhaiterais qu'un UserForm apparaisse dès que je positionne le
curseur de la souris sur une de ces formes.
Cela, grâce à vous, je sais à peu près faire pour une forme. Mais
j'aimerais le faire pour toutes les formes sans avoir à me saisir les 80
Private Sub... pour faire apparaitre et les 80 Private Sub pour les
faire disparaitre sachant par ailleurs que le nombre de succursales peut
augmenter ou diminuer...

J'avais pensé passer par un module de classe, mais là je dois bien
avouer que je sèche lamentablement...

Y-aurait-il une âme charitable qui pourrait me mettre sur une piste SVP
??? Je vous remercie par avance.

NICO



Avatar
Nico
Bonjour,

et tout d'abord, merci de la réponse. En effet ce sont des formes
automatiques de la barre d'outils dessin qui ne sont pas des contrôles
ActiveX et c'est bien cela le souci (d'où mon idée de passer par un
module de classe et la création d'une collection d'objets spécifiques)...
Je parlais de Private Sub parce que j'avais fait un test avec un label
qui déclenchait l'ouverture d'un UserForm quand je positionnais (sans
cliquer) ma souris dessus (la Private Sub était dans le code de la feuille).

La problèmatique du OnAction est à mes yeux double : il faut cliquer sur
la forme pour déclencher l'ouverture du UserForm et il faut que cette
macro soit lancée via une macro de type "Onclick" se trouvant dans le
module de la feuille...

Merci néanmoins de m'avoir rappelé l'instruction OnAction.

NICO

bonjour,

quand tu parles de formes automatiques moi je comprends des formes que l'on
peut créer à partir de la barre d'outils dessins donc des formes pour
lesquelles l'action de déclencher une macro passe par le choix "Affecter à
une macro".
Si c'est bien celà , je ne vois pas où apparaissent des Private Sub pour les
formes puisque ces types de formes ne sont pas des controles ActiveX.
Si tu veux que chacune de ces formes déclenche la même macro d'affichage
d'un même userform,tu peux t'éviter de déclarer pour chacune d'entre elles le
OnAction en écrivant la proc suivante:

Sub hh
UF1.show
end sub

Sub toto
for each s in activesheet.shapes
'(ici tu pourrais faire des testes si tu souhaites discriminer certains
shapes)
s.OnAction="hh"
next
end sub

Maintenant, je n'ai peut-être pas compris exactement ta question.

A+



Avatar
anonymousA
Eh oui, sur une forme automatique , il faut cliquer pour lancer la macro car
il n'y a pas d'evenements de type MouveMove.
Par ailleurs,il peut y avoir un module de classe mais ce serait sans interet
compte tenu du fait que les formes ne gérent pas d'evevements.
Enfin, il n'est pas nécessaire pour une forme (ou d'ailleurs un controle de
la barre d'outils formulaires) de déclencher la macro par une procédure
OnClick (le OnClick ou QuandClic est simplement l'extension du nom par défaut
de l'objet que donne Excel quand on fait Affecter une macro) . Du moment que
l'on a affecté une macro à une forme et que cette procédure est de type
publique, elle sera accessible.

A+


Bonjour,

et tout d'abord, merci de la réponse. En effet ce sont des formes
automatiques de la barre d'outils dessin qui ne sont pas des contrôles
ActiveX et c'est bien cela le souci (d'où mon idée de passer par un
module de classe et la création d'une collection d'objets spécifiques)...
Je parlais de Private Sub parce que j'avais fait un test avec un label
qui déclenchait l'ouverture d'un UserForm quand je positionnais (sans
cliquer) ma souris dessus (la Private Sub était dans le code de la feuille).

La problèmatique du OnAction est à mes yeux double : il faut cliquer sur
la forme pour déclencher l'ouverture du UserForm et il faut que cette
macro soit lancée via une macro de type "Onclick" se trouvant dans le
module de la feuille...

Merci néanmoins de m'avoir rappelé l'instruction OnAction.

NICO

bonjour,

quand tu parles de formes automatiques moi je comprends des formes que l'on
peut créer à partir de la barre d'outils dessins donc des formes pour
lesquelles l'action de déclencher une macro passe par le choix "Affecter à
une macro".
Si c'est bien celà , je ne vois pas où apparaissent des Private Sub pour les
formes puisque ces types de formes ne sont pas des controles ActiveX.
Si tu veux que chacune de ces formes déclenche la même macro d'affichage
d'un même userform,tu peux t'éviter de déclarer pour chacune d'entre elles le
OnAction en écrivant la proc suivante:

Sub hh
UF1.show
end sub

Sub toto
for each s in activesheet.shapes
'(ici tu pourrais faire des testes si tu souhaites discriminer certains
shapes)
s.OnAction="hh"
next
end sub

Maintenant, je n'ai peut-être pas compris exactement ta question.

A+