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

Rechercher des sujets similaires à "assigner macro bouton"