XL 2010 Liste filtrée pour combobox à 1 ou x colonne(s) (Titre màj)

cathodique

XLDnaute Barbatruc
Bonjour,

Je fais appel aux férus de VBA (pas comme moi, Vbiste autodidacte du dimanche).

Au fil de mes recherches j'ai trouvé dans les ressources un fichier de @Dudu2 (ICI) très pratique.

Je voudrai appliquer son code à plusieurs ComboBox. Mais je ne sais pas utilisé les modules de classe.

J'ai pourtant suivi des tutos en vidéo (l'anglais n'étant pas mon fort) sans comprendre grand chose.

Dernièrement, @patricktoulon a eu la gentillesse de corriger un code trouver sur le net et a dédié une vidéo pour expliquer ce que sont les modules de Classe. J'ai compris dans l'ensemble le principe. Mais ça coince toujours lors de l'écriture du code. Petite cervelle restera petite cervelle😢😢

Je ne joins pas de fichier, vous le trouverez en suivant le lien.

Je vous en remercie par avance.

Bon dimanche.

nb: j'ai envoyé à @Dudu2 pour l'informer
 
Dernière édition:
Solution
re
oui j'ai fais cette erreur jean-marie a corrigé
je vous lais éviter de repasser tout les items en revu en cas de grande liste
perso je corrigerais comme ça
VB:
For i = .ListCount - 1 To Application.Max(.ListCount - 3, 0) Step -1
tout ton code et tes controls fonctionnent dans mon userform

cathodique

XLDnaute Barbatruc
Bonjour @cathodique
tout est expliqué dans la vidéo et je joins le fichier
Bonsoir @patricktoulon :);),

Je viens juste de rentrer. Je n'ai pas encore visionné la vidéo et pas encore ouvert le fichier.
Je m'empresse pour te remercie pour ton grand sens de partage et ta générosité.
Te connaissant depuis un bon moment pour savoir que le résultat sera là.

Merci infiniment. Je reviendrai aux nouvelles.

Bonne soirée.
 

cathodique

XLDnaute Barbatruc
Bonjour @patricktoulon ;), Le Forum,

Avant tout, je te remercie le résultat était bien au RDV.
Je t'avoue que tu me confirmes que les connaissances et surtout l'expérience font la grande différence entre 2 individus dans un même domaine.
Je n'aurai jamais pensé à utiliser un array vide, l'injecter dans la combo et ensuite supprimer les items vides.

J'ai réussi à intégré tes codes dans mon projet.
J'ai quelques questions.
Pourquoi la ligne dans le code repérée avec des astérisques
VB:
Private Sub CommandButton1_Click()
   If ComboBox1.ListCount > 0 Then Exit Sub '*****'
   Set l = [tableau1].ListObject.ListRows.Add
    l.Range = ComboBox1.Value
    reliste
End Sub
Tu me dis que je peux déclarer un autre tableau en variable global pour traiter une autre combobox.
Si j'ai bien compris, je dois aussi ajouter une procédure Reliste (nommée par exemple Reliste1).
Est-ce qu'on pourrait créer une procédure générique comme la fonction ListeFiltree ?

Si je trouve des difficultés. J'ouvrirais une autre discussion avec la même idée pour filtrée et ajouter données un tableau à 2 colonnes vide initialement (ville et code postal. Ville dans Combobox et Cp dans textbox.

Je ne remercierai jamais assez. Un grand bravo pour ta géniale idée.

Bonne journée.
 

cathodique

XLDnaute Barbatruc
Bonjour @cathodique
faire du générique oui c'est possible
la ligne avec les astérisques j'explique pour quoi dans la vidéo
fichier joint
Rebonjour @patricktoulon:cool:,

Merci beaucoup. Très très clair. J'ai vraiment tout compris.

Plus qu'à ajouter un contrôle pour éviter les doublons (j'ai souvent la tête dans les nuages).

Merci, pour l'astuce concernant L'Event par propagation.

Ce truc me donnait le tournis pour mettre en place un booléen pour que l’évènement ne se déclenche pas. Je torturais la touche F8 pour trouver le bon emplacement de la Booléenne.

Tu me rends un sacré service. Je vais essayer d'adapter tes codes dans mon projet correctement.
Je te remercie infiniment, j'ai beaucoup avec toi ces derniers jours. RDV à la prochaine discussion;)

ps: Ton problème d'aujourd'hui avec les animaux vient peut-être du fait que le projet concerne les animaux (transmission de pensées).
 

cathodique

XLDnaute Barbatruc
Bonjour @patricktoulon ;), @Dudu2 ;), @Dranreb ;), Le Forum:),

Messieurs, je vous remercie beaucoup.
Je remercie particulièrement @patricktoulon pour sa patience, sa générosité, son partage d'expérience (Respect).

Pour le partage, j'ai repris les codes de @patricktoulon (post#12 et du fichier post#63) dans un userform avec 2 comboboxs (1 colonne et 2 colonnes), leur tableau respectif ayant le même nombre de colonne.

J'ai ajouté une ligne de code à la Sub reliste. J'espère que j'ai correctement adapté le reste.

Merci de vérifier si je n'ai fait de bêtises pour partager quelque chose exempt de grossières erreurs.

nb: j'ai modifié le titre du fil

Je vous souhaite une excellente journée.
 

