Microsoft 365 Remplacer liste déroulante par un bouton de switch

CThierry

XLDnaute Nouveau
Bonjour,
Novice sur excel je cherche à remplacer un menu déroulant, dans un tableau (tache/date) qui me permet de choisir entre 3 valeurs (todo, Fait, Annulé) par un bouton sur chaque cellule concernée qui permettrait de switcher d'une valeur à l'autre. Le menu déroulant n'étant pas très pratique dans mon cas (tablette tactile)
Merci de votre aide.
 

ChTi160

XLDnaute Barbatruc
Bonjour CThierry
ce que j'ai mis pour trois "Boutons" pour les Lignes 2,3,4
VB:
Private Sub CommandButton1_Click()
Cells(2, 2) = IIf(Cells(2, 2) = "todo", "Fait", IIf(Cells(2, 2) = "Fait", "Annulé", "todo"))
End Sub
Private Sub CommandButton2_Click()
Cells(3, 2) = IIf(Cells(3, 2) = "todo", "Fait", IIf(Cells(3, 2) = "Fait", "Annulé", "todo"))
End Sub
Private Sub CommandButton3_Click()
Cells(4, 2) = IIf(Cells(4, 2) = "todo", "Fait", IIf(Cells(4, 2) = "Fait", "Annulé", "todo"))
End Sub
jean marie
 

patricktoulon

XLDnaute Barbatruc
re
oulahh ChTi160 tu es allé ou là ;) 🤣

1 seul bouton fait les 3
VB:
Private Sub CommandButton1_Click()
Liste = Array("Todo", "Fait", "Annulé")
x = Application.IfError(Application.Match([b3], Liste, 0), 0)
If x = 3 Then x = 0
[b3] = Liste(x)
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
sinon tu peux faire un select case ou (switch qui en est finalement l’écriture raccourci )
exemple
VB:
Private Sub CommandButton1_Click()
ActiveCell = Switch(ActiveCell = "", "Todo", ActiveCell = "Todo", "Fait", ActiveCell = "Fait", "Annulé", ActiveCell = "Annulé", "Todo")
End Sub
 

ChTi160

XLDnaute Barbatruc
Re
Tu n'as pas bien regardé Lol
il y a trois Boutons pour trois Cellules différentes !
Effectivement je ne sais pas combien de Cellules sont concernées
j'ai Juste mis pour les Trois indiquées Lol
j'aurais pu mettre:
Pour un seul Bouton donc Ligne :
VB:
Private Sub CommandButton1_Click()
Cells(2, 2) = IIf(Cells(2, 2) = "todo", "Fait", IIf(Cells(2, 2) = "Fait", "Annulé", "todo"))
End Sub
j'ai trouvé ca simple est Clair Lol , j'aime le "IIF"
jean marie
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
un truc du genre :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim CellCible As Range
Cancel = True
If Target.Column <> 1 Then Exit Sub
Set CellCible = Target.Offset(0, 1)
CellCible = IIf(CellCible = "todo", "Fait", IIf(CellCible = "Fait", "Annulé", "todo"))
End Sub
après je ne sais pas si c'est la Cellule (Target) DoubleClicker qu'il faut modifier Lol
sinon
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
If Target.Column <> 1 Then Exit Sub
Target = IIf(Target = "todo", "Fait", IIf(Target = "Fait", "Annulé", "todo"))
End Sub
jean marie
 

CThierry

XLDnaute Nouveau
Salut à tous,
C'est là qu'on dit trop d'infos tuent l'info ?
Vraiment merci à tous pour cette réactivité et toutes ces propositions.
Je n'ai pas vraiment réussi mais, soit parce que je ne suis vraiment pas doué ! Soit que ma demande n'était pas claire !!! Ou bien les deux :).
Le switch fonctionne mais compliqué à mettre en place dans mon tableau.
Bonjour
un truc dans ce genre peut être

A la base j'ai un menu déroulant qui va chercher les données dans mon onglet état. Donc l'idée c'était de cliquer sur la cellule (ou double cliquer) et que ça bascule la cellule elle même sur l'une des 3 valeurs... Pas sûr d'être plus clair...
 

Pièces jointes

  • Production_Hebdo2.xlsm
    45.8 KB · Affichages: 9

ChTi160

XLDnaute Barbatruc
Re
j'ai modifié pour adapter la plage de prise en compte du Double Click en fonction des éléments de la Colonne "A"
En modifiant ainsi la macro de la feuille !
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim DerLgn As Long
Cancel = True
DerLgn = Cells(Rows.Count, 1).End(xlUp).Row 'on determine la dernière ligne non vide de la colonne "A"
    If Not Intersect(Target, Range(Cells(2, 2), Cells(DerLgn, 9))) Is Nothing Then 'on vérifie que le double Click est bien dans la bonne Plage
    Target = IIf(Target = "NON", "FAIT", IIf(Target = "FAIT", "OK", IIf(Target = "OK", "*", "NON")))
    End If
End Sub
jean marie
 

Discussions similaires

Réponses
8
Affichages
166
Réponses
1
Affichages
436

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 207
Membres
103 157
dernier inscrit
youma