Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Dudu2

XLDnaute Barbatruc
@patricktoulon,
Oui sauf que tu embarques tout le UserForm dans chaque instance de classe.
Et pour moi c'est pas clair ce qui se passe. Avec une classe séparée on sait ce qui est utilisé.
D'ailleurs @Dranreb avait aussi commenté sur ta manière de faire.
Mais bon, si ça marche...
 

Dudu2

XLDnaute Barbatruc
Je ne sais pas faire la différence entre les éléments que tu cites et je n'ai pas envie de fouiller.
Je te crois sur parole. Mais je soupçonne chaque instance du "module UserForm" d'emporter plus d'éléments que nécessaire à la simple gestion de quelques Controls.

Je suis sur un problème de positionnement de Shape que je n'arrive pas à résoudre. Tu auras du grain à moudre sous peu
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Ça parle de Module de classe et de ComboBox dans cette discussion, alors je rappelle qu'il y a ça disponible en téléchargement :
Je joins aussi un classeur équipé des modules de service nécessaires et qui n'a donc pas besoin du complément.
 

Pièces jointes

  • CLsCAsContacts.xlsm
    171.4 KB · Affichages: 3

patricktoulon

XLDnaute Barbatruc
la seule chose qui déclenche l'object userform c'est le show
tiens tape quelque chose dans le textbox
ça va peut être t'éclairer
alors le "Me" c é ki de tout les kikis qui est le "Me"
 

Pièces jointes

  • VBA UserForm avec WithEvents sur TextBox Module de Classe.xlsm
    20.4 KB · Affichages: 0

Dranreb

XLDnaute Barbatruc
j'instancie x instances du module userform2
j'instancie pas le clisd (l'object userform si tu comprends mieux comme ça ) avec l'instance
C'est quoi ce charabia ???
Pour chaque New UserForm1 vous mobilisez de nouveaux emplacements mémoire réservés au fonctionnement de tous ses contrôles, même si vous ne les utilisez pas. Le module lui reste toujours unique.
 

Dudu2

XLDnaute Barbatruc
Problème avec le code de @Dudu2, il plante lorsque le tableau alimentant la combobox contient une seule ligne ou vide (array=empty).
Lorsqu'il n'y a qu'un seul item pour la liste de la ComboBox ça ne plante pas.
Lorsqu'il n'y a aucun item pour la liste de la ComboBox ça n'a pas de sens d'envoyer une ComboBox et dans le fichier fourni ça plante avant l'appel aux fonctions sur le .DataBodyRange qui est Nothing et ne peut donc faire l'objet d'un traitement.

Edit: alors oui, je pourrais vérifier que la liste fournie n'est pas vide, mais bon...
 

patricktoulon

XLDnaute Barbatruc
C'est quoi ce charabia ???
Pour chaque New UserForm1 vous mobilisez de nouveaux emplacements mémoire réservés au fonctionnement de tous ses contrôles, même si vous ne les utilisez pas. Le module lui reste toujours unique.
@Dranreb l'art et la manière de dire les mêmes choses autrement
tout ce que tu charge c'est tout le code du module (oui je te l'accorde il y a forcement le référencement au object de la même manière que dans un module classe d'ailleurs, si tant est qu'il soit pris en compte dans l'instance(exemplaire) de la classe )

forcement les events encodé sont dans le module mais ce n'est que du code
 

cathodique

XLDnaute Barbatruc
Messieurs, je vous remercie beaucoup de m'avoir répondu. Je me sens un peu 'out' (niveau).

@Dudu2 : Désolé, j'ai oublié de préciser qu'un tableau 1D (liste) est vide initialement. Je rajoute des données via cette combobox au fur et à mesure. Et, aux prochains tours je les retrouve dans la combobox ce qui m'éviterai de ressaisir la même chose avec peut-être des erreurs d'orthographe et éviter les doublons.

Ce que tu expliques est exact (Tableau3 est vide)



Merci beaucoup à vous tous.

Bonne soirée.
 

Dranreb

XLDnaute Barbatruc
tout ce que tu charge c'est tout le code du module
Non, les exemplaires créés par New, ce sont des structures pour toutes les données définies par le module, y compris les contrôles dans le cas d'un UserForm, qu'on les utilise ensuite ou non. Le code n'est pas chargé par un New. Il est toujours là depuis l'initialisation du projet VBA, prêt à exécuter à tout moment une méthode portant sur tout exemplaire créé.
Sauf les objets créés par le maudit CreateObject. Ceux la entraine un chargement de complément de code (DLL notamment)
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
@cathodique voici un exemple de la mise en oeuvre de ma fonction filtre
3 combobox
  1. les 3 travaillent avec le même tableau(pour l'exemple il peut en être autrement)
  2. la, combo 1 filtre sur toutes les colonnes
  3. la combo 2 filtre sur la colonne 1
  4. la combo 3 filtre sur la colonne 2
et cela avec la même fonction
tape "patrick" dans les 3

et pour l'exemple je te l'ai fait dans le userform2 a l'identique mais avec les combos classées dans le userform

@Dranreb
comme je l'ai dit a @cp4 il faut faire la différence entre
1° dim cls as classe1'déclare le type
2° dim cls as new classe1'declare le type et crée l'instance(utilisable sans le "set" immédiatement dans une sub ou autre)
3° dim cls() as new classe1'cré un tableau non dimensionnée d'élément de type classe1

 

Pièces jointes

  • Saisie Filtrée ComboBox version pat .xlsm
    70.8 KB · Affichages: 11

Dranreb

XLDnaute Barbatruc
Qu'est ce que ça change à ce que j'ai dit ? Le fait que le chargement par New est automatique à la première mention de la variable si le mot clé New est utilisé dans sa déclaration n'y change rien.
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…