Ré-assigner une macro a un bouton
Bonjour
J'ai un fichier excel (Fichiersource) qui contient plusieurs onglets. Lorsque l'utilisateur appui sur un bouton, un nouveau document est créer (NouveauFichier) ce nouveau fichier contient 2 onglets + 1 module+ 1 form du fichier source.
Ma problématique vient des bouton qui sont sur un des onglets copiés. La macro qui leur est associé fait référence au Fichier Source. je cherche a retirer cette référence. Je tourne en rond .
Ça bloque au niveau de .OnAction
J'ai essayé. (Code trouvé sur ce forum)
Dim Shp As Shape
Dim Pos_Ex As Long
For Each Shp In ActiveSheet.Shapes 'on balaie les shapes
With Shp
If .OnAction <> "" Then 'si une macro y est affectée
Pos_Ex = InStr(1, .OnAction, "!") 'on cherche la positon du "!"
If Pos_Ex > 0 Then 'si le ! existe (donc fait appel à un autre fichier)
.OnAction = Right(.OnAction, Len(.OnAction) - Pos_Ex) 'on réaffecte en supprimant le nom du fichier
End If
End If
End With
Next Shp
Puis ceci (par le nom du bouton)
' Spécifier la feuille Excel sur laquelle se trouve le bouton
Set WsGeneralnouveau = wbNouveauFichier.Sheets("General")
Dim newButton As Shape
For Each newButton In WsGeneralnouveau.Shapes
If newButton.Name = "BoutonQualifTech" Then
newButton.OnAction = "Qualification"
End If
Next newButton
Puis par le nom de la macro
' Spécifier la feuille Excel sur laquelle se trouve le bouton
Set WsGeneralnouveau = wbNouveauFichier.Sheets("General")
Dim newButton As Shape
For Each newButton In WsGeneralnouveau.Shapes
If newButton.OnAction = "'" & FichierSourceName & !Qualification" Then
newButton.OnAction = "'" & NouveauFichierName & "'!Qualification"
ElseIf newButton.OnAction = "'" & FichierSourceName & !TrouverNomFichierAOuvrir" Then
newButton.OnAction = "'" & NouveauFichierName & !TrouverNomFichierAOuvrir"
End If
Next newButton
J'ai également essayé d'inscrire le nom des fichiers au lieu de fichiersourcename & nouveaufichiername
Je suis ouverte a toutes vos suggestions.
Merci!
Bonjour,
si j'ai bien compris votre problème (c'est toujours mieux avec un fichier joint), voici une solution :
Il y a 2 types de boutons (Contrôles de formulaire ou Contrôle ActiveX) :
Contrôle ActiveX
Dans le menu Excel : Développeur => Mode Création => Clic sur le bouton => Clic Droit => Visualiser le code.
Le code vba correspondant au bouton s'affiche. Du type
Private Sub BoutonListeOnglet_Click()
ListeOnglet
End Sub
Pour réinitiliser : Supprimer le code ou mettez le en commentaires.
Pour réaffecter : saisissez le code souhaité.
Contrôles de formulaire
Dans le menu Excel : Développeur => Mode Création => Clic sur le bouton => Clic Droit => Affecter une macro
Pour réinitiliser : Supprimer le nom de la macro dans la fenêtre.
Pour réaffecter : Sélectionner le nom de la macro dans la liste.
Puis dans le menu Excel : Développeur => Mode Création pour repasser en mode "Normal"
Salut le fil,
Ok tu teste des codes trouvés sur des forums.
Mais tu lances ses procédure depuis quel classeur ? car ce type de programmation : For Each Shp In ActiveSheet.Shapes
peut ne pas faire la chose demandée selon depuis quel classeur elle est lancée.
Donc un conseil renseignes le nom du classeur et de la feuille sur laquelle doit se faire la modification. en évitant les ActiveWorkbook et ActiveSheet.
CLR Merci pour la réponse, ce n'est pas tout a fait ce que je recherche
Jean-Paul. Merci pour le conseil. Je me suis rendu compte que lorsque mon fichier est .visible ça fonctionne et lorsqu'il est .hide. ça ne fonctionne pas
Quoi qu'il en soit. pour l'instant je laisse mon fichier visible et je crée les boutons suite à la création des fichiers. Ce qui donne...
Dim WsGeneralnouveau As Worksheet
Set WsGeneralnouveau = wbNouveauFichier.Sheets("General")
WsGeneralnouveau.Activate
Dim btnQualif As Button
Dim btnTermine As Button
Set btnQualif = ActiveSheet.Buttons.Add(750, 25, 150, 50)
With btnQualif
.Caption = "Qualification"
.Name = "MonBoutonQualif"
.OnAction = "'" & wbNouveauFichier.Name & "'!Qualification"
End With
Set btnSuivi = ActiveSheet.Buttons.Add(750, 100, 150, 50)
With btnSuivi
.Caption = "Suivi"
.Name = "MonBoutonSuivi"
.OnAction = "'" & wbNouveauFichier.Name & "'!Suivi"
End With
Cette partie fonctionne. cependant je me retrouve avec une erreur lors de la fermeture du fichier
'Création nouveau document
Dim wbNouveauFichier As Workbook
Set wbNouveauFichier = Workbooks.Add(xlWBATWorksheet)
'Code
' Sauvegarder & Fermer le nouveau fichier
wbNouveauFichier.Save ' éventuellement a retiré si j'arrive a fermer le fichier avec savechanges:=true
wbNouveauFichier.Activate ' le wbNouveaufichier.close ne fonctionne pas alors on j'essai autre chose
MsgBox ActiveWorkbook.Name 'valider que c'ets bien le bon workbook a fermer
ActiveWorkbook.Close ' erreur 91 :/
je vais marqué ce post résolu et en ouvrirai un autre pour mon problème de Close au besoin