Excuter un bouton à partir d'un autre

Fermé
jeje1981 - 21 févr. 2008 à 16:51
 jeje1981 - 3 mars 2008 à 17:03
Bonjour,
Voilà j'ai des requête qui sont liées à un bouton sous excel et je souhaiteria pouvoir les lancer à parti d'un autre bouton ; en gros je souhaiterai qu'en appuyant surun bouton que celui-ci entraîne l'éxecution d'un ou d'autres boutons présents dans d'autre feuille du même fichier.

Merci d'avance pour l'aide

4 réponses

Bonjour,

Il faut que tu structure ton programme différemment.

Si une même tache doit être exécutée de manière répétitive, il faut la mettre dans une procédure qu'on peut appeler de n'importe quel endroit du programme, une procédure dite Public Sub, et la placer dans un module.

Ex:
'ce bouton se trouve sur le userform1
Private sub bouton1_click()
dim txt as string
txt="message1"
Affiche_message(txt)
end sub

'ce bouton se trouve sur le userform2
Private sub bouton1_click()
dim txt as string
txt="message2"
Affiche_message(txt)
end sub

'cette procedure se trouve dans module1
Public Sub Affiche_message(message as string)
Msgbox message
end sub

Les deux boutons font la même chose, alors on écrit la tache une seule fois.
Tu commence à comprendre? Imagine qu'a la place d'afficher un message, on programme un traitement compliqué on voit tout de suite l'intérêt. Sinon il reste le copier coller.

Salut.
0
Bonjour
Ce n'est pas une même tâche, disons que dans mon fichier j'ai 10 feuilles excel avec des tableaux de statistiques et j'ai un bouton par feuille qui me permet de mettre à jour le tableau de la feuille en consultant une base de donnée, attention ces boutons sont liés à des procédure différentes.
Et je souhaiterais à partir d'une feuille principale pouvoir appuyer sur un bouton qui lancerait les boutons des autres feuilles.
J'ai déjà mis les procédures de chacun des boutons des feuilles avec tableaux en public sub du type "Public Sub CommandButton422_Click()","Public Sub CommandButton423_Click()",... et j'aimerais maintenant à partir d'un bouton principal lancé chacune de ces public sub en un seul coup.

Merci d'avance
0
Bonjour,

En fait, le problème est le même. Les taches sont différentes, mais on doit pouvoir les exécuter depuis la feuille ou se trouve le bouton spécifique aussi bien que depuis une feuille quelconque avec un bouton "Principal".
Donc la procédure doit être "visible" de tout le programme. Déclarer cette procédure Public Sub dans une feuille ne fonctionne pas. Il faut la déclarer Public Sub dans un Module, comme une Macro normale.

Si tu veux, je peux essayer de te monter avec un exemple concret, poste une ou deux procédures CommandButtonXXX_Click(), en précisant si possile le nom de la feuille ou de la userform ou elles se trouvent (le code).

A ton Service.
0
Voici une procédure, elle est rattaché au bouton "CommandButton422" et se trouve dans la feuille "422"

Public Sub CommandButton422_Click()
Dim Flg, Parametre, TextR
Max = 1000000
TextR = ""
Flg = True
Parametre = ""
For i = 1 To Max
MyChar = Worksheets("422").Shapes("Text Box 2").TextFrame.Characters(i, 1).text
If MyChar <> "[" And MyChar <> "{" And Flg Then
TextR = TextR & MyChar
Else
Parametre = Parametre & MyChar
If MyChar = "}" Then
Flg = True
Parametre = ""
Else
If MyChar = "]" Then
Select Case Parametre
Case "[Machine]"
TextR = TextR & Worksheets("422").Range("C3").Value
Case "[DebutSem]"
TextR = TextR & Worksheets("422").Range("C4").Value
Case "[DebutAn]"
TextR = TextR & Worksheets("422").Range("C5").Value
Case "[LongPx]"
TextR = TextR & Worksheets("422").Range("C6").Value
Case "[EOF]"
i = Max
Case Else
MsgBox "attention paramètre non défini"
GoTo fin
End Select
Flg = True
Parametre = ""
Else
Flg = False
End If
End If
End If
Next
For Each TableQuery In Worksheets("422").QueryTables
TableQuery.CommandType = xlCmdSql
TableQuery.CommandText = TextR
TableQuery.BackgroundQuery = False
Range("Q14").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Next


fin:
End Sub

Merci d'avance
0
Bonsoir,

Voici ce que je te propose:

'laisser cette procédure dans le code
'de la feuille ou se trouve CommandButton422

Private Sub CommandButton422_Click()
Button422
End Sub


'Mettre cette procedure dans un module-S'il n'y en a pas tu le crèe
'Editeur VB Clic droit dans l'explorateur de projet -> inserer Module

Public Sub Button422()
'j'ai defini toutes les variables utilisées
Dim Flg As Boolean, Parametre As String, TextR As String
Dim i As Integer, MyChar As String, Max As Integer

Max = 1000000
TextR = ""
Flg = True
Parametre = ""

'Jai rajouté cette ligne pour etre sur de pointer sur la bonne feuille
Worksheets("422").Select

For i = 1 To Max
MyChar = Worksheets("422").Shapes("Text Box 2").TextFrame.Characters(i, 1).Text
If MyChar <> "[" And MyChar <> "{" And Flg Then
TextR = TextR & MyChar
Else
Parametre = Parametre & MyChar
If MyChar = "}" Then
Flg = True
Parametre = ""
Else
If MyChar = "]" Then
Select Case Parametre
Case "[Machine]"
TextR = TextR & Worksheets("422").Range("C3").Value
Case "[DebutSem]"
TextR = TextR & Worksheets("422").Range("C4").Value
Case "[DebutAn]"
TextR = TextR & Worksheets("422").Range("C5").Value
Case "[LongPx]"
TextR = TextR & Worksheets("422").Range("C6").Value
Case "[EOF]"
i = Max
Case Else
MsgBox "attention paramètre non défini"
GoTo fin
End Select
Flg = True
Parametre = ""
Else
Flg = False
End If
End If
End If
Next
For Each TableQuery In Worksheets("422").QueryTables
TableQuery.CommandType = xlCmdSql
TableQuery.CommandText = TextR
TableQuery.BackgroundQuery = False
'si une erreur survient ici mettre la référence complète de "Q14"
Range("Q14").Select
'Worksheets("422").Range("Q14").Select
Selection.QueryTable.Refresh BackgroundQuery:=False
Next
fin:
End Sub
'----------------------------

J'ai apporté quelques modifs mais ça drevrait marcher comme avant.
Maintenant dans le code de ton bouton "General" tu appele la procedure Button422
comme si tu avait pressé CommandButton422.

Private Sub ButonGeneral_Click()
Button422
'Button423
'Button424
'et ainsi de suite
End Sub

Voila, je pense que tu arriveras a t'en sortir sinon je reste à l'écoute
Bonne soirée.
0
Bonjour
Et bien tout est ok, j'ai du changer la déclaration des variables car cela ne passait pas mais sinon après tout est nickel, je te remercie beaucoup

Peut-être à une prochaine fois.

A+
0