Liste adaptative personnalisée multiples critères [Résolu/Fermé]

Signaler
Messages postés
394
Date d'inscription
mardi 5 octobre 2010
Statut
Membre
Dernière intervention
21 novembre 2020
-
Messages postés
394
Date d'inscription
mardi 5 octobre 2010
Statut
Membre
Dernière intervention
21 novembre 2020
-
Bonjour le forum !
Je souhaite utiliser la fonction de Validation des données en mode Personnalisé (formules) pour restreindre les possibilités de saisie dans un bloc de cellules (débutant en A6). Voici les conditions à rassembler :


- Limiter à une liste (assez courte) :
DECALER(Listes!$F$4;0;0;NBVAL(Listes!$F:$F);)
grâce à cette formule de liste adaptative nommée =MOIS
- OU : ensemble de 3 lettres variables consécutives en Majuscules uniquement : ex : TNT avec
ET(EXACT(MAJUSCULE(A6);A6);NBCAR(A6)=3)

Ma liste adaptative est OK, voici ma formule actuelle :
=OU(MOIS;ET(EXACT(MAJUSCULE(A6);A6);NBCAR(A6)=3))

Mais toutes les valeurs sont acceptées ...

un exemple : https://www.cjoint.com/c/EDdoTxScBcO
Puis-je vous demander de l'aide ? Merci d'avance !

9 réponses

Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
509
Bonjour,

Une solution qui couple la liste de validation à une procédure évènementielle VBA.
https://www.cjoint.com/c/EDenGr4CM2e

A+
Messages postés
3524
Date d'inscription
jeudi 6 août 2009
Statut
Membre
Dernière intervention
11 juillet 2020
1 774
Bonjour, pour créer des listes c'est simple, tu l'as compris. Mais pour qu'elles se mettent à jour en fonction de l'autre, c'est une gymnastique!

On appelle cela des listes en cascades.

Un exemple sur https://www.dailymotion.com/video/x16beog
Messages postés
394
Date d'inscription
mardi 5 octobre 2010
Statut
Membre
Dernière intervention
21 novembre 2020
9
Bonsoir

Merci beaucoup à tous les 2 !
D'abord @Gyrus : excellent : ta macro remplit parfaitement sa fonction, quel talent !
J'ai une doléance supplémentaire : serait-il possible, en cas de saisie des 3 lettres en minuscules, que la conversion en Majuscules se fasse de manière automatique ?

@Tyranausor : j'ai regardé la vidéo de cette fille, c'est très clair, je vais m'en servir ailleurs : il suffit de saisir
=INDIRECT(A1)
en A2 pour faire apparaître une liste dépendante du choix réalisé en A1.

Un grand merci très sincère pour votre aide.
Demain matin faut que je fasse le lapin de Pâques mais je vais adapter la macro de Gyrus : deux bons moments en perspective :)
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
509
Re-bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Target, Range("A3:F8")) Is Nothing Then
If Application.CountIf(Worksheets("Listes").Range("Mois"), Target) = 0 Then
Application.EnableEvents = False
If Len(Target) <> 3 Then
Target = ""
Target.Select
MsgBox "Saisie incorrecte"
Else
Target = UCase(Target)
End If
Application.EnableEvents = True
End If
End If
End Sub


A+
Messages postés
394
Date d'inscription
mardi 5 octobre 2010
Statut
Membre
Dernière intervention
21 novembre 2020
9
Cette fois carton plein Gyrus
Ca va éviter pas mal d'erreurs de saisie et me faire gagner du temps.

Merci beaucoup et bon week-end !
Messages postés
394
Date d'inscription
mardi 5 octobre 2010
Statut
Membre
Dernière intervention
21 novembre 2020
9
Bonjour

Gyrus, si tu es toujours là ...
J'ai encore 2 compléments à demander STP :)

- J'ai remplacé la sélection fixe en une liste nommée :
If Not Application.Intersect(Target, Range("Tableau_mois")) Is Nothing Then

Mais la syntaxe ne doit pas être correcte car le code s'applique à présent au tableau entier ...

- Dans ma liste déroulante, j'aimerai faire apparaître une variable qui se définirait comme suit :

=CCM!(Ligne active;colonneU)

Dans l'exemple ci-dessous, je l'ai mis en Listes!A2

https://www.cjoint.com/c/EDfn54wmqLB

merci encore !
Messages postés
394
Date d'inscription
mardi 5 octobre 2010
Statut
Membre
Dernière intervention
21 novembre 2020
9
Edit 06/04 : OK pour référence à liste nommée.
Pour ceux qui passeraient par ici, la macro ne fonctionne que si l'option d'arrêt auto dans la validation par liste est désactivée.

Par contre, la macro semble inhiber la fonction d'arrêt auto dans la validation par liste dans le reste du tableau. Sais-tu pourquoi ? Merci ...
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
509
Bonjour,

1) J'ai fait l'adaptation du code pour prendre en compte le nouvel élément "Colonne_U".

2) la macro ne peut fonctionner que si l'option d'arrêt auto dans la validation par liste est désactivée puisqu'il est demandé d'accepter d'autres éléments que ceux de la liste.
Par contre, rien n'empêche de déclarer une liste de validation avec l'option d'arrêt si cette validation est externe à la plage "Tableau_mois".
Voir l'exemple en V3.

https://www.cjoint.com/c/EDhjg4F9S6C

A+
Messages postés
394
Date d'inscription
mardi 5 octobre 2010
Statut
Membre
Dernière intervention
21 novembre 2020
9
Salut Gyrus

Merci bien, j'ai compris à peu près le code ...
Penses-tu possible de remplacer directement dans la liste déroulante le "Colonne_U" par son équivalent dans la colonne U ?

Autrement c'est super, beaucoup plus facile qu'avant ...
Vraiment un grand merci

@ plus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
509
Bonjour,

Une solution consiste à créer autant de listes que d'éléments distincts de la colonne U (voir dans la feuille "Listes").
Les listes de validation font alors référence à leur plage respective avec une formule du type
=INDIRECT($U3)

https://www.cjoint.com/c/EDijPyKMIHb

A+
Messages postés
394
Date d'inscription
mardi 5 octobre 2010
Statut
Membre
Dernière intervention
21 novembre 2020
9
Bonjour Gyrus

Effectivement ça fonctionne parfaitement.
Mille mercis.
Quel talent !