A voir également:
- Excuter un bouton à partir d'un autre
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Comment faire une recherche à partir d'une photo - Guide
- Comment débloquer un bouton enfoncé - Forum Samsung
- Combien y a-t-il de bateaux dans la zone de 475 pixels de large et 1000 pixels de haut à partir du coin supérieur gauche de cette image ? - Forum Photoshop
- Combien y a-t-il de bateaux dans la zone de 1500 pixels de large et 500 pixels de haut à partir du coin supérieur gauche de cette image ? - Forum Graphisme
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.
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.
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
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
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.
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.
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
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
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.
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.