J'ai trouvé un code de patricktoulon (septembre 2020 excel downloads) qui permet d'effectuer une recherche à partir d'un TextBox sur un tableau d'un ListBox. L'avantage avec ce code est que la recherche se fait sur toutes les colonnes du tableau. J'essaie de l'adapter à mon projet mais je n'arrive que partiellement.
A l'ouverture du formulaire, la ListBox se rempli correctement. Lorsqu'on insère un carácter dans le TextBox, la recherche se fait mais avec quelques distorsions (une partie des informations de la dernière colonne de la ListBox est remplacé par de chiffres).
Je vous mets, en pièce jointe, un petit fichier dans l'espoir de susciter la curiosité d'une personne qui pourrait m'aider.
D'avance, tous mes remerciements. Jorge.
bonsoir jorge1201 bonsoir le forum
je suis bien incapable d'expliquer le comportement du formulaire conçu par Patricktoulon, je vais le laisser vous apporter la solution à votre problème
Je maitrise un peu mieux une solution proposée par M boisgontier avec un tableau structuré. je l'ai adapté à votre classeur.
faites un essai
le but vous apportez un maximum de solution pour que vous ayez le choix.
cdt
galougalou
Bonsoir GALOUGALOU, le forum,
Merci pour la réponse. J'ai sommairement testé et ça a l'air de bien fonctionner mais je dois tester d'avantage et surtout essayer de comprendre.
Je suis un peu impressionné (et un peu perdu également) par le code. Il y a, à mon avis, un grand travail d'adaptation à faire et je ne suis pas sûr d'y arriver mais je reviendrais après les tests. Encore merci pour ton intervention. Cordialement, Jorge.
@jorge1201 : La dernière colonne contient le n° de ligne sur la feuille. Il suffit de neutraliser la ligne de code qui neutralise l'ajout du n° de ligne.
Pour le reste même remarque que Galougalou
VB:
Private Sub UserForm_Activate()
Dim i&
Set Ws = ThisWorkbook.Worksheets("DataBase")
tableau = Ws.Range("B5:F" & Cells(Rows.Count, 2).End(xlUp).Row).Value
ReDim tbl(2 To UBound(tableau)) 'dès la deuxième colonne (B)
ListBox1.List = tableau
ListBox1.ColumnCount = UBound(tableau, 2)
For i = 2 To UBound(tableau)
tbl(i) = "|" & Join(Application.Index(tableau, i, 0), "|") & "|" 'on join la ligne du tableau dans la ligne i de tbl
'''' tableau(i, 5) = i + 1 'on ajoute le numero de ligne en derniere colonne
DoEvents 'pour ne pas attendre la fin de concstruction de tbl pour l'affichage complet de la liste
Next
End Sub
Set f = Sheets("DataBase") 'le nom de votre feuille
NomTableau = "Tableau1" ' le tableau structuré à créer dans la feuille
les deux lignes à adapter, ici la feuille DataBase et le nom du tableau Tableau1. dans toutes les lignes ou il y a marqué tableau on ne touche à rien
Code:
ColCombo = Array(1, 2, 3, 4, 5) 'il y a 6 combobox disponible, ici sont visible 5 sur 6
' A adapter (1 à 6 colonnes maxi)
dans le formulaire de base 6 combo sont disponibles. Elles ne sont visibles que si elles sont déclarés dans cette ligne
si vous déclarer Array(2, 4,) il n'y aura que deux combobox visibles( la une et la deux) qui chercheront l'information dans les colonnes deux et quatre du tableau (et pas de la feuille)
Code:
colVisu = Array(1, 2, 3, 4, 5) 'meme explication que pour colcombo
la déclaration concerne les colonnes visibles dans la listbox. si vous aviez eu un tableau à 15 colonnes, vous auriez pu déclarer, Array(2, 9, 11, 12, 14, 15) et vous auriez eu 6 colonnes visibles dans la listbox les colonnes 2, 9, 11, 12, 14, 15 du tableau et pas de la feuille
Code:
colInterro = Array(1, 2, 3, 4, 5)
ici concerne la textbox de recherche. les lettres saisies dans la textbox sont cherchés dans les colonnes déclarées. Les mots saisis peuvent être partiel ,saisie dans le désordre, commencé à la deuxième ou troisième lettre
bien évidemment, dans toutes ces lignes, les déclarations doivent être conformes au tableau. si vous avez un tableau à 5 colonnes les déclarations doivent être inférieure ou égale à 5. il ne faut pas déclarer 6 ou 7 etc
suite à la remarque d'éric, je vous ai changé le code d'impression, maintenant il crée un classeur temporaire. la feuille résultat est inutile.
vous prenez toutes les autres lignes de code tel quel. vous rajoutez vos procédures et ça devrait fonctionner
cdt
galougalou
re
ah je vois que GALOUGALOU adpate mes codes
peut être un peu coton pour un débutant
cela dit j'ai fait plus simple depuis et plus propre plus accessible pour les moins expérimentés
les entêtes les colwidths ect.....
il faut chercher
Bonjour à vous tous, le forum,
Tout d'abord : félicitations pour le rendu!
- GALOUGALOU : Ce qui me paraissait au premier abord impressionnante, l'était un peu moins à fur et mesure du temps nécessaire qu'il m'a fallu pour me familiariser avec ce code "intense". Mon premier commentaire faisait état de la difficulté que je voyais à adapter ce code à mon projet. En fait, il n'en était rien puisque, sans m'apercevoir, tu l'avais déjà adapté. Avec la version 2 (et avec les commentaires de Eric C), le code était encore plus compréhensible. En réalité il ne s'agit pas d'un modèle qui se limite à montrer la recherche intuitive multicolonnes mais d'une véritable base de données équipée des fonctions de base (ajouter, modifier, supprimer, imprimer, consulter et rechercher). A garder comme modèle.
- patricktoulon : J'ai eu la chance d'avoir pu faire corriger mes esquisses par le propriétaire du code. J'aime bien quand tu listes les erreurs commis (Erreur 1, Erreur 2,...) car ça nous permet d'avancer dans la compréhension de ce langage. J'aime bien aussi ton esprit de synthèse, on dirait que tu cherches à faire un maximum avec un minimum. Ta réponse à ma demande et l'ajout en prime du transfert vers les TextBox : tout simplement impeccables.
A vous tous, GALOUGALOU, patrictoulon, Eric C, cp4 et bien entendu à M Boisgontier, un grand merci.
Cordiales salutations, Jorge.
- patricktoulon : J'ai eu la chance d'avoir pu faire corriger mes esquisses par le propriétaire du code. J'aime bien quand tu listes les erreurs commis (Erreur 1, Erreur 2,...) car ça nous permet d'avancer dans la compréhension de ce langage. J'aime bien aussi ton esprit de synthèse, on dirait que tu cherches à faire un maximum avec un minimum. Ta réponse à ma demande et l'ajout en prime du transfert vers les TextBox : tout simplement impeccables.
c'est exactement ça
je suis assez pragmatique
j'essaie de "dé compliquer" la méthode afin quelle soit accessible même au débutant
certains prennent ça comme de la condescendance mais il n'en est rien
il est vrai que je m'embarrasse peu avec la retenue ou la diplomatie , quand c'est pas bon je le dis
surtout quand c'est mes codes
je suis bien incapable d'expliquer le comportement du formulaire conçu par Patricktoulon, je vais le laisser vous apporter la solution à votre problème
Je maitrise un peu mieux une solution proposée par M boisgontier avec un tableau structuré. je l'ai adapté à votre classeur.
re patrick toulon
Loin de moi l'idée de détourner de son créateur les codes ci-dessus évoqués. Si tu en revendiques la paternité je ne le contesterais pas.
Pour ce qui me concerne je n'ai aucune formation en informatique et j'évolue en furetant sur le net. j'ai découvert excel en 2015.
il se trouve que le site de M Boisgontierj démocratise excel et met à disposition des informations et des classeurs librement consultable. c'est bien plus facile que de décortiquer la bible excel.
Historiquement, dans l'ancien site, j'y ai trouvé le classeur proposé dans le fil 2 sur l'équivalent de la page suivante
Sur le classeur que j'ai proposé je ne saurais dire qui est le concepteur des codes basé sur le vba, mais ce qui compte, c'est que ceux ci soient librement accessible à la communauté, de sorte que la connaissance soit partagé par le plus grand nombre.
J'ajouterais que lorsque je consulte tes commentaires sur excel dowload, j'adore, car ils sont très pertinents et permettent la compréhension par le plus grand nombre, c'est bien là l'essentiel.
Comme à mon habitude, j'ai récupéré le classeur que tu as proposé dans le fil 9, ce qui me permettra de le décomposer pour l'analyser, le comprendre et le restituer.
Donc pour moi pas de problème,je ne sais pas qui est césar, mais je laisse à césar ce qui appartient à césar.
cdt
galougalou