Pièces jointes

  • combobox filtrée à 1 ou 2 colonne(s)(multi combobox ).xlsm
    34.2 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
re
Bonjour @cathodique je salut l'effort
en tout cas tu a visiblement compris comment ça fonctionne
juste un tout petit détail
j'ai vu que tu redimensionne à 2 le columncount de la combo 2d
certes c'est pas faux mais ta combo sera inutile dans une app

j'explique à nouveau
quand on utilise un filtre dans une combobox ou listbox forcement des lignes vont être supprimées
ce qui veux dire que dans ton changement on a plus la possibilité de retrouver l'index
si ce n'est qu'aller faire un vlookup sur le tableau dans la feuille
alors que je l'avais fait a 3 colonnes justement pour stocker les indexs de lignes
tu n'aurais pas changer ça ça aurait été un 100%;)
 

cathodique

XLDnaute Barbatruc
re
Bonjour @cathodique je salut l'effort
en tout cas tu a visiblement compris comment ça fonctionne
juste un tout petit détail
j'ai vu que tu redimensionne à 2 le columncount de la combo 2d
certes c'est pas faux mais ta combo sera inutile dans une app

j'explique à nouveau
quand on utilise un filtre dans une combobox ou listbox forcement des lignes vont être supprimées
ce qui veux dire que dans ton changement on a plus la possibilité de retrouver l'index
si ce n'est qu'aller faire un vlookup sur le tableau dans la feuille
alors que je l'avais fait a 3 colonnes justement pour stocker les indexs de lignes
tu n'aurais pas changer ça ça aurait été un 100%;)
Je suis convaincu que tu as raison quant au stockage des indexes.
Le code plantait sur cette ligne
VB:
A = A + 1: ReDim Preserve tbl(1 To 3, 1 To A) 'code initial
En modifiant le 3 et 2 le code n'a plus planté.
Code:
A = A + 1: ReDim Preserve tbl(1 To 2, 1 To A)
Je viens juste de commencer à saisir mes données sur mon fichier de travail. Là, j'ai une désagréable surprise.
1- le code postal ne s'affiche pas dans la textbox
Code:
Private Sub CobVille_Click()
   TxtCP = CobVille.Column(1)
End Sub
2- la touche 'Retour chariot ou arrière' dans la combobox 2 colonnes ne fait rien, la liste ne s'affiche plus.

Je suis dans la mél.... ou dans ca.... c'est pareil, ça ne sent pas bon.

Si tu veux bien jeter un coup d’œil à mon fichier. Je retire tout ce qui confidentiel d'ici demain.

Merci.

Bon appétit
 

cathodique

XLDnaute Barbatruc
Bonjour le Fil
Comment as tu déclaré ton tableau "tbl" ?
Quel message d'erreur ?
Bonne fin de journée
Jean marie
Bonjour @ChTi160 ;),

Le tableau tbl est déclaré ainsi tbl() (array) - l'erreur d'execution9 l'indice n'appartient pas à la sélection.

Merci. Je reviendrais vers, car je viens de m'apercevoir que je me suis les pinceaux et les couleurs (Entre mon fichier de travail et le fichiers pour le forum). Je dois faire le ménage.

A+
 

patricktoulon

XLDnaute Barbatruc
ça sent la rupture d'anévrisme là
diabolo.gif
 

cathodique

XLDnaute Barbatruc
ça sent la rupture d'anévrisme là
Regarde la pièce jointe 1194883
Je ne l'espère pas car j'attends un RDV pour une occlusion totale.
ça te fais marré, tant mieux pour toi, tant pis pour moi.
Je suis un peu comme le Dr Pol (si tu connais), je ne lâcherai pas le morceau.

Au fait, pourquoi dans le code de ton dernier fichier n'as-tu pas récupéré les indexes de ligne comme pour ton code du post#12.
Moi je ne l'ai pas fait car en choisissant une ville dans la combobox, j'ai utilisé l'évènement click pour récépéré le code postal [TxtCP = CobVille.Column(1)]. Je n'en voyais pas l'utilité (il se peut que je me trompe).

En tout cas merci beaucoup pour ton aide.
 

patricktoulon

XLDnaute Barbatruc
re
regarde attentivement ce que tu fait
cherche bien
il n'y a pas quelque chose qui te dérange
VB:
Function ListeFiltree_2D(combo As Object, tablo, Optional col As Long = -1)
   Dim A&, Lig, C, tbl(), ok As Boolean, ArgmT$, CoL1&, CoL2&, Cx&
   ArgmT = combo.Value
   If combo.Value = "" Then ArgmT = "*"

   If col = -1 Then
      CoL1 = LBound(tablo)
      CoL2 = UBound(tablo, 2)
   Else
      CoL1 = LBound(tablo)
      CoL2 = LBound(tablo)
   End If

   If combo.Value = "" Then combo.Clear: Exit Function

   For Lig = 1 To UBound(tablo)
      ok = False
      For C = CoL1 To CoL2
         If UCase(tablo(Lig, C)) Like UCase(CboVille.Value) & "*" Then ok = True
      Next
      If ok Then
'         A = A + 1: ReDim Preserve tbl(1 To 3, 1 To A) 'code initial
         A = A + 1: ReDim Preserve tbl(1 To UBound(tablo, 2), 1 To A)
 

Statistiques des forums

Discussions
312 242
Messages
2 086 532
Membres
103 243
dernier inscrit
SAH