Programmer l'affectation d'une macro à un bouton

Bonjour Messieurs, Dames,

J'ai une petit soucis et je n'ai malheureusement pas trouvé sur le fofo de solution adaptée.

Dans une macro (que vous m'avez grandement aider à créer), je crée un workbook, copie un sheet complete, importe un module avec macro du fichier origine vers fichier copie (sauvearde).

Dans le sheet crées (sauvegarde) il y a un bouton. j'ai essayé (avec l'enregisteur) de modifier l'affectation du bouton mais ce dernier conserve toujours le chemin du fichier source et non pas le chemin du modul importé...

Voici le code.

Application.Goto Sheets("tps gamme").Range("a16")
Sheets("tps gamme").Copy Before:=Workbooks("tps_gamme_temporaire.xlsm").Sheets(1)
ActiveSheet.Name = Range("a16").Text

'************* debut copie macro ****************
 Dim S As String
 Dim ModCode As Object

'Copie le module1 du classeur où est la macro vers un module d'un autre classeur
 With ThisWorkbook.VBProject.VBComponents("Module4").codemodule
 S = .Lines(1, .CountOfLines)
 End With

'Classeur de destination : doit être ouvert absolument
 With Workbooks("tps_gamme_temporaire.xlsm")
'Ajoute un module
 With .VBProject.VBComponents.Add(1)
'ajoute le code
 .codemodule.AddFromString S
 End With
 End With

'************* fin copie macro ****************

'************* debut import synthese ****************
Windows("zz-tps-gamme.xlsm").Activate
Sheets("synthese").Copy Before:=Workbooks("tps_gamme_temporaire.xlsm").Sheets(1)
   '************* fin synthese ****************

'affectation bouton
 Workbooks("tps_gamme_temporaire.xlsm").Sheets("synthese").Shapes("Button 1").Select
 selection.OnAction = "synthese"

Merci de votre aide

Salut Noisy,

Je n'ai pas fait de test mais quand tu créés le bouton pour y affecter le lien de macro par VBA, tu ne pourrais pas y mettre un truc du genre

selection.OnAction = "Workbooks("tps_gamme_temporaire.xlsm").synthese" 

en gros de faire un pointage plus complet que "synthèse" pour dire dans quel fichier tu veux l'appeler (surement par défaut dans le fichier ou est la macro, donc ton fichier qui créé la copie et pas le nouveau)

Sinon surement plus lourd mais justement si c'est un problème de liaison car tu as le code VBA dans la macro de création, essaie de mettre dans ta sheet ou tu as le bouton du genre:

Private Sub Worksheet_Activate()
Workbooks("tps_gamme_temporaire.xlsm").Sheets("synthese").Shapes("Button 1").Select
 selection.OnAction = "synthese"
End Sub

A voir si l'activate est le mieux mais en gros de lier ton bouton quand la feuille1 s'initialise, s'active et comme la macro sera sur le nouveau fichier par copie, cela le lieras avec ton nouveau fichier. Certes à chaque activation tu auras les lignes de code de lancer... mais si ça te sauve la mise pourquoi pas ^^

ECG

Salut ECG,

tout d'abord merci de t'etre penché sur mon pb.

La 1er solution ne fonctionne pas des la compilation : erreure de syntaxe

La deuxieme ne marche pas non plus, (ca fonctionne mais ca résout pas mon pb) j'ai créé en dessous de mon sub, le private sub sugeré et fait un" call" de la private sub dans mon code. ca marche pas. (apres j'ai essayé de rendre le workbook temporaire "activat"e avant de faire call...) sans succes tjs le liens du fichier source

je vous joint le fichier des fois que cela puisse aider...

