VBA - filtrer des données par un userform

Soline -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un fichier Excel avec deux onglets, un "Données" et un "Synthèse"

Je souhaite à l'aide d'un userform trier les valeurs de l'onglet données et les copier dans l'onglet synthèse en les filtrant selon trois combobox : le statut, le secteur et le nom.

Pour l'instant j'ai comme code VBA :


'APPLIQUER UN TRI A L'AIDE DE L'USERFORM
'Définition des variables
Dim compteur As Integer
compteur = 15
dernlign = Sheets("Données").Cells(Rows.Count, 1).End(xlUp).Row

'Faire un tri selon le nom du collaborateur
For ligne = 2 To dernlign
If Sheets("Données").Cells(ligne, 5).Value = liste_nom.Value Then
Sheets("Données").Activate
Sheets("Données").Range(Cells(ligne, 5), Cells(ligne, 5)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 2)
Sheets("Données").Range(Cells(ligne, 8), Cells(ligne, 12)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 3)

compteur = compteur + 1
End If

Next ligne

'Faire un tri selon le secteur
For ligne = 2 To dernlign
If Sheets("Données").Cells(ligne, 3).Value = liste_secteur.Value Then
Sheets("Données").Activate
Sheets("Données").Range(Cells(ligne, 5), Cells(ligne, 5)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 2)
Sheets("Données").Range(Cells(ligne, 8), Cells(ligne, 12)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 3)
compteur = compteur + 1
End If

Next ligne

'Faire un tri selon le statut
For ligne = 2 To dernlign
If Sheets("Données").Cells(ligne, 6).Value = liste_statut.Value Then
Sheets("Données").Activate
Sheets("Données").Range(Cells(ligne, 5), Cells(ligne, 5)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 2)
Sheets("Données").Range(Cells(ligne, 8), Cells(ligne, 12)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 3)
compteur = compteur + 1
End If

Next ligne


Le soucis est qu'avec cette boucle for, mes données se copient de façon cumulative, j'ai ainsi d'abord toute les données correspondant au nom saisi dans l'userform qui se copient puis toutes celles correspondant au secteur puis toutes celles correspondant au statut.

Je voudrais que les conditions se cumulent, que ne se copient que les données qui correspondent au secteur ET au statut ET au nom saisis dans le userform.

J'ai bien essayé avec un AND comme :

For ligne = 2 To dernlign
If Sheets("Données").Cells(ligne, 6).Value = liste_statut.Value and Sheets("Données").Cells(ligne, 3).Value = liste_secteur.Value and Sheets("Données").Cells(ligne, 5).Value = liste_nom.Value Then
Sheets("Données").Activate
Sheets("Données").Range(Cells(ligne, 5), Cells(ligne, 5)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 2)
Sheets("Données").Range(Cells(ligne, 8), Cells(ligne, 12)).Copy Destination:=Sheets("Synthèse").Cells(compteur, 3)
compteur = compteur + 1
End If

Next ligne



Mais le problème avec cette solution est qu'elle m'impose de remplir toutes les données de l'userform ou j'obtient une copie vide. Cependant je voudrais pouvoir importer des données que, par exemple, qu'en saisissant un secteur dans le userform.

Une idée de comment saisir mon code pour obtenir ce que je recherche ?
Je ne peux malheureusement pas vous fournir mon fichier Excel (meme si j'ai bien conscience que ca serait plus simple) car celui ci contient des données confidentielles.

Je vous remercie par avance pour votre aide !

3 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    vu la météo dans mon coin.....
    proposition
    on peut sélectionner 1 ou plusieurs combobox en cochant le ou les checkbox concernés.

    l''écriture des résultats dans la synthèse est effectué par une macro parametrée (valeur du combo, sa colonne dans les données (module vba "synthèse")
    0
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Il me semble que ton formulaire convient très bien pour réaliser un filtre élaboré en alignant sur la feuille tes rubriques de filtrage. Ainsi avec un code très réduit, tu peux faire tes sélections sur chacun des 5 éléments remplis ou vides sans souci

    https://www.cjoint.com/c/HEqvgW6KyLl

    à toi de nos dire si cela correspond
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    Voir l'indispensable
    http://boisgontierjacques.free.fr/

    du coté des filtres en cascade

    -1
    1. Soline
       
      Bonjour,

      Je vous remercie pour votre réponse et pour ce site où j'ai pu trouver d'autres informations dont j'avais besoin.
      Cependant je pense que vous n'avez pas compris mon problème car je ne souhaite pas faire des filtres en cascade dans mon userform.
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      dont acte....
      0
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      on ne peut que faire de hypothèses compte tenu de l'absr,ce de renseignements précis de ta part

      par ex: comment sélectionnes tu le ou les combo utiles ? sur le clic du combo

      Crées tu une variable regroupant les combos sélectionnés ?
      pâr ex:
      choix= statut, nom
      on suppose que tu as un bouton pour déclencher le processus....

      quels sont les libellés des ent^tes de ta base de données utiles colonnes 5 à ??, 8 à 12 etc
      le but est de voir si on peut utiliser une technologie sans boucle (ADO) ou pas ?
      a propos:
      Sheets("Données").Range(Cells(ligne, 5), Cells(ligne, 5)) tu es s^re ?

      mais tu n'auras au mieux qu'un principe et non une solution

      généralement, les demandeurs livrent un extrait du classeur avec des données bidons comme nom1, nom2, nom3, ect
      petit effort nécessaire pour avoir une aide bénévole

      A toi de voir
      0
    4. SolineG Messages postés 1 Statut Membre
       
      Voici mon fichier
      https://www.cjoint.com/c/HElpz36z7gb

      Merci de votre aide
      0
    5. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bonjour,

      vu la météo ce dimanche dans mon coin.....

      proposition
      on peut sélectionner 1 ou plusieurs combobox en cochant le ou les checkbox concernés.

      l''écriture des résultats dans la synthèse est effectué par une macro parametrée (valeur du combo, sa colonne dans les données (module vba "synthèse")

      https://mon-partage.fr/f/lTYNoAE0/

      0