PB- 2 Boutons Excel réalisent la même macro

Bonjour,

Je me retrouve embêter sur des boutons d'activation de macro.

J'ai 3 Sheet, BASE, LISTE et BILAN.

BASE est la Sheet contenant les donnée de base, BILAN les tableaux, LISTE le listing des données.

Les Sheets BILAN et LISTE ainsi que les données traitées et les tableaux sont crées automatiquement par macro à partir de BASE .

A un moment dans ces macros je crées des boutons de façon automatique.

Dans cet ordre.

Dans macrotab 2, je crée un bouton a gauche de mon tableau qui change de Sheet pour afficher la Sheet LISTE. SIMPLE

Dans macrotab 3, je crée un bouton a droite de chaque ligne d'un autre tableau, qui applique un filtre sur des donnée en LISTE, chaque bouton a la même fonction et même nom (prendre valeur deux cases a gauche et l'appliquer dans le filtre)

Quand je réalise les macro séparément, les macros fonctionnent très bien. Mais quand je réalise l’enchaînement macrotab2 macrotab 3, tous les boutons effectue la même macro, c'est a dire la dernière assigné.

exemple: 1er bouton changer Sheet et 2eme bouton appliquer filtre devient 1er bouton appliquer filtre et 2eme bouton appliquer filtre

Voici le code censé être assigné a chaque macro

Sub afficher_annee()

Dim b As String
ActiveWorkbook.Names.Add Name:="francis", RefersToR1C1:="=OFFSET(LISTING!R3C10,0,0,COUNTA(LISTING!C10),3)"
a = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address
b = Range(a).Offset(0, -2).Value
MsgBox b
Sheets("LISTING").Select
Range("francis").Select
Selection.AutoFilter
ActiveSheet.Range("francis").AutoFilter Field:=3, Operator:=xlFilterValues, Criteria1:=b
Cells.EntireColumn.AutoFit
Cells(1, 1).Select

End Sub
Sub retour_bilan()

Sheets("BILAN").Select

End Sub

Mes macrotab1 et macrotab 2 qui crée les bouton sont appelé par une autre macro que voici

Sub MAJ()

chrono = Timer

Call macrotab2
Call macrotab1
Call Macrotab3

Sheets("LISTING").Select
Cells.EntireColumn.AutoFit
Sheets("BILAN_").Select

chrono = Timer - chrono
t = CInt(chrono)
MsgBox "traitement terminé en " & t & " secondes", vbInformation

End Sub

Je vous remercie par avance du temps et de la patience que vous m'apporterez

Cordialement, hoooodini

Bonjour,

A mon avis ton problème est dans le code de macrotab1 et macrotab2 pourrais tu nous le fournir ?

Merci,

Girodo,

bloc macrotab2

Dim PosG As Integer
Dim PosH As Integer
Dim Hauteur As Integer
Dim Longueur As Integer
With Cells(4, 2)
    PosG = .Left
    PosH = .Top
    Hauteur = .Height
    Longueur = .Width
End With
ActiveSheet.Buttons.Add(PosG, PosH, Longueur, Hauteur).Select
ActiveSheet.Buttons.OnAction = "listt2"
ActiveSheet.Buttons.Caption = "listing"

bloc macrotab3

Dim PosG As Single
Dim PosH As Single
Dim Hauteur As Single
Dim Longueur As Single
Dim ligne As Integer
Dim ln As Integer

Sheets("BILAN").Range("J1").FormulaR1C1 = "=COUNTA(BILAN!C11)"
ligne = Sheets("BILAN").Range("J1").Value + 1
ln = 3
x = 39.5

Do While ln < ligne
    ln = ln + 1
    With Cells(ln, 13)
        PosG = 1124.75
        PosH = x
        Hauteur = 11.75
        Longueur = 58
    End With
    ActiveSheet.Buttons.Add(PosG, PosH, Longueur, Hauteur).Select
    ActiveSheet.Buttons.OnAction = "afficher_annee"
    ActiveSheet.Buttons.Caption = "afficher"
    x = PosH + Hauteur + 1
Loop
Sub listt2()

Sheets("LISTING").Select
ActiveWorkbook.Names.Add Name:="resultat", RefersToR1C1:="=OFFSET(LISTING!R3C3,0,0,COUNTA(LISTING!C3),COUNTA(LISTING!R3))"
Range("resultat").Select

End Sub

Je n'ose pas mettre tous mon module car les code sont plutôt long.

Voici les partie qui réalisent la création des bouton, et la dernière macro associé (je m’étais trompé de macro sur le précédent message).

Je pense que j'en ai assez vu :p

"ActiveSheet.Buttons." intervient sur TOUS les boutons de la feuille active, donc il faudrait changer ça pour ne sélectionner que le bouton sur lequel tu souhaites intervenir.

Si tu ne trouve pas envois moi ton fichier par MP je regarderais

Girodo,

Je me disais qu'il y avait quelque chose a voir avec les sheets, parce que j'ai d'autre boutons sur une autre page et qu'ils ne sont pas affecté. Enfin j'ai le même problème mais avec deux autres macros.

Mais du coup par quoi je doit remplacer ce activesheet.buttons? Parce que je n'ai trouvé aucune piste pour le moment.

Pour te répondre il me faut ton fichier... Que je vois comment sont nommés ces boutons pour les sélectionner séparément

Girodo,

Petit cadeaux, je te passe un fichier intermédiaire ou toute donnée confidentielle a été enlevé, c'est un extrait du plus gros environ 5% des lignes donc certains tableaux font vide.