(desolé, y'a pas bcp de texte dedans, j'ai viré qlq données relatives à l'activité de mon entreprise )

A la 1er msgbox demandant version synthetique, repondre "non" pour aller sur cette partie du code.

merci d'avance.

32zz-tps-gamme.xlsm (408.75 Ko)

Je regarde ça dès que j'ai un peu de temps

edit : tu as un mot de passe sur les macros

ECG

A oui mince, c'est : noisy

Je regarde ça et fais quelque test

Edit: c'est dans la feuille "synthese" que tu dois avoir (a noter que le ton shapes.select puis selection.onaction peut se faire en une fois) :

Private Sub Worksheet_Activate()
Workbooks("tps_gamme_temporaire.xlsm").Sheets("synthese").Shapes("TOTO").OnAction = "synthese"
End Sub

alors que toi il est dans le Module3 c'est bizarre hmm

Et je viens de regarder tout ça, le fait de faire un

Workbooks.Add

te créé un nouveau fichier vierge sans macro donc, je n'ai pas été plus loin plus que ça car du coup je ne pense pas que c'est ce que tu veux faire ici. Après je ne maitrise pas plus que ça la manipulation de fichier mais cela t'irait en faisant :

ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\Gamme_Copie.xlsm", _
        FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

ActiveWorkbook.Save

A noter le Thisworkbook.path, qui reprend le dossier ou tu as ton fichier d'origine du coup directement, facile de retrouver le nouveau fichier et cela fonctionne ou que soit le fichier.

Et donc cela te copie ton fichier de base sous un nouveau nom... en gardant toute les sheets et surtout les macros (plus besoin de magouiller en plus pour associer la macro au bouton au passage, du moins chez moi ça marche)

Après tu fais tes manipulations pour mettre en forme ton documents, cela t’irait comme solution?

ECG

Salut ECG,

C'est le module3 qui est principale, qui pilote toutes les actions.

cela copie les données, créé le fichier de sauvegarde(temporaire), y colle les données a sauvegarder et amène la feuille synthèse.

Dans module 3, y'a un paragraphe qui copie le module 4 et l'amène dans le fichier temporaire.

Je module 4 rempli juste le fichier de synthèse. Il n'a aucun lien avec l'opération de sauvegarde.

J'espère aider a la compréhension du fichier.

Cdt

Noisy


Salut ECG,

C'est le module3 qui est principale, qui pilote toutes les actions.

cela copie les données, créé le fichier de sauvegarde(temporaire), y colle les données a sauvegarder et amène la feuille synthèse.

Dans module 3, y'a un paragraphe qui copie le module 4 et l'amène dans le fichier temporaire.

Je module 4 rempli juste le fichier de synthèse. Il n'a aucun lien avec l'opération de sauvegarde.

J'espère aider a la compréhension du fichier.

Cdt

Noisy

alors il te faut renommer ta macro dans le module 3 et l'appeler dans le Worksheet_Activate() de ta feuille 2 mais c'est secondaire car avec le code que je t'ai mis, j'arrive à faire un nouveau classeur ou toute les macros fonctionne, tu as testé?

ECG

Salut ECG,

c'est peu etre une erreure de ma part.

ca marche oui mais le soucis c'est que quand je ferme tout les fichier excel. que je reouvre que le fichier de sauvegaarde et que je clic droit sur le bouton / affecter une macro

la macro qui est dans la zone de texte en haut, a le chemin du ficher origine au lieu d'avoir juste "synthese"

quand je le change manuellement, y'a bian juste synthese ou au pire 'totosauvegarde.xlsm'!synthese

a+

Salut ECG,

J'ai trouvé.

pour avoir la bonne macro affecté au bouton du nouveau classeur, mon erreure etait sur le nom du chemin.

au lieu de mettre :

selection.OnAction "synthese" ou "module1.synthese"

j'ai mis :

Windows("tps_gamme_temporaire.xlsm").Activate
 Workbooks("tps_gamme_temporaire.xlsm").Sheets("synthese").Shapes("Bouton 1").Select
 selection.OnAction = [b]"tps_gamme_temporaire.xlsm!" & "synthese"[/b]

et le ça marche.

Encore merci pour ton temps.

Cdt

SB

Rechercher des sujets similaires à "programmer affectation macro bouton"