Lancement d'une macro suite à une selection NON connue dans une liste déroulante

Malka

XLDnaute Occasionnel
Salut à toutes et à tous :)

Je bloque encore une fois sur petit probleme et j'ai besoin de votre générosité et vos connaissances. :p

Dans une feuille, j'ai une colonne ("BA:BA") avec des listes deroulantes qui proposent plusieurs choix.
Dès que le choix sur la liste a été fait sur une cellule de cette fameuse colonne, cela lance une macro en rapport avec la selection qui a été faite sur la liste.

Mon code utilisé est celui-ci :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False

If Not Intersect(Target, Range("BA:BA")) Is Nothing Then
Select Case Target
Case "Linéaire": DistribLineaire
Case "Objet Réél 2009": DistribReel2009
Case "Objet Réél 2010": DistribReel2010

End Select
End If
Application.ScreenUpdating = True

End Sub

Ma question est : Est qu'il serait possible de ne pas indiquer en dur dans le code VBA l'intitulé des choix de ma liste deroulante pour que macro soit lancée mais qu'elle se refere à une position dans ma plage nommée qui alimente la liste déroulante ? (cad en orange sur la code)


Je cherche à ecrire :
Case La selection faite sur la liste déroulante correspond au choix n° 1 de ma plage nommée de 50 choix alors lance la macro "DistribReel2009"
Etant ententu que je ne connais pas le nom du choix de la liste à l'avance puisqu'elle se remplit au fur et mesure... :rolleyes:

Je ne sais pas si j'ai été claire... :confused:

Merci

Malka
 

Pierrot93

XLDnaute Barbatruc
Re : Lancement d'une macro suite à une selection NON connue dans une liste déroulante

Bonjour,

une solution peut être ainsi :
ta liste de validation en E2, ta plage nomée = maplage
Code:
MsgBox Application.Match(Range("E2").Value, Range("maplage"), 0)

attention renverra un message d'erreur si aucune valeur n'est sélectionnée, sans doute lieu de faire un test...

bonne soirée
@+
 

Malka

XLDnaute Occasionnel
Re : Lancement d'une macro suite à une selection NON connue dans une liste déroulante

Bonjour Pierrot93, :cool:

Malheureusement je ne comprends pas bien ta reponse... :rolleyes:
Comment j'inserre ton code dans le mien ? :confused:

A la finale j'imaginais avoir un code comme cela :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False

If Not Intersect(Target, Range("BA:BA")) Is Nothing Then
Select Case Target
Case "Linéaire": DistribLineaire
Case "Objet Réél 2009": DistribReel2009
Case "Objet Réél 2010": DistribReel2010
Case "Choix 3 de la plage nommée" : macro n° 3
Case "Choix 4 de la plage nommée" : macro n° 4
....
....
....
Case "Choix 49 de la plage nommée" : macro n° 49
Case "Choix 50 de la plage nommée" : macro n° 50


End Select
End If
Application.ScreenUpdating = True

End Sub

A moins que je me plante de logique pour traiter ce pb....



Merci :eek:

Malka
 

Pierrot93

XLDnaute Barbatruc
Re : Lancement d'une macro suite à une selection NON connue dans une liste déroulante

Re,

regarde peut être ceci :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
If Not Intersect(Target, Range("BA:BA")) Is Nothing Then
    x = Application.Match(Target, Range("maplage"), 0)
    Select Case x
        Case 1
        macro1
        Case 2
        macro2
    End Select
End If
End Sub

bonne soirée
@+
 

Malka

XLDnaute Occasionnel
Re : Lancement d'une macro suite à une selection NON connue dans une liste déroulante

Bonjour Pierrot93 :)

Merci pour le code mais j'ai un message d'erreur en ligne viollette du code ci-dessous
Le message :
La méthode 'Range' de l'objet '_WorkSheet' a échoué :mad:

Est ce que tu aurais stp une idée sur ce qui ne va pas ? :confused:

Merci :eek:

Malka


Le code :


Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Variant

Dim ListeClés As Variant

If Target.count > 1 Then Exit Sub
If Target = "" Then Exit Sub
If Not Intersect(Target, Range("BA:BA")) Is Nothing Then
x = Application.Match(Target, Range("ListeClés"), 0)
Select Case x
Case 1
DistribLineaire
Case 2
DistribTrimestre
End Select
End If
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Lancement d'une macro suite à une selection NON connue dans une liste déroulante

Bonjour,

cette ligne :
Code:
x = Application.Match(Target, Range("ListeClés"), 0)
ne pose pas de problème chez moi, que la valeur soit trouvé ou pas....

d'autre part, comprends pas pourquoi tu déclares :
Code:
Dim ListeClés As Variant
d'après ce que j'avais compris "ListeClés" était une plage nommée dans le classeur....

Si c'est un objet range, à condition qu'il soit initialisé :
Code:
Set ListeCles = Range("A1:A10")
x = Application.Match(Target, ListeCles, 0)
j'ai enlevé les accents, pas trop conseillé de les utiliser dans des noms d'objets ou de variable...

bon après midi
@+
 

Malka

XLDnaute Occasionnel
Re : Lancement d'une macro suite à une selection NON connue dans une liste déroulante

Salut Pierrot93

Désolée de repondre tard....
Une merveille ton code ! (j'allais dire comme d'hab !) ;)

Pour te repondre, effectivement ListeClés est bien une plage nommée mais j'avais le message d'erreur que j'ai cité plus haut.
Dans mon cas, l'erreur provenait du fait qu'il fallait preciser le nom de la feuille où se trouvaient les cellules de cette fameuse plage nommée (ne me demandes pas pourquoi ??? :confused: )
Le code est bien :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
If Not Intersect(Target, Range("BA:BA")) Is Nothing Then
x = Application.Match(Target, Sheets("Ma Feuille Origine de ma plage").Range("maplage"), 0)
Select Case x
Case 1
macro1
Case 2
macro2
End Select
End If
End Sub

Sinon, ca marche aussi avec ta methode avec l'objet range

Merci Pierrot93 pour le partage de tes connaissances ! :eek:

Malka
 

Pierrot93

XLDnaute Barbatruc
Re : Lancement d'une macro suite à une selection NON connue dans une liste déroulante

Bonjour Malka

pour le nom de la feuille, il faut le préciser si la feuille en question n'est pas la feuille active, ou bien si ton code est placé dans un module de feuille différent de celle sur laquelle tu veux qu'il s'applique...

bon dimanche
@+
 

Discussions similaires

Réponses
8
Affichages
445

Statistiques des forums

Discussions
312 329
Messages
2 087 330
Membres
103 519
dernier inscrit
Thomas_grc11