Question liste déroulante

Bonjour à tous !

J'ai une question qui peut être un peu bête, seulement je ne trouve pas la solution. Je m'explique :

J'ai insérer dans mon tableur une liste déroulante par le biais de l'onglet Développeur (contrôle de formulaire).

Suite à ça j'ai alimenté ma liste déroulante avec une plage de données et j'ai lié une cellule (bien que je ne comprenne pas vraiment l'intérêt de la chose).

Maintenant j'aimerais créer un code qui agit de manières différentes selon le choix sélectionné dans la liste. Mais là ... Je ne sais pas comment coder ce genre de chose

Pour être un peu plus explicite :

Ma liste contient 5 données :

1. Histogramme

2. Nuage de points

3. Graph. secteur

4. Graph. radar

5. [VIDE]

Lorsque l'utilisateur sélectionne "Histogramme", un graph de type histogramme apparaît, lorsqu'il sélectionne "Nuage de points" un graph de type nuage de points apparaît, etc ...

Mon problème est l'écriture de la synthaxe :

Si "Histogramme" est sélectionné Alors

Fin Si

J'ai écris quelque chose comme ça pour essayer la synthaxe :

Sub Zonecombinée()

If Zonecombinée21 = "Histogramme" Then
MsgBox ("ça fonctionne !")
End If

End Sub

J'ai beau sélectionner tout et n'importe quoi, rien ne se passe. Et lorsque j'écris :

Sub Zonecombinée()

If Zonecombinée21 = Histogramme Then
MsgBox ("ça fonctionne !")
End If

End Sub

(En retirant les "" qui encadrent Histogramme)

Là peut importe le choix que je fais, mon MsgBox surgit ...

Je me gratte la tête depuis un bon bout de temps là dessus, si quelqu'un a la solution, je lui en serait très reconnaissant !

Merci !

Vbrod

Bonsoir,

dans le deuxième test il est normal d'avoir le message qui s'affiche :

Sub Zonecombinée()
If Zonecombinée21 = Histogramme Then
MsgBox ("ça fonctionne !")
End If
End Sub

Je m'explique :

quand vous écrivez : Zonecombinée21 = Histogramme

vous testez une égalité entre deux variables, ces même variables n'étant pas définies dans la procédure, VBA les crée lors du test, et il faut savoir qu'à la création du variable celle-ci vaut "vide" ou "false" ou "nothing" en clair elle vaut rien.

Hors lors de votre test les deux variables valent rien donc rien est égal à rien alors on affiche les message "ça fonctionne !"

Dans le premier test c'est un peu différent, vous faite le test de la variable Zonecombinée21 (qui vaut rien pour les même raisons que ci-dessus) avec une valeur alphanumérique qui vaut "Histogramme", donc rien n'est pas égal à Histogramme donc le message ne s'affiche pas... CQFD ?

j'ai lié une cellule (bien que je ne comprenne pas vraiment l'intérêt de la chose).

En fait dans la cellule liée il y aura la position dans la liste du choix effectué, ce peut être utile pour des formules devant faire référence à la valeur du choix...

Zonecombinée21 n'est pas le "bon appel" d'objet à faire pour faire référence à une liste de choix, essayez avec

if Activesheet.Shapes("Zonecombinée21").value = "Histogramme" then

Pas essayé...

@ bientôt

LouReeD

Bonjour LouReeD,

Tout d'abord merci pour votre réponse. Effectivement ce que j'avais écris était un peu absurde

J'ai essayé votre code, malheuresement ce dernier me détecte une erreur : "Propriété ou méthode non gérée par cet objet"

Voilà mon code, l'erreur est surlignée :

Private Sub liste()
Dim x As String

x = Sheets("START").Shapes("Zone combinée 21").Values
If x = "Histogramme" Then
MsgBox ("ça fonctionne !")
End If
End Sub

J'ai également essayé sans la variable "x" comme dans votre réponse, mais l'erreur est toujours présente

Un vrai casse-tête !

Vbrod

Bonsoir,

première chose c'est value sans "s"

Afin de savoir s'il y a une erreur d'orthographe dans votre code, il vous suffit de le "taper" en minuscule, et lors d'un changement de ligne avec la touche entrée pour écrire la suite, VBA transformera les instructions "connues" du code avec les majuscules et ceci automatiquement et le bout de code taper en minuscule :

x = sheets("START").shapes("Zone combinée 21").values

se serait transformé en :

x = Sheets("START").Shapes("Zone combinée 21").values

et vous auriez remarquez que values ne se transforme pas en majuscule...

Sinon tout simplement c'est que je ne vous ai pas donné le bon code....

Avez vous un fichier ?

Quelque fois (SOUVENT) c'est plus simple pour aider...

Ensuite si votre liste déroulante s'appelle "Zone combinée 21"avec des espaces alors c'est bon mais vous ne mettiez pas d'espace dans son nom sur les bouts de code des posts précédent, alors

D'où l'intérêt du fichier joint, on se rend compte vite des PB s'il y en a...

@ bientôt

LouReeD

Bonjour LouReeD,

J'ai vraiment des soucis avec les différents orthographes du langage VBA ... Des fois Values porte un "S", d'autres fois non

En tout cas merci pour votre conseil, je l'appliquerais

Bon, j'ai corrigé cette faute mais l'erreur est toujours présente.

Mon fichier étant un peu trop volumineux je ne pouvais pas vous le transférer. Je l'ai donc allégé et compressé pour vous le transmettre.

Encore merci pour votre aide,

Vbrod

Bonsoir,

en fait c'est un peu plus facile avec un support...

Ci dessous le code :

Private Sub liste()
    Dim x As String
    x = Sheets("START").DropDowns("Zone combinée 21").List(Sheets("START").DropDowns("Zone combinée 21").ListIndex)
    If x = "Histogramme" Then
        MsgBox ("ça fonctionne !")
    End If
End Sub

Sheets("START").DropDowns("Zone combinée 21").ListIndex : permet de connaître la position du choix dans la liste de choix, si le choix est le premier de la liste, alors =0 si c'est le troisième alors = 2 etc...

Sheets("START").DropDowns("Zone combinée 21").List(y) : donne la valeur "alphanumérique" du choix, si y=0 alors c'est le premier choix de la liste soit [VIDE] ; si y=3 alors c'est Graph. Radar

@ bientôt

LouReeD

Rechercher des sujets similaires à "question liste deroulante"