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,

21draft-essais.xlsm (57.73 Ko)

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 Sub

Que 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.

14draft-essais.xlsm (49.16 Ko)

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 Sub

A+

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,

@+

Rechercher des sujets similaires à "methode incrementale multicriteres case cocher"