Affecter une macro a plusieurs objets en même temps

Bonjour!

Hier j'ai créé grâce a une macro des flèches "précédent" et "suivant" afin de m'en servir comme boutons pour naviguer entre chaque feuille. Le problème c'est que c'est bien beau de créer les flèches d'un coup mais ensuite il faut leur affecter a chacune la macro qui permet soit d'aller a la feuille suivante soit a la feuille précédente et ce sur chaque feuille (sachant que j'en ai 500 et +).

Y aurait-il une manipulation miraculeuse qui permettrait d'affecter une macro a une des flèches mais sur toutes les feuilles d'un seul coup?! Est-ce possible? Si oui, comment? Car si je doit le faire manuellement je ne m'en sortirai jamais...

Je tiens a préciser que les flèches de chaque feuilles sont toute a la même position, font la même taille, en gros elles sont totalement identiques si cela peut aider... Je pensais vous donner une fichier joint mais comme c'est pas vraiment une manipulation spécifique a mon fichier mais plus une manipulation générale une aide direct via forum sera surement plus approprié mais faite le moi savoir si vous voulez le fichier.

Amicalement.

Bonjour

Ton fichier est utile pour ce qui est de la création des flèches, car je pense que c'est à ce moment là qu'il faudra intervenir pour affecter une macro à la flèche

Pour ma part les flèches sont déjà crées Je vous donne quand même mon fichier avec seulement 3 feuilles (sa devrait être suffisant pour faire les test) car mon fichier est trop volumineux dans son entièreté.

Les macros que je veut affecter d'un coup a toute les flèches sont, pour la flèche "Précédent":

Sub Retour_Cliquer()
ActiveSheet.Previous.Select
End Sub

Et pour la flèche "Suivant":

Sub Avancer_Cliquer()
ActiveSheet.Next.Select
End Sub

Je les ai mis également dans le fichier dans le module1.

Les codes fonctionnent très bien chez moi! Donc voila j'espère qu'avec cela sous la main tu pourras me venir en aide. Si tu y arrive j'aimerai que tu ai l'aimabilité de bien me détailler les manipulations a suivre comme je ne suis pas très dégourdi car je devrais le reproduire sur mon propre classeur. A très vite!

26fichier-test.xlsm (28.91 Ko)

Bonjour

Tu as juste à placer cette macro à la suite des 2 autres

Sub AffecteMacro()
Dim Ws As Worksheet
Dim Sh As Shape

  For Each Ws In Sheets       ' Pour chaque feuille
    For Each Sh In Ws.Shapes    ' Pour chaque forme dans la feuille
      If UCase(Left(Sh.Name, 12)) = "RIGHT ARROW " Then ' Si le début du nom =
        Sh.OnAction = "Avancer_Cliquer"   ' On lui affecte cette macro
      ElseIf UCase(Left(Sh.Name, 11)) = "LEFT ARROW " Then ' Si le début du nom =
        Sh.OnAction = "Reculer_Cliquer" ' On lui affecte cette macro
      End If
    Next Sh ' Forme (shape) suivante
  Next Ws   ' Feuille suivante
End Sub

Et à faire 1 seule fois (sauf si tu rajoutes des feuilles avec des flèches)

Tu places sur l'entête de cette macro et tu appuies sur F5 ( ou alors menu Exécution --> Exécuter Sub/Userform )

Merci de ta réponse! Peut être que je m'y prend mal mais cela ne fonctionne pas chez moi... Je colle le code que tu m'a donné a la suite des deux autre macro, j’exécute le code, je vais sur mes feuille pour voir si cela fonctionne mais rien.

Dans le code il y a "Si le début du nom" mais de quel nom est-ce que sa parle car le problème ne pourrait venir que d'ici a mon avis (sauf si le code n'est pas bon mais la je pourrai rien dire je m'y connais pas du tout).

Bonjour

Quelques explications supplémentaires dans le fichier

Je viens de tester le fichier que tu m'a envoyé, et je le jure devant dieu je suis assez intelligent pour suivre tes instructions qui sont assez clair mais rien n'y fait cela ne fonctionne pas. Je vais dans le modul1, je place mon curseur dans la première ligne comme tu me l'indique j’exécute avec F5 mais rien quand je vais tester mes flèches...

Bonjour

Pour qu'il n'y ait pas d'ambiguïté notes dans ton message quelle est pour toi la première ligne

Zayx a écrit :

dans la première ligne

Je viens de tester et bien sur cela fonctionne

Je ne sais pas ce qui se passe

Si quelqu'un d'autre veut bien tester

Je place mon curseur dans cette ligne:

Sub AffecteMacro()

Il y a d'écris juste au dessus en vert comme quoi je doit placer mon curseur dans la ligne suivante donc c'est bien celle la.

La version de excel aurait quelque chose a avoir? Je suis sous 2007.

Bonjour

C'est bien cette ligne

Pour la version je n'y crois pas (Mais bon je ne connais pas tout)

Reste plus qu'a attendre que quelqu'un teste ce fichier et qui dise ce qu'il constate

Un autre test

Rajoutes la ligne surlignée dans la macro et notes les noms

Sub AffecteMacro()
Dim Ws As Worksheet
Dim Sh As Shape

  For Each Ws In Sheets       ' Pour chaque feuille
    For Each Sh In Ws.Shapes    ' Pour chaque forme dans la feuille
      MsgBox Sh.Name
      If UCase(Left(Sh.Name, 12)) = "RIGHT ARROW " Then ' Si le début du nom =
        Sh.OnAction = "Avancer_Cliquer"   ' On lui affecte cette macro
      ElseIf UCase(Left(Sh.Name, 11)) = "LEFT ARROW " Then ' Si le début du nom =
        Sh.OnAction = "Reculer_Cliquer" ' On lui affecte cette macro
      End If
    Next Sh ' Forme (shape) suivante
  Next Ws   ' Feuille suivante
End Sub

Edit

Je viens de tester sur XL 2003 et j'ai les noms des formes en Français

Je n'y comprends rien, j'ai bien une version 2010 acheté en France

Donc si tu as les noms en Français toi aussi il faut modifier la macro

Sub AffecteMacro()
Dim Ws As Worksheet
Dim Sh As Shape

  For Each Ws In Sheets       ' Pour chaque feuille
    For Each Sh In Ws.Shapes    ' Pour chaque forme dans la feuille
      If UCase(Left(Sh.Name, 14)) = UCase("Flèche droite ") Then ' Si le début du nom =
        Sh.OnAction = "Avancer_Cliquer"   ' On lui affecte cette macro
      ElseIf UCase(Left(Sh.Name, 14)) = UCase("Flèche gauche ") Then ' Si le début du nom =
        Sh.OnAction = "Reculer_Cliquer" ' On lui affecte cette macro
      End If
    Next Sh ' Forme (shape) suivante
  Next Ws   ' Feuille suivante
End Sub

Yes!!! Le problème venait bien du nom en français!!!

Cela fonctionne a merveille je te remercie et je te souhaite une bonne soirée! A une prochaine peut être.

Rechercher des sujets similaires à "affecter macro objets meme temps"