XL 2016 RESOLU Saisie intuitive TextBox vers ListBox

jorge1201

XLDnaute Occasionnel
Supporter XLD
Bonjour le forum,
Pour la gestion de membres d'une association (environ 1200 membres), j'ai adapté une base de données créé par Philippe Tulliez en 2014 (merci à lu) et que fonctionne parfaitement. J'ai remplacé le ComboBox original de recherche par un ListBox car je trouve que la lisibilité des données est meilleure et ajouté un TextBox.

Maintenant, pour faciliter davantage la recherche, j'aimerais incorporer un code dans le nouveau TextBox (TextBox1_Change) qui permettrait une saisie intuitive, c'est-à-dire, qu'en saisissant quelques lettres dans le TextBox la liste de noms et prénoms contenue dans le ListBox soit réduite aux occurrences pertinentes. Cette recherche intuitive devrait se faire sur les deux colonnes du ListBox : nom et prénom.

De l'énorme quantité d'occurrences que apparaissent sur le net en tapant "recherche intuitive" ou "saisie intuitive", je n'ai trouvé, après moultes recherches, que 5 ou 6 codes qui fonctionnent. Beaucoup de ces discussions ont été laissées à l'abandon et certaines d'autres traitent carrément des sujets sans aucun lien avec le titre annoncé. Pour finir, il n'y a pas tant que ça.

Le première problème c'est qu'en essayant d'adapter les codes trouvés j'obtiens systématiquement de messages d'erreur ("accès refusé", "ne fait pas partie de la bibliothèque", "erreur non répertoriée", etc). Je pense qu'il se produit une incompatibilité entre l'Index du ListBox1 et celui du code que j'essaye d'incorporer. Le deuxième problème est que je ne sais pas faire.

Alors, pour celles et/ou ceux qui se donneront la peine de pencher sur mon problème, un grand merci. En pièce jointe un extrait de ma base.
Bon soirée. Jorge
 

Pièces jointes

  • Contacts_V1.xlsm
    46.3 KB · Affichages: 22
Solution
Bonjour le fil, le forum

Que signifie reprendre le code? Tout réécrire toute la base?
Non, simplement ne plus utiliser de rowsource pour la listbox mais un tableau.
Je suis toujours intéressé par votre proposition.
J'ai adapté votre programme, en pièce jointe, deux textbox, une pour le nom, une pour le prénom, les filtres sont interactifs et cumulables, je n'ai repris que la listbox et je n'ai pas refait le reste du programme mais on pourrait effectivement l'améliorer en utilisant des tableaux structurés, j'ai ajouté quelques données pour les tests, à vous d'en mettre des plus fournies et différenciées pour vos tests en réel.
Pour la petite histoire, j'ai moi même travaillé pendant des années avec des bases de plusieurs...
Bonjour le fil, le forum

Que signifie reprendre le code? Tout réécrire toute la base?
Non, simplement ne plus utiliser de rowsource pour la listbox mais un tableau.
Je suis toujours intéressé par votre proposition.
J'ai adapté votre programme, en pièce jointe, deux textbox, une pour le nom, une pour le prénom, les filtres sont interactifs et cumulables, je n'ai repris que la listbox et je n'ai pas refait le reste du programme mais on pourrait effectivement l'améliorer en utilisant des tableaux structurés, j'ai ajouté quelques données pour les tests, à vous d'en mettre des plus fournies et différenciées pour vos tests en réel.
Pour la petite histoire, j'ai moi même travaillé pendant des années avec des bases de plusieurs milliers d'agents et j'ai toujours utilisé ce système pour les filtres. On peut en ajouter très facilement et les recherches sont très rapides.
[ édition : Ps: un filtre actif a une couleur de fond et les filtres fonctionnent par chaînes recherchées comprises dans la chaîne de test, à l'usage, c'est plus pratique que de fonctionner uniquement par comparaison de début de chaîne. Dans les filtres, les caractères génériques sont acceptés.]

[édition : fichier mis à jour]


