menu deroulant avec saisie semi-automatique par mot clé

ziz59

XLDnaute Nouveau
Bonjour,

Je m'adresse à tous les expert(e)s d'excel, je sais qu'il existe plusieurs sujet pour çà, mais ma problématique est différente, voila j'expose mon soucis :

J'ai un classeur avec 2 feuilles, l'une Recherche, l'autre Liste

1/ dans la feuille Liste => j'ai une colonne avec ma liste des rues trié par ordre croissant.
2/ j'ai creer un nom "Liste" avec la référence Ligne!$A2$A100
3/ dans la feuille Recherche => j'ai créer une liste déroulante avec la formule
=DECALER(Liste;EQUIV("*"&A1&"*";Liste;0)-1;;NB.SI(Liste;"*"&A1&"*"))
En fait la problématique c'est que dans mon exemple j'ai 2 rues contenant "Ronarc'h", seul la première occurrence apparait avec la ligne suivante ou précédente , je sais plus.

Donc la fonction NB.SI fait bien son boulo, car compte 2 lignes. par contre je ne comprends pas pour EQUIV, qui lui trouve que la première lignes.

Donc au final, si je me suis bien fait comprendre, j'aimerais votre aide pour que quand je tape une partie d'un mot compris dans cette liste, seul les lignes contenant ce mot ou partie de mot apparaisse dans cette liste.

Merci d'avance à vous :eek:

Le but ensuite c'est par la suite avec la Fonction RECHERCHEV(), de faire apparaitre les lignes des autres colonnes, mais çà c'est bon, pas de soucis.
 

Fichiers joints

CISCO

XLDnaute Barbatruc
Re : menu deroulant avec saisie semi-automatique par mot clé

Bonsoir

Ta formule fonctionne tout à fait correctement, et puisque NB.SI(....) = 2, la liste proposée ne comprend que 2 expressions successives, "Quai de l'amiral Ronarc'h" et "Rue de jardins".

En pièce jointe, j'ai modifié cette formule pour calculer le nombre de lignes à afficher en utilisant la dernière ligne utilisant le contenu de A1.

Défaut de ce système : La liste déroulante ne contient pas uniquement des expressions avec le contenu de A1, mais toutes les expressions de la 1ère ligne à la dernière ligne contenant A1. Ici, cela donne "Quai de l'amiral Ronarc'h", "Rue de jardins" et "Rue de l'amiral Ronarc'h". Il ni a qu'un intrus, mais j'imagine bien que dans ton fichier réel, il y en aura beaucoup plus.

@ plus
 

Fichiers joints

david84

XLDnaute Barbatruc
Re : menu deroulant avec saisie semi-automatique par mot clé

