CommandButton

Résolu
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. 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
    1. 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
      1. 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.
      2. 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.
      3. (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 !
    2. 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
      1. 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 !