Bonne journée et bons tests
Bien cordialement, @+
 

Pièces jointes

  • Contacts_V1 - Copie.xlsm
    35.2 KB · Affichages: 10
Dernière édition:

jorge1201

XLDnaute Occasionnel
Supporter XLD
Bonjour fanfan38, patricktoulon, Yeahou, le forum,

Désolé pour le temps mis à répondre. Avec les urgences c'est comme ça, on sait quand on commence mais on ne sait jamais quand c'est qu'on va finir.

Bon, j'ai eu quand même le temps de regarder les solutions proposées et voici mes commentaires :

fanfan38 : Tu m'as déjà aidé dans d'autres projets et j'apprécie beaucoup tes interventions. Le modèle de base que tu m'as proposé représente un trop grand changement par rapport à mon projet. Toutefois, je le garde sous le coude car il y a des codes qui pourront me servir.

patricktoulon : Je n'ai pas su comment adapter ton fichier à mon projet. Trop abstraite pour mon niveau de connaissance. Je le garde pour l'étudier et essayer de comprendre et d'apprendre.

Yeahou : J'ai testé en long et en travers : les actions (créer, modifier et supprimer), les boutons de navigation et surtout la saisie intuitive. Résultat : tout simplement impeccable. Pas de conflit entre les procédures et aucun malheureux plantage. Vraiment nickel. En prime, j'ai pu conserver le carácter un peu artisanal de ma base que j'aime tant. De plus, j'ai pu l'adapter pour une autre de mes bases (recettes de cuisine) et tout se déroule sans accrocs.

Je reviendrais surement sur le site car la BDD Contacts pour l'association est loin d'être finie. Il s'agit d'une association qui gère une Pinacothèque (oui, la même chose qu'une bibliothèque mais avec des tableaux aux lieu de livres). Alors, j'aimerais prochainement incorporer un module dans la base qui permettra de gérer les prêts et les cotisations des membres. Mais ça c'est de la musique d'avenir ...

Je vous remercie tous du fond du coeur pour votre participation et votre solidarité. Merci beaucoup.
Jorge.
 
Bonsoir le fil, le forum
Yeahou : J'ai testé en long et en travers : les actions (créer, modifier et supprimer), les boutons de navigation et surtout la saisie intuitive. Résultat : tout simplement impeccable. Pas de conflit entre les procédures et aucun malheureux plantage. Vraiment nickel. En prime, j'ai pu conserver le carácter un peu artisanal de ma base que j'aime tant. De plus, j'ai pu l'adapter pour une autre de mes bases (recettes de cuisine) et tout se déroule sans accrocs.
Content que vous soyez satisfait, ces messages de remerciement sont la seule récompense des contributeurs.
je ne sais pas comment faire pour mettre résolu dans le titre
il suffit d'appuyer sur le bouton en haut à droite du premier post, éditer la discussion et modifier le titre.
Vous pouvez aussi cocher le post en solution de la discussion avec la coche à droite du post concerné. Cela facilite les recherches ultérieures.

Bonne soirée
Bien cordialement, @+
 

patricktoulon

XLDnaute Barbatruc
bonsoir
perso je ne sais pas comment vous avez fait mais j'ai fait simple
le row source on le vire pour un .list=rng.value

et dans le change du textbox
VB:
Private Sub TextBox1_Change()
    Dim liste, i&, c&, ind
    liste = rng.Value
    ListBox1.Clear
    For i = 1 To UBound(liste)
        If liste(i, 1) & " " & liste(i, 2) Like "*" & TextBox1.Value & "*" Then
            ListBox1.AddItem: ind = ListBox1.ListCount - 1
            For c = 1 To UBound(liste, 2): ListBox1.List(ind, c - 1) = liste(i, c): Next
        End If
    Next
End Sub
j'ai mis option compare text en haut de module pour ne pas m'ennuyer avec les majuscules
terminé la liste est intuitive

j'aime pas la couleur du userform mais les interface monochrome c'est classe