Lier Bouton a Macro

Bonjour a tous,

J'ai un fichier Excel avec une macro intégrée.

Mon souci c'est que

  • Premièrement cette macro n'apparait pas quand je mets afficher les macros,
  • Deuxièmement elle ne se déclenche pas automatiquement sauf si je change manuellement les chiffres dans le Feuil1, sachant que les chiffres sur cette feuille viennent d'un autre fichier,
  • Et Troisièmement je ne peux pas lier un bouton a cette macro.

Merci de votre aide

13classeur2.xlsm (29.16 Ko)

Bonjour Chleuh95,

Voici ton fichier modifié.

Les problèmes que tu as rencontrés étaient dûs au fait que la macro était dans la procédure événementielle "Change' de Feuil1. Elle ne pouvait s'exécuter que suite à une modification opérée dans cette feuille. Je l'ai donc déplacée dans un module de code standard (Module1) : elle apparaît donc à présent dans le menu macros, et tu peux l'attacher sans problème à un bouton de commande. Je te laisse le soin d'expérimenter par toi-même, tout en restant à ton écoute si tu rencontres des difficultés.

A +

Cordialement.

Bonjour,

Merci pour votre réponse

Je viens de tester et ça ne marche pas, ça me dit qu'il y a une erreur et ça souligne en jaune

If Target.Count = 1 And Not Application.Intersect(Target, PlageDonnées) Is Nothing Then

C'est normal?

RE :

Oui, dans l'état actuel du code c'est normal : Target désigne, pour l'événement Change de la feuille, la cellule qui vient d'être modifiée.

De ce fait, ça ne peut pas fonctionner dans ce cas. Je pense donc qu'il te faut modifier le code comme ceci :

(suppression de la condition If...Then)

Sub MacroDeplacee()
Dim Ws As Worksheet
Dim DerLig As Long
Dim PlageTotal As Range, PlageDonnées As Range, C As Range
Dim Col As Integer
    With Worksheets("Feuil1")
        DerLig = .Range("AG" & Rows.Count).End(xlUp).Row
        Set PlageTotal = .Range("AG3:AG" & DerLig)
        Set PlageDonnées = .Range("B3:AF" & DerLig)
        Set Ws = Worksheets("Feuil2")
        Col = 2
            Application.ScreenUpdating = False
            Ws.Range("B5:K36").ClearContents
            For Each C In PlageTotal
                If C > 0 Then
                    Ws.Cells(5, Col) = .Cells(C.Row, 1)
                    Ws.Range(Ws.Cells(6, Col), Ws.Cells(36, Col)) = Application.Transpose(.Range(.Cells(C.Row, 2), .Cells(C.Row, 32)))
                    Col = Col + 1
                End If
            Next C
            Application.ScreenUpdating = True
        End If
        Set PlageTotal = Nothing: Set PlageDonnées = Nothing: Set Ws = Nothing
    End With
End Sub

Cordialement.

Re

La c'est bon je crois. Je teste ça dans mon gros fichier et je valide si tout est bon,

Merci Beaucoup pour ton aide.

Rechercher des sujets similaires à "lier bouton macro"