Perte de macro
Ferméaprès avoir déplacé des onglets d'un classeur Excel vers un autre , j'ai perdu les liens que j'avais avec des macros.
Je m'explique : dans mes onglets j'ai créé un bouton qui active une macro.
Après le déplacement de mes onglets ces boutons ne sont plus actifs.
Existe-t-il une solution à ce problème ?
Merci d'avance de vos réponses.
10 réponses
Le déplacement d’onglets Excel entre classeurs entraîne la perte des liens entre boutons et macros, rendant les commandes associées inactives et nécessitant une réassociation des scripts. Plusieurs solutions évoquent une duplication des boutons et des macros en deux étapes, puis l’ajustement dans le code des noms et positions, afin de préserver les associations bouton-macro après le déplacement. D’autres conseillent d’utiliser l’éditeur VBA pour inspecter les UserForm et les modules, vérifier les procédures associées et relier manuellement les contrôles aux macros correspondantes dans le classeur cible. D'autres notent qu'un copier-coller entre classeurs peut rendre les boutons inactifs si les contrôles ne pointent plus vers les bonnes macros, avec pour solution d'insérer des dessins et d'y affecter une macro.
-
ContributeurJ'ai trouvé une combine pour supprimer tous tes boutons;
Ajoute un bouton à ton UserForm et mets ce code:
Private Sub CommandButton5_Click() 'Supprime les boutons Dim Ws As Worksheet 'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris 'en compte. For Each Ws In ThisWorkbook.Worksheets If Ws.Name = "1" Then 'rien Else Ws.Select ActiveSheet.Shapes.SelectAll Selection.Delete End If Next Ws End Sub
-
ContributeurLe classeur que je t'ai transmis ne peux plus être modifier. Les nouveaux boutons ne sont plus Ellipse 1 et 2, mais 3 et 4. C'est un exemple!
Il faut prendre ton classeur original après avoir fait une copie (important) et mettre une UserForm et des boutons et recopier le code.
Je tiens aussi à te signaler que tes 2 macros buggées. J'ai corrigé, ceux sont les lignes qui sont en vert. Il faudra aussi les corriger sur ton classeur original, en mettant une apostrophe devant ces lignes.
Je ne peux pas faire plus. Je sais que c'est compliqué pour un néophyte en vba!
Bon courage
-
ContributeurVoilà, je t'ai fait une interface avec un bouton approprié à chaque action. Tu n'auras même pas besoin d'allez modifier le code.
La seule obligation:
Après avoir supprimé tous les boutons. Il n'en restera que 2 sur l'onglet 1. Il faudra que tu leur affectes une macro à chacun avant de copier tous les boutons
http://www.cjoint.com/data3/3AEpL4QMP0w.htm
-
j'ai ouvert mon fichier Excel et me suis positionné sur le 1er onglet.
Comme précisé, j'ai ouvert l'UserForm (alt F11) puis F5
les 4 boutons de commande apparaissent sur mon onglet.
Quand je clic sur "supprimer test ce1" j'ai un message d'erreur "erreur d'exécution 1004 : la méthode 'select de l'objet'_worksheet'a échoué
-
-
ContributeurPour lancer l'UserForm1
Tu sélectionnes d'abord ton 1er onglet et ensuite Alt F11 pour allez dans l'éditeur
ensuite quand tu es sur l'UserForm1 tu fait F5 au clavier , elle va s'afficher sur ton onglet
Dans le code il faut d'abord que tu suivent les instructions que je t'ai données!
Tu supprimes d'abord Ellipse 1, quand c'est fait tu fermes l'UserForm pour revenir au code, tu changes Ellipse 1 en Ellipse 2 et relance ton UserForm et tu supprimes ton 2ème bouton. tu fermes l'UserForm1
Ensuite dans ton 1er onglet tu mets un bouton affecté à une 1ere macro
Tu rectifies dans le code copier les boutons le nom du bouton et eventuellement sa position
Copie boutons
Ensuite dans ton 1er onglet tu mets un second bouton affecté à une 2eme macro
Tu rectifies dans le code copier les boutons le nom du bouton et sa position
Copie boutons
Mais je n'ai pas trouvé de 2ème macro!
-
-
je viens de refaire un lien avec le fichier allégé qui comporte bien les deux boutons et les deux macros
https://www.cjoint.com/?3AEohnUuLCH
-
-
ContributeurQuand tu es dans l'éditeur, il y a en haut à gauche les feuilles, en dessous il y a Feuille tout seul, tu cliques dessus tu verras l'UserForm1, tu cliques dessus. Ensuite pour allez dans le code tu doublecliques sur un bouton.
En dessous Feuille il y a Modules, tu cliques dessus il y a ton module, tu cliques dessus et tu verras le code de ta macro: Sub impression_test_CM2()
-
ContributeurVoici ton classeur, mais il n'y a qu'une macro Test CM2 seulement
Pour aller dans les macros faire Alt F11 au clavier
http://www.cjoint.com/data3/3AElFnxvgbF.htm -
ContributeurSi tu as d'autres shapes (bouton, graphique etc) sur tes feuilles ils vont être effacer. Pour éviter cela il ne faudrait effacer que les boutons concernés. Mais ils faut qu'ils aient le même nom. Si c'est le cas voici le code:
Option Explicit Private Sub CommandButton1_Click() 'Supprime les boutons Dim Ws As Worksheet 'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris 'en compte. For Each Ws In ThisWorkbook.Worksheets Ws.Select ActiveSheet.Shapes("Rectangle 10").Delete 'a adapter au nom du bouton Next Ws End Sub Private Sub CommandButton2_Click() 'Copie les boutons Dim Ws As Worksheet 'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris 'en compte. ActiveSheet.Shapes("Rectangle 10").Select ' a adapter au bouton que tu auras mis Selection.Copy For Each Ws In ThisWorkbook.Worksheets If Ws.Name = "Feuil1" Then ' a adapter au 1er onglet pour éviter un 2ème bouton sur la feuille1 'rien Else Ws.Select Range("D21").Select ' a adapter Ws.Paste End If Next Ws End Sub Private Sub UserForm_Initialize() CommandButton1.Caption = "Supprimer boutons" CommandButton2.Caption = "Copier boutons" End Sub
-
Bonjour,
Merci encore de ton aide précieuse mais je ne sui pas assez calé en macro pour mettre en application tous tes conseils.
Ci dessous un lien vers une partie de ce fichier, si tu peux procéder à la modification je t'en remercie par avance. Je ferai ensuite la modification à l'ensemble de mon classeurs.
https://www.cjoint.com/?3AEkHCgSYC7
-
-
ContributeurTout d'abord tu fait une copie de ton classeur. Il va falloir bien suivre la procédure .
Alt F11 pour accéder, tu inseres une UserForm avec 2 boutons, avec ce code:
Private Sub CommandButton1_Click() 'Supprime les boutons Dim Ws As Worksheet 'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris 'en compte. For Each Ws In ThisWorkbook.Worksheets ActiveSheet.Shapes.SelectAll Selection.Delete Next Ws End Sub Private Sub CommandButton2_Click() 'Copie les boutons Dim Ws As Worksheet 'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris 'en compte. ActiveSheet.Shapes("Rectangle 9").Select ' a adapter au bouton que tu auras mis Selection.Copy For Each Ws In ThisWorkbook.Worksheets Ws.Select Range("D21").Select ' a adapter Ws.Paste Next Ws End Sub Private Sub UserForm_Initialize() CommandButton1.Caption = "Supprimer boutons" CommandButton2.Caption = "Copier boutons" End Sub
Tu vas d'abord supprimer tous tes boutons
Ensuite dans ton 1er onglet tu mets un bouton affecté à une 1ere macro
Tu rectifies dans le code copier les boutons le nom du bouton et eventuellement sa position
Ensuite dans ton 1er onglet tu mets un second bouton affecté à une 2eme macro
Tu rectifies dans le code copier les boutons le nom du bouton et sa position
Bon courage
@+ Le Pivert-
ContributeurJ'ai oublié de te dire que la copie des boutons se fait en 2 fois!
Ensuite dans ton 1er onglet tu mets un bouton affecté à une 1ere macro
Tu rectifies dans le code copier les boutons le nom du bouton et eventuellement sa position
Copie boutons
Ensuite dans ton 1er onglet tu mets un second bouton affecté à une 2eme macro
Tu rectifies dans le code copier les boutons le nom du bouton et sa position
Copie boutons -
@cs_Le Pivertmerci à toi pour toutes ces informations.
Je ne vais pas pouvoir tester ce soir mais je mets ça en place dès demain matin
merci encore pour ton aide
-
-
ContributeurBonjour,
Tu peux insérer un dessin. Ensuite clique droit , Affecter une macro. Tu verras ta macro et tu la sélectionnes.
-
-
ContributeurLa macro est visible de tous les classeurs et elle est bien active
Si tu n'as qu'une seule macro et que tous tes boutons utilisent cette macro, c'est facile.Tu fait une boucle sur tous tes onglets et tu supprimes tous tes boutons. Ensuite tu mets un bouton sur ton 1er onglet, tu lui affectes ta macro. Ensuite tu fais une boucle sur tous tes onglets en copiant ce bouton. J'ai essayé manuellement sur 3 feuille cela fonctionne. -
@cs_Le Pivertje ne comprends pas la notion de "boucle".
-
-
@cs_Le Pivertnon, en fait par onglet j'ai deux macros différentes
-
-
ContributeurBonjour
Qu'appelez vous déplacer un onglet ?
si c'est un copier coller vers un autre classeur,il faut que la macro soit aussi dans le classeur, ou la recoller dans l'onglet si elle appartient au code de la feuille
crdlmnt