Filtre élaboré

Résolu/Fermé
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020 - 15 juil. 2015 à 10:50
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020 - 20 juil. 2015 à 08:40
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

Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 15/07/2015 à 11:03
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
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020
15 juil. 2015 à 11:11
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
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
Modifié par Kuartz le 15/07/2015 à 11:22
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
ti_mouton Messages postés 143 Date d'inscription vendredi 29 mai 2015 Statut Membre Dernière intervention 5 septembre 2020
15 juil. 2015 à 11:20
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
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61 > Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019
15 juil. 2015 à 11:23
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
Kuartz Messages postés 850 Date d'inscription vendredi 13 février 2015 Statut Membre Dernière intervention 15 février 2019 61
15 juil. 2015 à 11:24
Essaye le dernier code que j'ai mis.
0