Problème filtre élaboré

Résolu
Bonjour,

J'utilise un filtre élaboré avec 3criteres mais l'extraction ne restitue pas complétement les données. Celle ci semble filtrée sur un quatrième critère que je n'ai pas demandé.
Auriez-vous une piste svp?
Merci par avance.

13 réponses

  1. Bonjour,

    Question: Lorsque vous sélectionnez la zone à filtrer, êtes-vous sûr qu'il n'y ait pas une colonne masquée?

    Cdlt
    1. bonjour Frenchie,

      je confirme qu'aucune colonne est masquée.
      l extraction se fait sur une modalité de la 4e variable puis quand je relance l extraction se fait sur une autre modalité de la même variable.
      1. Contributeur
        Bonjour jeepipy.

        Qu'appelles-tu "modalité" ?
        Pourquoi ne pas joindre un fichier, comme d'habitude ? C'est plus facile pour tout le monde : celui qui expose son problème, ceux qui proposent des solutions.
         1) Tu vas dans https://www.cjoint.com/ 
        2) Tu cliques sur [Parcourir] pour sélectionner ton fichier (15 Mo maxi)
        3) Tu défiles vers le bas pour cliquer sur le bouton bleu [Créer le lien Cjoint]
        4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien en gras ; tu fais un clic-droit dessus et tu choisis "Copier le lien"
        5) Tu reviens dans ta discussion sur CCM, et dans ton message tu fais "Coller".
        =>Voir la fiche https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers
        1. Bonjour,

          je vous remercie de vos réponses.
          J'entends par "modalité" les valeurs différentes d'une variable.
          Désolé de ne pas avoir joint le fichier mais je ne connaissais pas la procédure.
          Malheureusement je ne peux le faire de suite car le serveur de mon travail bloque le lien "http://cjoint.com/ "
          Je vais essayer de chez moi ce soir.
          Vous trouverez déja mon code:



          Option Explicit
          Dim chemin, liste_pni As String
          Dim Wbk As Workbook
          Dim i, j, der_lig As Integer
          Public der_col, nb_siret, k As Integer
          Dim MyArea As String
          Public liste_siret As Variant

          Sub tdb()
          Application.ScreenUpdating = False
          Application.DisplayAlerts = False

          Call base
          Call siret

          For k = 2 To 6 '1ere ligne correspond aux intitulés donc on commence à la 2è ligne

          Call filtre(k)
          Next

          Application.DisplayAlerts = False
          Sheets(Array("maquette", "export")).Delete
          Range("A1").Select

          Application.DisplayAlerts = True
          Application.Quit
          End Sub

          Sub base()

          Sheets("export").Select
          Range("A1").Select
          Range(Selection, Selection.End(xlToRight)).Select
          der_col = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
          Range(Selection, Selection.End(xlDown)).Select
          der_lig = Range("A" & Rows.Count).End(xlUp).Row
          MyArea = "=export!R1C1:R" & der_lig & "C" & der_col
          ActiveWorkbook.Names.Add Name:="base", RefersToR1C1:=MyArea
          End Sub

          ' Liste siret

          Sub siret()
          Dim base2 As Variant
          Sheets("export").Select
          Range("A2").Select
          Range(Selection, Selection.End(xlToRight)).Select
          Range(Selection, Selection.End(xlDown)).Select
          Selection.Name = "base2"

          'nettoyage de la zone
          Range("ZA1").Select
          Range(Selection, Selection.End(xlToRight)).Select
          Range(Selection, Selection.End(xlDown)).Clear

          Range("A1:D50000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
          "ZA1"), Unique:=True

          nb_siret = Range("ZA2").End(xlDown).Row - 1

          'Tri par siret croissant
          Range("ZA2:ZD" & nb_siret + 1).Select
          Selection.Sort Key1:=Range("ZA2:ZD" & nb_siret + 1), Order1:=xlAscending
          Selection.Name = "liste_pni"

          ' liste siret
          Range("ZA2:ZA" & nb_siret + 1).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
          "ZZ1"), Unique:=True

          Range("ZZ2:ZZ" & nb_siret + 1).Name = "liste_siret"

          End Sub

          'remplissage de la maquette
          Sub filtre(k As Integer)

          Application.ScreenUpdating = False
          Sheets("Maquette").Copy After:=Sheets("export")
          ActiveSheet.Name = "siret_" & Sheets("export").Range("ZA" & k) & Sheets("export").Range("ZC" & k)

          Dim feuille_siret As String
          feuille_siret = ActiveSheet.Name
          Range("base").Rows("1:1").Copy
          ActiveSheet.Select
          Range("AB2").Select
          ActiveSheet.Paste

          Range("Y1") = "DC_LBLETTDT"
          Range("Z1") = "Type"
          Range("AA1") = "SIRET"

          Range("AA2") = Sheets("export").Range("ZA" & k) 'DT
          Range("Y2") = Sheets("export").Range("ZB" & k) 'Type
          Range("Z2") = Sheets("export").Range("ZC" & k) 'siret

          Sheets(feuille_siret).Select
          Range("Y1:AA2").Select
          Dim crit, extr As Range
          Set crit = Sheets(feuille_siret).Range("Y1:AA2")
          Set extr = Sheets(feuille_siret).Range(Cells(2, 28), Cells(2, 28 + der_col - 1))
          'Application.CutCopyMode = False
          'zone de criteres
          ' ActiveWorkbook.Names.Add Name:="crit", RefersTo:= _
          ' "='" & Sheets(feuille_siret).Name & "'!R1C27:R2C27"
          ActiveWorkbook.Names.Add Name:="crit", RefersTo:=crit

          'zone d'extraction
          Range("AB2").Select
          Range(Selection, Selection.End(xlToRight)).Select
          ActiveWorkbook.Names.Add Name:="extr", RefersTo:=extr

          'filtre
          Range("base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("crit"), CopyToRange:=Range("extr"), Unique:=True

          End Sub



          Je vous remercie.

          Bonne journéE.
          1. Bonjour,

            Je vois un filtre élaboré dans la Sub "Siret", et je constate que vous prenez bien 4 colonnes (de A à D), donc 4 critères:

                Range("A1:D50000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("ZA1"), Unique:=True


            Est-ce bien là votre problème?

            Cdlt
            1. Bonjour Frenchie,

              je m'excuse de ne pas avoir précisé mais c'est le dernier filtre qui ne fonctionne pas:

              Range("base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("crit"), CopyToRange:=Range("extr"), Unique:=True

              Cordialement
              1. D'après ce que je crois comprendre, l'erreur se situe ici
                    Set crit = Sheets(feuille_siret).Range("Y1:AA2")


                les critères sont uniquement en ligne 1
                    Set crit = Sheets(feuille_siret).Range("Y1:AA1")


                Quelle est l'utilité de ces 3 lignes? Si elles n'existent pas, ça fonctionne aussi, non?
                Range("AA2") = Sheets("export").Range("ZA" & k) 'DT
                Range("Y2") = Sheets("export").Range("ZB" & k) 'Type
                Range("Z2") = Sheets("export").Range("ZC" & k) 'siret


                Essayez
                1. Set crit = Sheets(feuille_siret).Range("Y1:AA2") me prend qu'une seule occurence de l'extraction attendue

                  Set crit = Sheets(feuille_siret).Range("Y1:AA1") me prend toute la base sans filtre et ce n'est pas ce que j'attends.

                  Les 3 lignes sont juste là pour moi, pour me repérer.

                  Merci en tout cas Frenchie.
                  1. vous trouverez ci joint le lien vers mon fichier.

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

                    Merci de votre aide
                    1. Bonjour,
                      Je suis absent mercredi tout le jour, reprise jeudi. Patience.
                    2. Contributeur
                      à ton tour d'expliquer comment provoquer l'anomalie.
                    3. Bonjour yg_be,
                      C'est bien dommage que nous ne profitons pas de la votre.
                    4. Contributeur
                      jeepipy, c'est bien d'avoir partagé ton fichier, on peut maintenant progresser. explique-nous maintenant comment provoquer le comportement inattendu que tu as observé.
                  2. Bonjour à tous,

                    je tiens à m'excuser mais je n'ai pas optimisé au mieux mon fichier pour que vous le testiez correctement.
                    Je vais le refaire mais mon problème brièvement est que les extractions faites par les filtres ne restituaient pas les différents 'pni'. Ils n'extrayaient que les observations pour un seul 'pni'.
                    Là en testant, je constate que le filtre fonctionne correctement.
                    Néanmoins j'ai énormément allégé le nombre de variables (120 variables dans mon fichier initial).
                    Je reste ouvert à vos suggestions.

                    je vous remercie.

                    Cordialement.
                    1. Contributeur
                      si tout va bien, peux-tu marquer le sujet comme résolu, via la roue dentée à droite du titre?
                    2. Merci, je ne savais pas.
                  3. Merci à tous.
                    Mon problème provenait d'un espace dans certaines modalités.