Excuter un bouton à partir d'un autre

jeje1981 -  
 jeje1981 -
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
Configuration: Windows XP
Internet Explorer 7.0

4 réponses

  1. amigo
     
    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
  2. jeje1981
     
    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
  3. amigo
     
    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
    1. jeje1981
       
      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
  4. amigo
     
    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
    1. jeje1981
       
      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