Macro et Bouton de commande
Bonjour à tous,
J'ai un petit problème.
Il se trouve que j'ai codé la Macro ci dessous
Sub MAJ()
Application.ScreenUpdating = False
For Each WS In ActiveWorkbook.Worksheets
WS.Activate
Range("N3") = Format(Date, "dd/mm/yyyy")
If WS.Name <> "Tableau de bord" And WS.Name <> "Extraction DR PACA" And WS.Name <> "Extraction ESV TER CA" And WS.Name <> "Extraction ESV TER PA" And WS.Name <> "Extraction EV TGV PACA" And WS.Name <> "Extraction ET PACA" And WS.Name <> "Extraction TC PACA" And WS.Name <> "Extraction Rhumba" And WS.Name <> "Extraction Globale" Then
Columns("S:S").Copy
Columns("T:T").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Sheets("Tableau de Bord").Select
End If
Next WS
ActiveWorkbook.RefreshAll
End SubCelle ci me permet de recopier la mise en page de la Colonne S sur la Colonne T de l'ensemble des onglets de mon classeur. Je dois la faire fonctionner dans un bouton de commande (Contrôles ActiveX). Mais lorsque j'exécute celle ci elle ne fonctionne que sur l'onglet actif "tableau de bord" (ce qui ne devrais pas être le cas) au lieu de fonctionner sur l'ensemble des autres onglets...
Et chose étrange la macro fonctionne parfaitement sur un bouton contrôle de formulaire avec un module...
Est il possible de la faire fonctionner sur le bouton de commande ActiveX ou est ce que je dois absolument la mettre dans un module ?
Merci pour vos futurs retours et pour votre aide !
Bonjour,
Dis moi, par hasards ... le code est dans une feuille ou un Module ??
Je suggère le module. Le bouton, par défaut, à son code dans la feuille, il ne reste qu'à faire appel à la macro dans le module.
Soit :
Private Sub CommandButton1_Click()
MAJ
End SubOu encore :
Private Sub CommandButton1_Click()
Module1.MAJ
End Sub... Si le module se nomme Module1 bien sûr.
ric
Bonjour the, bonjour le forum,
La règle d'or en VBA c'est d'éviter autant que tu le peux les Activate/Select inutiles. Quand le code est lancé depuis un bouton situé dans un onglet et que tu veux travailler sur un autre onglet, il faut toujours spécifier son nom dans le code. Même si l'autre onglet en question est sélectionné, car l'onglet actif reste celui du bouton qui lance la macro.
Ton code modifié :
Private Sub CommandButton1_Click()
Dim WS As Worksheet
Application.ScreenUpdating = False
For Each WS In ActiveWorkbook.Worksheets
WS.Range("N3") = Format(Date, "dd/mm/yyyy")
If Not WS.Name = Me.Name Then
Me.Columns("S:S").Copy
WS.Columns("T:T").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
Next WS
Sheets("Tableau de Bord").Select
ActiveWorkbook.RefreshAll
End SubRic:
Le code et dans une feuille. Je ne connaissais pas le code pour faire appel à une macro qui se trouve dans un module ^.^ Je note et le garde bien au chaud merci bcp à toi !
ThauThème:
Je sais qu'il faut éviter les Activate/Select le plus que possible !
En tout cas merci d'avoir corrigé mon code !
Merci à tous les deux ! ça fonctionne nikel et j'ai appris des choses ! Elle est pas la vie !