Activer un bouton avec un autre bouton
Bonjour,
Je vous explique mon problème: J'ai un bouton sur ma première feuille et un autre sur ma cinquième feuille. Le bouton de la cinquième feuille a un code vba et le premier lui n'a aucun code. Ce que je souhaiterai faire c'est d'activer le bouton de la cinquième feuille en cliquant sur le bouton de la première feuille.
Merci d'avance
Bonjour,
Il serait bien de fournir les détails !
Si ActiveX, le code est dans la proc. évènement Click du bouton, sur le module de feuille : en faire une macro autonome dans un module Standard (et appeler cette macro dans la proc. du bouton.
Appeler la même macro dans la proc. évènement du nouveau bouton.
Si bouton de formulaire, la macro est dans un module Standard et affectée au bouton. Affecter la même macro à l'autre bouton.
Cordialement.
Merci pour la réponse, si j'ai bien compris ce que tu m'as dit j'ai pris le code du bouton, je l'ai mis dans une macro et j'ai appelé cette macro avec l'autre bouton. Mais ça ne fonctionne pas, les fichiers à importer ne se placent pas au bon endroit.
Voici le code du bouton :
Private Sub CommandButton21_Click()
' Insérer les donées du fichier SORTIE
Workbooks("TEST1.xls").Worksheets("FINAL").Range("A2:D5000").ClearContents
Workbooks.Open ("D:\Users\Remy.FINGONET\Desktop\SUIVI EQUIPEMENT\SORTIE.xls")
Windows("SORTIE.xls").Activate
Application.Goto Workbooks("SORTIE.xls").Sheets("Sheet1").Range("A3:D5000")
Selection.Copy
Windows("TEST1.xls").Activate
Application.Goto Workbooks("TEST1.xls").Sheets("FINAL").Range("A2")
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("SORTIE.xls").Close False
' Insérer les données du fichier ETAT
Workbooks("TEST1.xls").Worksheets("ETATS").Cells.ClearContents
Workbooks.Open ("D:\Users\Remy.FINGONET\Desktop\SUIVI EQUIPEMENT\ETAT.xls")
Windows("ETAT.xls").Activate
Application.Goto Workbooks("ETAT.xls").Sheets("Sheet1").Range("A:J")
Selection.Copy
Windows("TEST1.xls").Activate
Application.Goto Workbooks("TEST1.xls").Sheets("ETATS").Range("A1")
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("ETAT.xls").Close False
' Insérer les données du fichier INTERVENANT
Workbooks("TEST1.xls").Worksheets("INTERVENANTS").Cells.ClearContents
Workbooks.Open ("D:\Users\Remy.FINGONET\Desktop\SUIVI EQUIPEMENT\INTERVENANT.xls")
Windows("INTERVENANT.xls").Activate
Application.Goto Workbooks("INTERVENANT.xls").Sheets("Sheet1").Range("A:J")
Selection.Copy
Windows("TEST1.xls").Activate
Application.Goto Workbooks("TEST1.xls").Sheets("INTERVENANTS").Range("A1")
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("INTERVENANT.xls").Close False
' Insérer les données du fichier METIER
Workbooks("TEST1.xls").Worksheets("METIERS").Cells.ClearContents
Workbooks.Open ("D:\Users\Remy.FINGONET\Desktop\SUIVI EQUIPEMENT\METIER.xls")
Windows("METIER.xls").Activate
Application.Goto Workbooks("METIER.xls").Sheets("Sheet1").Range("A:J")
Selection.Copy
Windows("TEST1.xls").Activate
Application.Goto Workbooks("TEST1.xls").Sheets("METIERS").Range("A1")
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("METIER.xls").Close False
' Insérer les données du fichier MOUVEMENT
Workbooks.Open ("D:\Users\Remy.FINGONET\Desktop\SUIVI EQUIPEMENT\MOUVEMENT.xls")
Windows("MOUVEMENT.xls").Activate
Application.Goto Workbooks("MOUVEMENT.xls").Sheets("Sheet1").Range("A3:D5000")
Selection.Copy
Windows("TEST1.xls").Activate
Dim n As Long
n = Cells(Rows.Count, 1).End(xlUp).Row
Cells(n - 2, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Workbooks("MOUVEMENT.xls").Close False
' Renseigner le Détenteur ou le lieu de stockage
For ligne = 2 To ActiveSheet().UsedRange.Rows.Count
If Range("B" & ligne) = "Mouvement" Then
Range("F" & ligne) = "Magasin"
Else
Range("F" & ligne).FormulaR1C1 = _
"=INDEX(INTERVENANTS!C[-5],MATCH(R[0]C[-4],INTERVENANTS!C[-5],0)+2)"
End If
Next
' Renseigner le Détenteur ou le lieu de stockage
For ligne = 2 To ActiveSheet().UsedRange.Rows.Count
If Range("B" & ligne) = "Mouvement" Then
Range("G" & ligne) = ""
Else
Range("G" & ligne).FormulaR1C1 = _
"=INDEX(METIERS!C[-2],MATCH(RC[-5],METIERS!C[-6],0))"
End If
Next
' Mettre la première colonne en format date
Columns("A:A").NumberFormat = "dd-mm-yyyy hh:mm:ss"
' Trier les données
Call Trier
' Garder le dernier mouvement
Dim i, k
With Range("A2").CurrentRegion
.Sort Key1:=.Range("D2"), Key2:=.Range("A2"), Header:=xlGuess, Orientation:=xlTopToBottom
i = .Rows.Count
Application.ScreenUpdating = False
For k = 2 To i - 1
Do While .Cells(k, 4) = .Cells(k + 1, 4)
Rows(k).Delete
If .Cells(k, 4) = "" Then Exit For
Loop
Next
End With
' Aller directement à la dernière feuille
Application.Goto Workbooks("TEST1.xls").Sheets("FINAL").Range("A1")
' Définir la zone d'impression
ligne = Range("D5000").End(xlUp).Row
ActiveSheet.PageSetup.PrintArea = Range("B1", Cells(ligne, 7)).Address
End Sub
Re,
Inutile de me balancer du code hors des balises Code... c'est le minimum. Je ne lis pas !
Si le code n'est pas indenté, je ne lis pas non plus, spécialement aujourd'hui, pas de temps à perdre !
Et autant que possible un code propre, dépourvu de Select, Activate et autres joyeusetés inutiles, pas le temps de m'énerver à faire du ménage...
Cordialement.
Excuse moi, je n'ai que des bases sur vba, l'organisation c'est pas encore mon truc. J'ai essayé d'organiser un peu tous ça et j'espère que ça sera plus clair.
Private Sub CommandButton21_Click()
' Insérer les donées du fichier SORTIE
Workbooks("TEST1.xls").Worksheets("FINAL").Range("A2:D5000").ClearContents
Workbooks.Open ("D:\Users\Remy.FINGONET\Desktop\SUIVI EQUIPEMENT\SORTIE.xls")
Windows("SORTIE.xls").Activate
Application.Goto Workbooks("SORTIE.xls").Sheets("Sheet1").Range("A3:D5000")
Selection.Copy
Windows("TEST1.xls").Activate
Application.Goto Workbooks("TEST1.xls").Sheets("FINAL").Range("A2")
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("SORTIE.xls").Close False
' Insérer les données du fichier ETAT
Workbooks("TEST1.xls").Worksheets("ETATS").Cells.ClearContents
Workbooks.Open ("D:\Users\Remy.FINGONET\Desktop\SUIVI EQUIPEMENT\ETAT.xls")
Windows("ETAT.xls").Activate
Application.Goto Workbooks("ETAT.xls").Sheets("Sheet1").Range("A:J")
Selection.Copy
Windows("TEST1.xls").Activate
Application.Goto Workbooks("TEST1.xls").Sheets("ETATS").Range("A1")
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("ETAT.xls").Close False
' Insérer les données du fichier INTERVENANT
Workbooks("TEST1.xls").Worksheets("INTERVENANTS").Cells.ClearContents
Workbooks.Open ("D:\Users\Remy.FINGONET\Desktop\SUIVI EQUIPEMENT\INTERVENANT.xls")
Windows("INTERVENANT.xls").Activate
Application.Goto Workbooks("INTERVENANT.xls").Sheets("Sheet1").Range("A:J")
Selection.Copy
Windows("TEST1.xls").Activate
Application.Goto Workbooks("TEST1.xls").Sheets("INTERVENANTS").Range("A1")
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("INTERVENANT.xls").Close False
' Insérer les données du fichier METIER
Workbooks("TEST1.xls").Worksheets("METIERS").Cells.ClearContents
Workbooks.Open ("D:\Users\Remy.FINGONET\Desktop\SUIVI EQUIPEMENT\METIER.xls")
Windows("METIER.xls").Activate
Application.Goto Workbooks("METIER.xls").Sheets("Sheet1").Range("A:J")
Selection.Copy
Windows("TEST1.xls").Activate
Application.Goto Workbooks("TEST1.xls").Sheets("METIERS").Range("A1")
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("METIER.xls").Close False
' Insérer les données du fichier MOUVEMENT
Workbooks.Open ("D:\Users\Remy.FINGONET\Desktop\SUIVI EQUIPEMENT\MOUVEMENT.xls")
Windows("MOUVEMENT.xls").Activate
Application.Goto Workbooks("MOUVEMENT.xls").Sheets("Sheet1").Range("A3:D5000")
Selection.Copy
Windows("TEST1.xls").Activate
Dim n As Long
n = Cells(Rows.Count, 1).End(xlUp).Row
Cells(n - 2, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Workbooks("MOUVEMENT.xls").Close False
' Renseigner le Détenteur ou le lieu de stockage
For ligne = 2 To ActiveSheet().UsedRange.Rows.Count
If Range("B" & ligne) = "Mouvement" Then
Range("F" & ligne) = "Magasin"
Else
Range("F" & ligne).FormulaR1C1 = _
"=INDEX(INTERVENANTS!C[-5],MATCH(R[0]C[-4],INTERVENANTS!C[-5],0)+2)"
End If
Next
' Renseigner le Détenteur ou le lieu de stockage
For ligne = 2 To ActiveSheet().UsedRange.Rows.Count
If Range("B" & ligne) = "Mouvement" Then
Range("G" & ligne) = ""
Else
Range("G" & ligne).FormulaR1C1 = _
"=INDEX(METIERS!C[-2],MATCH(RC[-5],METIERS!C[-6],0))"
End If
Next
' Mettre la première colonne en format date
Columns("A:A").NumberFormat = "dd-mm-yyyy hh:mm:ss"
' Trier les données
Call Trier
' Garder le dernier mouvement
Dim i, k
With Range("A2").CurrentRegion
.Sort Key1:=.Range("D2"), Key2:=.Range("A2"), Header:=xlGuess, Orientation:=xlTopToBottom
i = .Rows.Count
Application.ScreenUpdating = False
For k = 2 To i - 1
Do While .Cells(k, 4) = .Cells(k + 1, 4)
Rows(k).Delete
If .Cells(k, 4) = "" Then Exit For
Loop
Next
End With
' Aller directement à la dernière feuille
Application.Goto Workbooks("TEST1.xls").Sheets("FINAL").Range("A1")
' Définir la zone d'impression
ligne = Range("D5000").End(xlUp).Row
ActiveSheet.PageSetup.PrintArea = Range("B1", Cells(ligne, 7)).Address
End Sub
Là je vois une macro sous déclaration de proc. Click du bouton21 (21 déjà ! fichtre !
La situation est donc en l'état initial. Je ne vois pas que tu aies déplacé du code pour en faire une procédure appelée par les 2 boutons (l'autre n'apparaît même pas).
NB- Dans les bases de la programmation VBA, il y a la façon d'écrire le code, soit l'indenter dans les règles, de façon qu'il soit particulièrement lisible pour ceux qui doivent travailler sur ce code, la distinction des différents types de procédure et leur portée selon les modules dans lesquels elles sont, le positionnement des déclarations niveau module toujours en tête de module, le positionnement des déclarations dans les procédures toujours en tête de procédure avant tout code exécutable, la déclaration de toutes les variables, autant que possible typées, etc. et l'abandon du recours à l'enregistreur pour éliminer toutes les cochonneries qu'il ne manque jamais d'insérer dans le code...
Merci pour les conseils.
Maintenant le problème, c'est que je souhaite activer le bouton de la 5ème feuille avec celui de la 1ère ou alors le supprimer et créer une macro s'activant avec un bouton sur la 1ère feuille. J'ai essayé de créer une macro avec le code actuel mais le problème c'est que lorsque je lance la macro, celle-ci essaye de réaliser les actions sur la 1ère feuille eu lieu de la 5ème. Y a t'il un moyen de déclencher une macro sur une autre feuille?
Merci d'avance
La macro fait ce que tu lui demandes !