XL 2019 liste deroulante

xzonz

XLDnaute Nouveau
bonsoir a toutes et tous

j'ai une question au sujet des listes déroulantes:

j'ai donc sur une feuil1 une liste déroulante alimentée par une plage de donnée sur une feuil2
mon problème est le suivant
quand sur la feuil1 on fait un copier coller d'une valeur qui ne se trouve pas dans la liste, sur la liste déroulante
le valeur est acceptée (même si elle ne se trouve pas dans la liste) idem si on tire une valeur avec la poignée de recopie sur cette même liste.

donc, ce que je voudras faire , c'est vérifier que ce qu'on met dans la cellule contenant la liste déroulante corresponde bien à ce qu'elle contient.

et la je sèche carrément ....
mon client s'impatiente et la tension commence à monter :)

pourriez vous m'aider à résoudre ce problème

merci d'avance
 

xzonz

XLDnaute Nouveau
Bonsoir xzonz.

Pour éviter ces problèmes il faut du VBA.

Quelle est la plage concernée en feuil1 et quelle est est la plage de la liste en feuil2 ?

A+
bonsoir merci de bien vouloir me filer un coup de main

dans la feuil1 la plage est B4:B.... (saisie d'un nombre n de valeur)

dans la feuil2 la liste qui sert à alimenter la liste déroulante est sur la plage : A1:A7
sachant qu'on peut aussi y ajouter des données pour compléter la liste

merci beaucoup job75
 

job75

XLDnaute Barbatruc
Voyez le fichier joint et cette macro dans le code de Feuil1 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Set Target = Intersect(Target, Range("B4:B" & Rows.Count), UsedRange)
If Target Is Nothing Or IsError([Liste]) Then Exit Sub
Dim d As Object, tablo, i&, x$
Set d = CreateObject("Scripting.Dictionary")
tablo = [Liste].Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
For i = 1 To UBound(tablo)
    d(CStr(tablo(i, 1))) = ""
Next
For Each Target In Target.Areas 'si entrées ou effacements multiples (copier-coller)
    tablo = Target.Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
    For i = 1 To UBound(tablo)
        x = CStr(tablo(i, 1))
        If x <> "" Then
            If Not d.exists(x) Then
                Application.EnableEvents = False 'désactive les évènements
                Application.Undo 'annule l'entrée
                Application.EnableEvents = True 'réactive les évènements
                Exit Sub
            End If
        End If
Next i, Target
End Sub
Elle se déclenche quand on modifie ou valide une cellule sous B3.

A+
 

Pièces jointes

  • Validation(1).xlsm
    19.2 KB · Affichages: 9
Dernière édition:

xzonz

XLDnaute Nouveau
bonjour job75,bonjour le forum :)
je viens de tester c'est vraiment tip top
pour ce qui est de la cellule vide je suis d'accord !! faut pas pousser non plus

par contre ,j'ai remarqué que si on essaye de copier une valeur qui est dans la liste
ça la copie bien donc c'est ok mais du coup la liste déroulante saute, est ce qu'il y a
moyen de la conserver ?
sans vouloir abuser , bien sur ;)

en tout cas ça va me permettre de bien avancer ... un grand merci ! 👍
 

Discussions similaires

Statistiques des forums

Discussions
312 098
Messages
2 085 267
Membres
102 845
dernier inscrit
Baticle.geo