CommandButton

Résolu
Markos -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à toutes et à tous,

Je souhaite créer un bouton de commande ActiveX qui afficherait tour à tour des messages différents dans une cellule, toujours la même (le message serait remplacé à chaque clic sur le bouton), puis, après le dernier message, un dernier clic ferait disparaître le bouton.

Merci d'avance pour votre aide,

Cordialement,

3 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Bonjour,

    Par exemple :
    Option Explicit
    Private Sub Worksheet_Activate()
      Me.CommandButton1.Visible = Visible
    End Sub
    Private Sub CommandButton1_Click()
    Const m1 As String = "Message 1"
    Const m2 As String = "Message 2"
    Const m3 As String = "Message 3"
    Const m4 As String = "Message 4"
    Const m5 As String = "Message 5"
    Const m6 As String = "Message 6"
    Dim cel As Range
      Set cel = Range("B2")
      If cel.Value = m1 Then
        cel.Value = m2
      ElseIf cel.Value = m2 Then
        cel.Value = m3
      ElseIf cel.Value = m3 Then
        cel.Value = m4
      ElseIf cel.Value = m4 Then
        cel.Value = m5
      ElseIf cel.Value = m5 Then
        cel.Value = m6
      ElseIf cel.Value = m6 Then
        cel.Value = "Terminé"
      Else
        cel.Value = m1
      End If
      If cel.Value = "Terminé" Then Me.CommandButton1.Visible = False
    End Sub
    0
    1. Markos
       
      Merci pour votre aide. Cependant, j'ai toujours un message "Bloc If sans End If", alors que l'instruction figure bien. Je pense avoir bien recopié votre modèle. Il y a bien une instruction "End If". Pourquoi VBA ne la "voit" pas ?
      Merci encore pour le temps et la patience que vous consacrez à mes questions.

      A bientôt !
      0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Bonjour,

    Je viens de vérifier, ce code fonctionne bien :
    1 - Ouvres un nouveau classeur (vierge);
    2 - Insère un bouton de commande sur la feuille1 : Developpeur / Inserer / Controle ActiveX / Bouton de commande
    3 - Copies le code ci-dessus dans le module de la feuille1 : Copier / clic droit sur l'onglet de la feuille 1 / Visualiser le code / Coller
    4 - Reviens sur la feuille 1 : Alt+F11
    5 - Décoche le mode création, enregistres le fichier et essayes-le
    0
    1. Markos
       
      Merci, Patrice.
      Cependant, il faudrait que, le processus terminé, rien n'apparaisse plus (ici, on affiche le message "Terminé") ; je rappelle mon idée de départ :
      L'idée est la suivante : je suis intérimaire. Chaque fin de semaine, je dois remplir mon relevé d'heures hebdomadaire, le faire signer par mon responsable, puis faire une photocopie, et enfin le faxer à l'agence d'intérim. J'ai pensé d'abord à une fonction simple sous excel, dans n'importe quelle cellule d'un fichier que j'utilise tous les jours, me rappelant qu'on est vendredi, et que je dois penser à la feuille d'heures. Puis, j'ai voulu créer un contrôle, comme un bouton de commande, qui affiche un message qui me rappelle où j'en suis : 1) préparer la feuille 2) faire signer par la responsable 3) faxer....
      Le bouton (ou tout autre contrôle), ou plutôt la cellule reliée au contrôle, ferait s'afficher le message complémentaire correspondant : par exemple, "faxer la feuille".

      En m'inspirant de votre code, j'ai écrit le code suivant, qui comporte une erreur, puisqu'il ne fonctionne pas, mais je ne vois pas laquelle. Merci de m'aider à y voir plus clair :

      Option Explicit
      Private Sub Workbook_Open()
      Feuil1.CommandButton1.Visible = False
      If (Weekday(Date) = 1) Then
      MsgBox "Aujourd'hui c'est vendredi, pense au relevé d'heures !", vbInformation
      Feuil1.CommandButton1.Visible = True
      End If
      End Sub
      Private Sub CommandButton1_Click()
      Const m1 As String = "Préparer la feuille d'heures"
      Const m2 As String = "Remettre la feuille d'heures au responsable"
      Const m3 As String = "Récupérer la feuille d'heures"
      Const m4 As String = "Faire 2 photocopies"
      Const m5 As String = "Faxer la feuille d'heures"
      Const m6 As String = "Récupérer l'accusé de réception du fax"
      Dim cel As Range
      Set cel = Range("G2")
      If cel.Value = m1 Then
      cel.Value = m2
      ElseIf cel.Value = m2 Then
      cel.Value = m3
      ElseIf cel.Value = m3 Then
      cel.Value = m4
      ElseIf cel.Value = m4 Then
      cel.Value = m5
      ElseIf cel.Value = m5 Then
      cel.Value = m6
      ElseIf cel.Value = m6 Then
      cel.Value = "Terminé"
      Else
      cel.Value = m1
      End If
      If cel.Value = "Terminé" Then
      Feuil1.CommandButton1.Visible = False
      End Sub

      Qu'est-ce qui cloche, là-dedans ? En outre, il faudrait que, le processus terminé, rien n'apparaisse plus (ici, on affiche le message "Terminé")...

      Merci encore d'avance pour votre précieuse collaboration.
      0
    2. Markos
       
      Pardon : dans ma précipitation, j'ai recopié une erreur supplémentaire. Ce n'est pas ça qui bloque, naturellement : il faut lire "If (Weekday(Date) = 6" (qui correspond bien à Vendredi) et non "If (Weekday(Date) = 1". J'ai fait cette modification pour pouvoir tester ce code aujourd'hui dimanche, bien sûr.
      Merci encore de votre aide.
      0
    3. Markos
       
      (re-)Bonjour, Patrice, et bonjour à tous !

      J'ai trouvé ! Eurêka !

      Il faut une Sub rattachée à ThisWorkbook :

      Option Explicit
      Private Sub Workbook_Open()
      Feuil1.CommandButton1.Visible = False
      If Weekday(Date) = 6 Then
      MsgBox "Aujourd'hui c'est vendredi, pense au relevé d'heures !", vbInformation
        Feuil1.CommandButton1.Visible = True
        Range("B2").Value = "Préparer le relevé d'heures"
      End If
      End Sub


      ...Et puis une autre rattachée à Feuil1 :

      Private Sub CommandButton1_Click()
      Const m1 As String = "Préparer le relevé d'heures"
      Const m2 As String = "Remettre le relevé au responsable"
      Const m3 As String = "Faire 2 photocopies, et en remettre une au responsable"
      Const m4 As String = "Faxer le relevé d'heures"
      Const m5 As String = "Récupérer l'accusé de réception du fax"
      Dim cel As Range
        Set cel = Range("B2")
        Select Case cel.Value
        Case m1
          cel.Value = m2
        Case m2
          cel.Value = m3
        Case m3
          cel.Value = m4
        Case m4
          cel.Value = m5
        Case m5
          cel.Clear
        Case Else
          cel.Value = m1
        End Select
        If cel.Value = "" Then Feuil1.CommandButton1.Visible = False
      End Sub


      CQFD ! Merci encore pour votre collaboration !

      A bientôt !
      0
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Bonjour,

    Cependant, il faudrait que, le processus terminé, rien n'apparaisse plus (ici, on affiche le message "Terminé")
    Il suffit de remplacer "Terminé" par "" c'est-à-dire :
    ...
    ElseIf cel.Value = m6 Then
    cel.Value = ""
    Else
    cel.Value = m1
    End If
    If cel.Value = "" Then
    Feuil1.CommandButton1.Visible = False
    End If
    End Sub 
    et d'ajouter le End If manquant !
    Cordialement
    Patrice
    0