CommandButton

Résolu/Fermé
Markos - 16 juin 2013 à 15:36
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 23 juin 2013 à 20:33
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

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
16 juin 2013 à 18:47
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
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
23 juin 2013 à 11:49
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
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
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
(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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
Modifié par Patrice33740 le 23/06/2013 à 20:47
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