Double-clic retourne l'élément suivant d'une liste

Bonjour à tous,

Voici mon problème dont je n'arrive pas à trouver la solution après avoir longtemps cherché sur les différents forum.

Je souhaite créer une macro qui, lors d'un double-clic sur une cellule, y indique un élément contenu dans une liste, et passe à l'élément suivant lors de chaque nouveau double-clic.

Par exemple, je crée une liste (soit une liste nommée, soit un range, soit...) qui contient les éléments suivants "pomme, poire, pêche, cerise"

Je voudrais que lorsque je double-clic sur une cellule, celle-ci se remplisse avec le premier élément de la liste, soit "pomme". Je voudrais que lorsque je double-clic à nouveau sur cette cellule, elle efface "pomme" et indique "poire" etc etc, et en boucle pour revenir à "pomme" après double-clic sur "cerise".

Voici mes codes qui fonctionnent avec "Case", j'y arrive aussi avec "if else", mais je voudrai un code plus simple et plus propre

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, [A1]) Is Nothing Then
Select Case [A1].Value
    Case "pomme":          Target = "poire"
    Case "poire":          Target = "pêche"
    Case "pêche":          Target = "cerise"
    Case Else:             Target = "pomme"
End Select
Cancel = True
End If

Merci pour votre aide.

Bonsoir

Par exemple, je crée une liste (soit une liste nommée, soit un range, soit...) qui contient les éléments suivants "pomme, poire, pêche, cerise"

la liste nommée se trouverait où et porterait quel nom ?

NB : on peut mettre les noms utilisés directement dans le code aussi

Bonsoir,

La liste nommée peut être définie via le gestionnaire de nom ou meme dans un le code vba, chaque élément séparé par une virgule par exemple. Liste=(pomme,poire,pêche,cerise) ou quelque chose du genre

bonjour le fil,

les options sont un string avec des virgules comme séparateur

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     With Target
          If Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub      'toutes ces cellules

          sp = Split("pomme,poire,pêche,cerise", ",")     'séparateur = ,
          r = Application.Match(.Value, sp, 0)     'cherchez position (base 0, donc premier element a index 0 !!!)
          If Not IsNumeric(r) Then r = 0     'pas trouvé = position 0
          r = r Mod (UBound(sp) + 1)   'modus pour revenir au premier (=élément 0)
          .Value = sp(r)     'coller la valeur
     End With
     Cancel = True
End Sub

Incroyable, c'est parfait !

Merci BsAlv !

Bonjour

Travail pour rien mais comme j''avais préparé le code hier...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim fruit()
Dim i As Byte

If Not Application.Intersect(Target, [A1]) Is Nothing Then
    fruit = Array("Pomme", "Poire", "Pêche", "Cerise") 'définir tableau reprenant les valeurs
    For i = 0 To 3 'boucle sur les valeurs
        If UCase(fruit(i)) = UCase(Target.Value) Then
            If i <> 3 Then 'correspond à valeur Cerise
                Target = fruit(i + 1) 'ajout valeur suivant
            Else: Target = fruit(0) 'on revient à valeur Pomme
            End If
            Cancel = True
            Exit Sub
        End If
    Next i
End If
End Sub

A voir si intérêt et désolé pour le retour tardif
Crdlt

Rechercher des sujets similaires à "double clic retourne element suivant liste"