Problème filtre élaboré

Résolu
jeepipy Messages postés 88 Statut Membre -  
jeepipy Messages postés 88 Statut Membre -
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. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour,

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

    Cdlt
    0
  2. jeepipy Messages postés 88 Statut Membre 155
     
    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.
    0
  3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, peux-tu partager ton fichier?
    0
  4. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jeepipy Messages postés 88 Statut Membre 155
     
    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.
    0
  7. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
    0
  8. jeepipy Messages postés 88 Statut Membre 155
     
    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
    0
  9. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
    0
  10. jeepipy Messages postés 88 Statut Membre 155
     
    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.
    0
  11. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Je pense que sans le fichier c'est presque impossible de trouver la petite défaillance dans le code.
    https://www.cjoint.com/
    0
  12. jeepipy Messages postés 88 Statut Membre 155
     
    vous trouverez ci joint le lien vers mon fichier.

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

    Merci de votre aide
    0
    1. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
       
      Bonjour,
      Je suis absent mercredi tout le jour, reprise jeudi. Patience.
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      à ton tour d'expliquer comment provoquer l'anomalie.
      0
    3. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
       
      Bonjour yg_be,
      C'est bien dommage que nous ne profitons pas de la votre.
      0
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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é.
      0
  13. jeepipy Messages postés 88 Statut Membre 155
     
    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.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      si tout va bien, peux-tu marquer le sujet comme résolu, via la roue dentée à droite du titre?
      0
    2. jeepipy Messages postés 88 Statut Membre 155
       
      Merci, je ne savais pas.
      0
  14. jeepipy Messages postés 88 Statut Membre 155
     
    Merci à tous.
    Mon problème provenait d'un espace dans certaines modalités.
    0