Methode incrémentale multicritères par case a cocher
Bonjour a tous,
Dans le cadre de mon projet, je dois réaliser un formulaire effectuant des recherches incrémentales multicritères.
A partir de mes 19 ListBox (ListBox 1 a 19) je dois filtrer ma ListBox20.
Chaque ListBox (ListBox 1 a 19) possède des critères a cocher.
Le filtrage doit se faire comme les filtres d'un Excel. Je peux choisir n'importe quelle ListBox (ListBox 1 a 19) pour effectuer les filtres, chaque action d'une listBox (ListBox 1 a 19) met jour les critères a cocher des autres ListBox (ListBox 1 a 19)mais aussi les résultats de ma ListBox20.
Quelqu'un peut il m'aider ? Je suis novice en VBA donc mes lignes de codes ne sont pas optimisées ... J'ai déjà incrémenté les données de mes Listbox 1 a 19 et ListBox20
En vous remerciant par avance,
Bonjour benji77 et
Avec un tel USF, vou savez un écran de combien de mètre de largeur
De plus pourquoi passer par un USF "usine à gaz" alors que vous pouvez faire des filtres sur la feuille tout simplement ?
Sinon toutes vos fonctions "Sans_Doublon_Trié" sont inutiles (aucune valeur à retourner)
vous pouvez ne créer qu'une seule Sub
Sub Sans_Doublons_Trié(Lb As MSForms.ListBox)
Set f = Sheets("DATABASE")
' Selon la ListBox
Select Case Lb.Name
' Définir la plage
Case "ListBox1"
a = f.Range("D3:D" & f.[D65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
Case "ListBox2"
a = f.Range("E3:E" & f.[E65000].End(xlUp).Row) ' tableau a(n,1) pour rapidité
' Etc...
End Select
' Créer une instance de dictionnaire
Set MonDico = CreateObject("Scripting.Dictionary")
'
For i = LBound(a) To UBound(a)
If a(i, 1) <> "" Then MonDico(a(i, 1)) = ""
Next i
'--avec tri
temp = MonDico.keys
Call Tri(temp, LBound(temp), UBound(temp))
Lb.List = temp
End SubQue vous appelez par
Call Sans_Doublons_Trié(Me.ListBox1)A+
Bonjour BrunoM45,
Merci d'avoir pris le temps de me répondre.
😂 Mon USF s'adapte a mon écran, j'ai un bon écran en effet.
Oui cela fait usine a gaz, mais je trouve cela plus professionnel en faisant du VBA qu'en passant par du Excel.
Je vais appliquer vos corrections a mes fonctions "Sans_Doublon_Trié".
Je vous tiens au courant,
Merci pour vos commentaires et votre soutien technique!
@+
Rebonjour BrunoM45,
J'ai apporté vos corrections, tout fonctionne, merci !
Call Sans_Doublons_Trié(Me.ListBox1): C'est pour avoir une seule et meme valeur et pas x memes valeurs dans mes 19 ListBox.
Apres correction, c'est le cas dans le formulaire ci-joint, il faut que je trouve le bon code tout en classifiant dans l'odre croissant, chiffre a virgule compris.
Re,
C'est une question ? ou une constatation !
Private Sub UserForm_Initialize()
Dim Ind As Integer
' Remplir les ListBox
For Ind = 1 To 19
Call Sans_Doublons_Trié(Me.Controls("ListBox" & Ind))
Next Ind
' Afficher les données
Call show_data_in_listbox
End SubA+
Merci BrunoM45.
Je constate qu'il n'y a plus de doublon et que les cases vides n'apparaissent plus, impeccable!
Merci.
Constatation, Il me reste a ranger les valeurs a virgules dans l'odre du plus petit au plus grand (croissant) ....
@+
Bonjour a tous
J'ai retravailler mon fichier/formulaire, mais j'ai des problèmes sur:
- Peut être n'ai je pas assez optimise mes lignes de codes ?
- Dans mes combobox j'ai des blancs ou cases vides que j'aimerais supprimer,
- certaines combobox ou j'ai des chiffres a virgule, il ne les range pas dans l'ordre croissant,
- Quand je fais des modifications dans mes combobox, le formulaire ne les enregistre prends
- peut etre ai je d'autres problemes que je n'ai pas vu aussi a regler ....
Quelqu'un peut il m'aider pour m'eclairer, me guider dans un e correction de lignes de code ?
En vous remerciant par avance,
@+