Mais il y a la structure et le code associé donc je pense que la logique devrait être comprise.

PS : le bouton Feuil BILAN_VTB en C13 s'est décalé il faut mettre le coin sup droit en R4C13

10global.xlsm (84.88 Ko)

Hum en effet, c'est dense ^^

Pour info, il faudrait préférer la syntaxe :

Sheets("PLANNING").Range("depart1").Copy
Sheets("tempo").Range("arrivee1a").PasteSpecial xlPasteValues

à celle-ci :

Sheets("PLANNING").Select
Range("depart1").Select
Selection.Copy
Sheets("tempo").Select
Range("arrivee1a").PasteSpecial xlPasteValues

Plus lisible et moins longue à exécuter.

Dans l'idéal il faut même éviter le copier-coller en mettant :

Sheets("tempo").Range("arrivee1a").value = Sheets("PLANNING").Range("depart1").value

Mais c'est pas le sujet pour l'instant ! Je regarde ton code plus en détail dès que j'aurais le temps.

Girodo,

Juste pour ça ça optimise déjà pas mal le temps d’exécution.

J'essaye depuis déjà un petit moment de réduire ce temps d’exécution je suis parti de loin pour arriver a ça et avec ça ça continue.

merci beaucoup si tu as d'autre remarque comme ça ça me plairait beaucoup.

WHOW

A la fin de ton code tu mets :

ActiveSheet.Buttons.Add(PosG, PosH, Longueur, Hauteur).Select
ActiveSheet.Buttons.OnAction = "retour_BILAN_VTB"
ActiveSheet.Buttons.Caption = "retour BILAN_VTB"

Autrement dit Sachant qu'au moment ou ces lignes apparaissent tu es sur la feuille LISTING tu affectes au bouton de la feuille LISTING la Macro "retour_BILAN_VTB" et tu change son libellé pour le texte "retour_BILAN_VTB"...

Or tu n'as pas de macro "retour_BILAN_VTB"... Celle qui semble correspondre s'appelle "retour_bilan".

2 Solutions s'offrent à toi.

Soit tu appelles la bonne macro :

ActiveSheet.Buttons.Add(PosG, PosH, Longueur, Hauteur).Select
ActiveSheet.Buttons.OnAction = "retour_bilan"
ActiveSheet.Buttons.Caption = "retour BILAN_VTB"

Soit tu renommes "retour_bilan" en "retour_BILAN_VTB" ici :

Sub retour_BILAN_VTB()

Sheets("BILAN_VTB").Select

End Sub

En espérant avoir pu t'aider !!

Girodo,

Merci pour celle la, mais le problème de base est toujours la, étant donné que plus loin dans le code je crée un autre bouton sur cette feuille, la macro retour_bilan devient retirer_filtre et le nom change aussi.

Et ça sur les deux feuille ou j'ai plus de deux macro associée a des boutons.

Je ne trouve pas de macro qui créé tes boutons donc j'imagine que tu les a créé une fois à la main au début et basta.

Pourquoi vouloir les redéfinir à chaque fois avec le code :

    ActiveSheet.Buttons.Add(PosG, PosH, Longueur, Hauteur).Select
    ActiveSheet.Buttons.OnAction = "afficher_annee"
    ActiveSheet.Buttons.Caption = "afficher"

GIrodo,

non le seul bouton qui est crée a la main est le bouton MAJ sur la feuille PLANNING.

Dans ma macro je supprime les feuil a chaque fois que l'on clique sur sur le bouton MAj, les boutons sont fait en automatique parce que je ne sais pas combien de bouton cela va créer ( ça depend de l'année).

sur BILAN_VTB

Le bouton du tableau 2 ( tout a gauche) est crée dans le bloc qui commence ligne 454 dans macrotab2

les boutons du tableau 3 ( tout a droite) sont crée dans le bloc qui commence ligne 616 dans macrotab3

sur LISTING

le bouton de droite est réaliser dans le bloc qui commence ligne 688 dans macrotab3

le bouton de gauche est réaliser en fin de macrotab2

mais je viens de penser que comme je suis en train de modifier les macro cela doit être environ 30 lignes en dessous voir 50 desolé

Je viens de trouver !

Au moment ou tu créés ton bouton il est sélectionné. Tu peux donc remplacer :

 ActiveSheet.Buttons.Add(PosG, PosH, Longueur, Hauteur).Select
 ActiveSheet.Buttons.OnAction = "afficher_annee"
 ActiveSheet.Buttons.Caption = "afficher"

Par :

 ActiveSheet.Buttons.Add(PosG, PosH, Longueur, Hauteur).Select
 Selection.OnAction = "afficher_annee"
 Selection.Buttons.Caption = "afficher"

Et ainsi de suite pour chaque ActiveSheet.Buttons.Add de ton code. Ça devrait résoudre ton problème car au lieu de modifier les propriétés de tous les boutons de la feuilles tu ne modifie que celles de celui qui est sélectionné => Le dernier créé :p

Girodo,

Eh bien écoute je te remercie vivement, tu m'as bien dépanné.

Je pense pas que j'aurais pu trouver sans toi, et en bonus j'ai pu optimiser légèrement mon code et économiser deux secondes pour traiter 2300 lignes.

Sur ce je vais te dire au revoir, tu as été très sympathique, c'était sympa de discuter

Je vais clore le sujet a 16h sauf si tu veut rajouter quelque chose.

Mais si tu répond pas d'ici la, bise et bonheur.

Hoooodini.

C'est bon pour moi !

Bonne continuation !

Girodo,

Rechercher des sujets similaires à "boutons realisent meme macro"