Bonsoir,
dans la feuille Liste entrer en B1
Code:
=SIERREUR(INDEX(Liste;PETITE.VALEUR(SI(ESTNUM(CHERCHE(Recherche!$A$1;Liste));LIGNE(Liste));LIGNE(1:1)));"")
, valider la formule en matriciel par Ctrl, Maj et entrée et la tirer vers le bas.
Nommer cette nouvelle liste (insertion=>nom=>définir et la nommer Selection.
La formule est
Code:
=DECALER(Liste!$B$1;;;NB.SI(Liste!$B$1:$B$100;"><"))
En A1 de la feuille Recherche remplacer la validation de donnée actuelle par "=Selection".
A+
 

CISCO

XLDnaute Barbatruc
Re : menu deroulant avec saisie semi-automatique par mot clé

Re

En pièce jointe, une possibilité, avec une liste déroulante ne renvoyant que les "bonnes" expressions, mais faisant intervenir une plage intermédiaire, nommée listeréduite.

@ plus

PS : Bonsoir David84. La même méthode...
 

Fichiers joints

Dernière édition:

ziz59

XLDnaute Nouveau
Re : menu deroulant avec saisie semi-automatique par mot clé

Bonjour, Sisco et David84, merci pour vos réponses, je vais analyser vos propositions, je vous tiens au courant .
 

ziz59

XLDnaute Nouveau
Re : menu deroulant avec saisie semi-automatique par mot clé

Alors je viens de regarder vos proposition, la première n'est pas vraiment adapté, car parfois c'est pire au niveau de l'array.

Ensuite la proposition de david et donc celle que tu as gentillement préparé Sisco, fonctionne bien sur l'exemple, mais adapté sur mon fichier final il y a quelque chose qui déraille, de plus je sais pas comment récupérer des infos de la ligne avec la fonction RECHERCHEV().

Je vous joint mon fichier final.
 

Fichiers joints

ziz59

XLDnaute Nouveau
Re : menu deroulant avec saisie semi-automatique par mot clé

Ah oui je précise qu'ensuite, la finalité, c'est d'ajouter une ligne dans recherche au fur et à mesure qu'un utilisateur veux enregistrer un projet pour une rue.

PS: je me suis posé la question si avec la fonction INDIRECT(), c'est pas mieux adapté, mais le soucis resteras le même car si pour une même commune j'ai 3 rue/avenue/boulevard avec le même mot clé "casino", le prob resteras le même.

PS(SISCO): Au fait pour ta première réponse
=DECALER(Liste;EQUIV("*"&A1&"*";Liste;0)-1;;MAX(SI(ESTNUM(CHERCHE("*"&A1&"*";Liste));LIGNE(Liste)))-EQUIV("*"&A1&"*";Liste;0)-1)
Moi j'avais fait plutôt un truc du genre
=SI(NB.SI(No;"*"&A2&"*")>0;DECALER(No;EQUIV("*"&A2&"*";No;0)-1;0;NB.SI(No;"*"&A2&"*"))-1;EQUIV("*"&A2&"*";No;0))
 

CISCO

XLDnaute Barbatruc
Re : menu deroulant avec saisie semi-automatique par mot clé

Bonjour

Cf. une possibilité en pièce jointe, avec 2 listes intermédiaires obtenues à l'aide de formules matricielles à valider avec Ctrl+majuscule temporaire + entrée (environ 200 noms au max dans ces listes intermédiaires). Ca rame un peu vu le nombre de lignes, mais ça fonctionne.

@ plus
 

Fichiers joints

Dernière édition:

ziz59

XLDnaute Nouveau
Re : menu deroulant avec saisie semi-automatique par mot clé

OK ?merci je test çà cisco
 

CISCO

XLDnaute Barbatruc
Re : menu deroulant avec saisie semi-automatique par mot clé

Rebonjour

Je me suis trompé de colonne, mais on peut appliquer le même principe à n'importe laquelle.

@ plus
 

CISCO

XLDnaute Barbatruc
Re : menu deroulant avec saisie semi-automatique par mot clé

Re

En allant chercher dans la première colonne, on obtient le fichier en pièce jointe. Ca irait plus vite avec une macro, mais je ne sais pas faire.

Pour ce qui est des RECHERCHEV, on peut aussi faire par exemple avec =STXT(A2;1;CHERCHE(" - ";A2;1)) si toutes les appellations comportent une partie en " - ".

@ plus
 

Fichiers joints

Dernière édition:

ziz59

XLDnaute Nouveau
Re : menu deroulant avec saisie semi-automatique par mot clé

Ouah c'est super Cisco, ca fonctionne très bien je dirais !!!

seul bémol :

Il est vrai que le calcul est long, mais bon au moins çà fonctionne
Maintenant comment reproduire à la volé si j'insert la copie de la ligne
$a$2;$b$2;$c$3
en 3 ?

car j'ai besoin de reproduire la même chose sur chaque nouvelle ligne.

J'ajoute un nom pour Recherche!A2 ?
 

CISCO

XLDnaute Barbatruc
Re : menu deroulant avec saisie semi-automatique par mot clé

Bonjour

Cf. une possibilité en pièce jointe.

Pour obtenir la liste déroulante sur plusieurs lignes, il suffit de tirer la cellule contenant cette liste vers le bas. Pour les autres colonnes, tu peux les tirer (=copier-coller) vers le bas sans problème avec la poignée dans le coin inférieur droit.

J'ai modifié la formule dans liste!F2 pour que la liste réduite soit construite en fonction du contenu de la dernière cellule utilisée dans la colonne Recherche!A:A, en bas, et pas de Recherche!A2 uniquement.

En pratique, cela fonctionne, mais c'est toujours long. Lorsque tu écris une partie de nom dans la colonne Recherche!A:A, il faut être un peu patient...

Défaut du système : Si il y a une erreur au dessus, pour la corriger, on est forcé de l'écrire en entier (la partie de mot écrite dans cette cellule ne sera pas prise en compte pour construire la liste réduite, puisque cette cellule n'est pas la dernière de la colonne Recherche!A:A).

@ plus
 

Fichiers joints

Dernière édition:

ziz59

XLDnaute Nouveau
Re : menu deroulant avec saisie semi-automatique par mot clé

Merci CISCO, l'idée est pas mal, mais il est vrai que çà pose problème quand on veux revenir sur celles du dessus, l'idée serais de créer une référence de ligne de cette liste, je m'explique.

en fait que la listeréduite se face par rapport à la liste sélectionné ?

avec une recherche par index ? 'est faisable tu crois? car mathématiquement, chaque liste a un ID unique ?
Ou sélectionner la ligne ou se situe cette liste dynamique, tu vois ce que je veux dire ?

Pour rendre un peu plus rapide l’exécution du calcul, j'ai réduit la liste à 50 au lieu des 200.

