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
re
j'explique tout(ce qui va et ce qui va pas) dans la vidéo
et dans le userform demo j'explique aussi
autrement dit tu a une fonction qui fait tout

Re,

Très très gentil de ta part de venir à mon secours.
Mais je regarderai tout ça demain. Je suis épuisé.
à mon souci d'adaptation des codes, c'est ajouté un autre souci le copier/coller d'une feuille à une autre manuellement ne fonctionne pas dans mon fichier. Et, uniquement ce fichier. Je vais devoir repartir avec un nouveau fichier.

Merci beaucoup.

Bonne soirée.
 

cathodique

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

@patricktoulon : Je commence par te remercier tout particulièrement pour ton soutien, aide et explication de "vive voix". Je remercie aussi tous ceux qui m'ont répondus. Et ce, avant de clôturer ce fil.

1 - J'avoue que je n'ai pas pris le temps nécessaire pour bien comprendre tes codes. Un peu pressé pour passer aux tests pour introduire quelques données et passer à la suite du projet (je ne suis qu'au tout début).

2 - Mes grossières erreurs: J'ai fait du copier/coller comme toi à la différence que toi, tu as effectué des modifications manuellement en faisant très attention. Moi, j'ai utilisé l'outil de recherche et remplacement de VBE. Ma connerie, j'ai cliqué sur le bouton "Remplacer Tout" (Balo, Balo).

3 - Dans le code du post 12 (tableau plusieurs colonnes), il n'y avait pas la fonction reliste .
dans ta fonction du post63, il y avait cette ligne de code que j'ai modifié
VB:
If UBound(tbl, 2) = 1 Then tbl = Application.Transpose(tbl) 'ajouter
'au lieu
tbl = Application.Transpose(tbl)
pour injecter dans Combobox.List, si tableau à 1 colonne on le transpose, si tableau plusieurs colonnes sans transposition.

4 - Pour ne pas tout "cassé", j'avais décidé d'utiliser de renommer tes fonctions en 1D et 2D.

Voilà, j'ai fait le tour de mon retour. Je ne te remercierai jamais assez pour ta génial idée d'expliquer tes codes en vidéo, tes codes, ta générosité, ton partage.

Bon week-end.
 

cathodique

XLDnaute Barbatruc
re
Bonjour cathodique
tu m'aura donné du fil à retordre toi hein
😂 😂 😂 😂
utilise la dernière version dans ton projet ça te simplifiera la vie
Ce n'est pas fini même avec la dernière version. La poisse!!!!
J'ai vidé le tableau TbCpVille pour faire des tests, le code plante.

1712988997703.png

1712989098903.png

La toison est blanche sans calvitie, à ce train je crois que ça ne va pas tarder.
Je vais m'arracher les cheveux.

Ps: je serai absent cette matinée.
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
ce que j'ai mis et semble fonctionner
VB:
  For i = .ListCount - 1 To 0 Step -1 '.ListCount - 3 ([I]je n'ai pas compris le pourquoi du -3[/I])
      If .List(i) = "" Then .RemoveItem (i) Else Exit For
  Next
a voir (peut être n'ai je pas compris Lol)
Bonne Journée
Jean marie
Edit : un essai dans le Fichier joint !
 

Pièces jointes

  • fonction listefiltrée Chti160.xlsm
    100.6 KB · Affichages: 3
Dernière édition:

patricktoulon

XLDnaute Barbatruc
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
 

Pièces jointes

  • fonction listefiltrée pour combo et list(box) 1 ou x colonnes V pat .xlsm
    105.1 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
re
oui bonjour Jean-marie
en fait listcount est en base 1 les index sont en base 0
donc si mon listcount est 2 donc item (0) et item(1)
dans la boucle je dois remonter de la fin de la liste de 1 ou 2 items
donc dans la boucle for i(qui est sur le listcount en base 1 je dois enlever le -1 pour le dernier index et aussi 2 pour remonter les deux ietems

le application max sert a choisir 0 si le -3 renvois a index <0 sinon 0 en dur
de cette manière si ma liste est plus longue je ne remonte pas a l'index 0
je remonte juste ce qu'il faut

pigé? ;)
 

cathodique

XLDnaute Barbatruc
re
Bonjour cathodique
un tout petit détail par rapport à ton autre discussion
Bonjour @patricktoulon :cool:,

Merci beaucoup. Effectivement, je suis sur le même fichier. Mais j'ouvre d'autres fichiers mal fait pour récupérer des données.
J'ai voulu en quelques sortes éviter toutes mauvaises surprises.
En effet, les feuilles d'un classeur peuvent être déplacer donc leur index va changer ou leur nom modifié donc le sheet.name ne sera plus bon ainsi que l'index de la feuille dans le code.
Je me suis dit autant utiliser le CodeName.
Mais ThisWorkBook.CodeName planté, je ne comprenais le pourquoi, d'où l'ouverture de la discussion.
De cette dernière, j'ai compris on prend le codename tout court.

En tout cas merci beaucoup. Tu es un bon gars.

Bon dimanche.
 

patricktoulon

XLDnaute Barbatruc
re
et pour tout te dire
à y réfléchir on peut simplifier la "reliste"
en enlevant les conditions et dimensionnant le tbl(donc tablo ou tablo2)
a 2 lignes supplémentaires d'office et une colonne supplémentaire
puisque je supprime ce qui est en trop dans le .list après

donc
VB:
Sub reliste(combo As ComboBox, tb As ListObject, ByRef tbl)
    Dim i As Integer
    tbl = Range(tb.Name).Resize(tb.ListRows.Count + 2, tb.ListColumns.Count + 1).Value
    For i = 1 To UBound(tbl): tbl(i, UBound(tbl, 2)) = i: Next
    With combo
        .List = tbl
        For i = .ListCount - 1 To 0 Step -1
            If .List(i) = "" Then .RemoveItem (i) Else Exit For
        Next
    End With
End Sub
 

Statistiques des forums

Discussions
315 095
Messages
2 116 167
Membres
112 675
dernier inscrit
Tazra_IMOU