Problème appelle d'une macro via bouton manuel

Bonjour,

Grand mystère auquel vous aurez surement une petite réponse à m'apporter. J'ai beau retourner le problème dans tous les sens je ne trouve pas d'explications.

Je souhaite copier les données d'une feuille pour les coller dans une autre.

1er cas (le plus simple) : J'ai enregistrer l'action, j'insère le bouton (formulaire) et j'y affecte ma macro. Magie, lorsque je clique sur le bouton la macro s'exécute.

2ème cas : J'enregistre l'action pour avoir le code, je supprime la macro enregistré (mais je conserve le code). Je copie le code dans Module (oui, j'ai vu que pour faire référence à d'autre feuille il fallait utiliser module) mais lorsque j'insère un bouton (ActiveX) et que je double clique dessus pour y rentrer le code, celui-ci se crée directement depuis la feuille en question et non dans module, impossible de faire le lien entre ce bouton et le code du module.

J'ai créé les 2 boutons sur mon fichier pour que cela soit plus parlant, si quelqu'un pouvait m'expliquer pourquoi ça ne fonctionne pas manuellement ?

merci beaucoup

Bonjour Fredo, bonjour le forum,

Mon anti-virus a bloqué ton ficher... Je ne dis pas que tu y es pour quelque chose mais tu devrais regarder ça de plus près si tu compte obtenir de l'aide...

Etrange, j'ai tenté d'ouvrir le lien et effectivement le mode protégé est activé et un message apparaît,

J'ai renommé et réenregistré le fichier, en espérant que celui-ci marche

update : Ok c'est bon, surement parce que c'était un fichier du boulot, j'ai fais ce que j'ai dis plus haut et tout est niquel

10ccvo.zip (175.64 Ko)

Mince, du coup les gens ont peur d'ouvrir le fichier vu l'historique des messages (et c'est compréhensible), quelqu'un aurait-une réponse ? J'en profite pour faire un petit up

Re,

Ton problème vient tout simplement des Select qui sont source de plantage et ralentissent considérablement l'exécution du code... Il faut les éviter autant que tu le peux !

Le code placé dans l'onglet concerné :

Sub CommandButton1_Click()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)

Set OS = Me 'définit l'onglet source OS
Set OD = Worksheets("Feuil4") 'définit l'onglet destination OD
OS.Cells.Copy OD.Range("A1") 'copie toutes les cellules de l'onglet source et les colle dans A1 de l'onglet destination
End Sub

Le code placé dans un module standard :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)

Set OS = Worksheets("4-CM1 Coût Préventif") 'définit l'onglet source OS
Set OD = Worksheets("Feuil4") 'définit l'onglet destination OD
OS.Cells.Copy OD.Range("A1") 'définit l'onglet source OS
End Sub

Merci de ta réponse ThauTheme,

Je prends note, il est vrai que ce n'est pas la première fois que j'entends cela.

Cependant, le problème était que je n'arrive pas à lier le bouton à la macro non enregistré. Le boutton "Commandbutton" après un double clique dessus me renvoit automatiquement à l'écriture du code, mais dans la feuil4, et non dans les modules.

Ce qui serait idéal, c'est que l'écriture du code se fasse directement dans module (mais ça, je l'ai que via l'enregistrement de macro et l'affectation au bouton), j'aurais voulu comprendre mon erreur de raisonnement,

Cordialement,

Re,

J'enregistre systématiquement le code des boutons placés dans un onglet dans le composant VBA de cet onglet (Feuil1(Feuil1) par exemple). D'ailleurs, c'est ce que fait VBA par défaut avec un CommandButton issur de la barre d'outils Contrôles ActiveX. Ça fonctionne toujours nickel. Même si tu travailles sur plusieurs onglet dès lors que l'onglet est systématiquement spécifié. Jamais de Select (sauf cas de force majeure) et tu verras qu'il n'y a pas de problème. Je ne sais pas pourquoi tu trouves idéal d'enregistrer le code d'un bouton dans un module standard mais dans ce cas, enregistre dans une procédure (par exemple dans le Module1, la procédure Macro1) et, au clic du bouton tu écris :

Private Sub CommandButton1_Click()
Module1.Macro1
End Sub

Il me semblait avoir lu qu'il fallait écrire les macros général dans les modules, mais comme tu dis tant que c'est spécifié il devrait ne pas y avoir de raison,

Merci de tes très claires explications et de ta réactivité

Fred

Rechercher des sujets similaires à "probleme appelle macro via bouton manuel"