Filtre élaboré

Résolu
ti_mouton Messages postés 153 Statut Membre -  
ti_mouton Messages postés 153 Statut Membre -
Bonjour,

J'ai besoin de renseigner un code VBA qui me permette de filtré les données contenu dans un TCD.
Le TCD se trouve dans la feuille nommée "Base", le critère du filtre se trouve dans la plage B1:C3 de la feuille "BLOCS", je veux que le filtre soit copié en cellule D6 de cette même feuille "BLOCS".
Voici ce que j'ai fait jusqu'à présent (et qui ne fonctionne pas...)
Sub FiltreAvance()
Sheets("Base").Range("Tableau croisé dynamique1").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("BLOCS").[B1:C3], CopyToRange:=Sheets("BLOCS").[D6], Unique:=True
End Sub

Mon pb est que le TCD contient déjà plusieurs dizaines de milliers de lignes, et il est amené à évoluer, je ne peux donc pas renseigner une plage de cellule précise du style Range("A1:Y100").AdvancedFilter. Auriez vous des idées pour m'aider ?

Merci d'avance

1 réponse

  1. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
     
    Bonjour,

    Pourquoi ne pas utiliser une variable?

    Sub FiltreAvance()
    
    Dim DL As Integer 'Définit la variable DL pour dernière ligne
    
    DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'Le 1 est à adapter, il faut mettre le numéro de ta colonne qui est remplie jusqu'à la fin du tableau
    
    Sheets("Base").Range(Cells(1, 1), Cells(i, "Nombre total de colonnes")).AdvanceFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("BLOCS").[B1:C3], CopyToRange:=Sheets("BLOCS").[D6], Unique:=True
    
    End Sub


    Je verrais ça comme ça...
    0
    1. ti_mouton Messages postés 153 Statut Membre
       
      Bonjour Kuartz,

      Merci pour ta réponse ! J'ai très peu de connaissances en VBA, c'est pourquoi je n'avais pas pensé cette histoire de variable. Je vais essayer d'utiliser ton code, par contre, mon TCD ne commence qu'à partir de la ligne 15 de la feuille "Base", comment cela modifie t il le code ?

      Merci
      0
    2. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Ca ne pose pas de problème mais je suis en train d'essayer le code et quelque chose cloche, je ne connais pas bien le code "AdvancedFilter" et on dirait qu'il ne s'utilise pas comme ça.

      Si ton tableau commence à la ligne 15, tu dois changer la première "Cells" de la Range :

      Sub FiltreAvance()
      
      Dim DL As Integer 'Définit la variable DL pour dernière ligne
      
      DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'Le 1 est à adapter, il faut mettre le numéro de ta colonne qui est remplie jusqu'à la fin du tableau
      
      Sheets("Base").Range(Cells(15, 1), Cells(DL, "Nombre total de colonnes")).Select
      
      selection.AdvanceFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("BLOCS").[B1:C3], CopyToRange:=Sheets("BLOCS").[D6], Unique:=True
      
      End Sub
      0
    3. ti_mouton Messages postés 153 Statut Membre
       
      En effet c'est ce que j'ai fait mais voyant que le code ne marchait pas je pensais que ça venait peut être de là... Dommage que ça ne marche pas, ce code était simple d'utilisation !
      0
    4. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65 > Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention  
       
      Le code final (j'ai fait plein d'erreurs désolé, je suis pas reveillé...)

      Sub FiltreAvance()
      
      Dim DL As Integer 'Définit la variable DL pour dernière ligne
      
      DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'Le 1 est à adapter, il faut mettre le numéro de ta colonne qui est remplie jusqu'à la fin du tableau
      
      Sheets(1).Range(Cells(15, 1), Cells(DL, 3)).Select
      
      Selection.AdvanceFilter Action:=xlFilterCopy, CriteriaRange:=Sheets(1).[B1:C3], CopyToRange:=Sheets(1).[D6], Unique:=True
      
      End Sub
      


      Vois si il convient et reviens moi ;)
      0
    5. Kuartz Messages postés 852 Date d'inscription   Statut Membre Dernière intervention   65
       
      Essaye le dernier code que j'ai mis.
      0