J'avais penser aussi à un truc du genre après sélection de la rue dans la liste, un bouton(macro) qui va insérer une ligne auto dans une autre feuille avec copie des valeur en B2,C2, mais hélas toi comme moi , jm'y connais pas en VBA ou Macro.

PS: oui c'est vrai ? c'est cool çà, et en plus ton pseudo m'es pas inconnu, j'ai fait de la programmation PHP/Sql, mais VBA(inconnu ) et excel je découvre lol :eek:

en tout cas merci, tu m'aide vraiment ...
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Re : menu deroulant avec saisie semi-automatique par mot clé

Bonjour

l'idée serais de créer une référence de ligne de cette liste, je m'explique.

en fait que la listeréduite se face par rapport à la liste sélectionné ?

avec une recherche par index ? 'est faisable tu crois? car mathématiquement, chaque liste a un ID unique ?
Ou sélectionner la ligne ou se situe cette liste dynamique, tu vois ce que je veux dire ?...
Et non, je ne vois pas trop ! Tu pourrais détailler STP ?

@ plus
 

ziz59

XLDnaute Nouveau
Re : menu deroulant avec saisie semi-automatique par mot clé

re,

bein en faite ce que je veux dire c'est que la fonction dans liste réduite, reconnaisse la liste qui est sélectionné, soit par num de la ligne ou index

du genre si je sélectionne la liste en A1, que la fonction reconnaisse que c'est A1, ou ligne 1
 

CISCO

XLDnaute Barbatruc
Re : menu deroulant avec saisie semi-automatique par mot clé

Bonjour

Ca, avec une macro, c'est faisable, mais pas avec des formules...

@plus
 

ziz59

XLDnaute Nouveau
Re : menu deroulant avec saisie semi-automatique par mot clé

ok merci, CISCO, sinon je vais me pencher sur ta première version avec un maccro qui me copie cellule RECHERHEV() et insert une nouvelle ligne avec les éléments copié, si tu connais des experts en macro ?

J'ai trouvé çà, me reste plus qu'a comprendre l'insertion de lignes:

Private Sub ToggleButton1_Click()
Range("A1, B1").Copy Destination:=Sheets("feuil2").Range("A3")
End Sub
 

david84

XLDnaute Barbatruc
Re : menu deroulant avec saisie semi-automatique par mot clé

Bonjour, salut Cisco,

sur plus de 3000 lignes avec des formules matricielles, cela n'avance pas.
Autant tout traiter par macro.

Le problème est que si tu pars de zéro il va falloir t'y mettre pour gérer l'évolution de ton application car sinon tu vas passer ton temps à demander de l'aide sans rien comprendre aux solutions que le forum pourrait t'apporter.
Je me risque donc à te proposer une solution macro en comptant sur ton investissement pour essayer de comprendre sous peine que je me décourage rapidement.

Comme je n'ai pas le temps de tout relire, je reprends du début avec dans le fichier joint 1 formulaire comportant :
- une zone de texte permettant de noter le critère de filtre à appliquer
- une liste déroulante contenant les adresses de la colonne 1 de ton tableau répondant au critère noté dans la zone de texte.
J'ai supprimé la dernière colonne de ton tableau qui comportait les formules (plus besoin, enfin si j'ai bien compris).

A toi de voir si la liste correspond à ton attente.
Regarde bien le code et pose des questions sur ce que tu ne comprends pas, le but étant que tu puisses le gérer par la suite.
Si cette 1ère étape est ok, expose concrètement la suite de ta demande, sinon dis ce qui ne va pas.
A+
 

Fichiers joints

Dernière édition:

ziz59

XLDnaute Nouveau
Re : menu deroulant avec saisie semi-automatique par mot clé

Bonjour David, merci pour ton aide.

Alors je viens de regarder ton code, je n'y connais pas grand chose en VBA, mais pour créer un UserForm, bouton etc.. çà va, comme par exemple créer une liste modifiable et lui donné comme source une référence à une cellule ou colonne.

Alors concernant ton code :

Option Explicit
Option Compare Text
Ce sont des Fonction ou Variable d'environement ?

"Dim" je sais que c'est pour définir une variable

CreateObject("scripting.dictionary")
Je connais pas du tout.

Ensuite après avoir définis ta variable Dico, tu fais une boucle For des données de la cellule TextBox1 dans le Userform, c'est bien celà ?

Et tu compare les données du tableau de la boucle avec un If,Else.

Je dis çà de ce que je peux comprendre, le codé comme tu l'as fait méthodiquement j'en suis incapable ...

Ensuite au niveau de la déclaration "Private Sub UserForm_Initialize()" c'est là que je comprends pas tout, si tu peux détailler, cette fonction se fait au lancement du Form ? avant toutes chose ?
 

Discussions similaires


Haut Bas