Copie de filtres automatiques

Le
Maïa
Bonjour,

J'ai un classeur avec plusieurs feuilles ayant exactement les mêmes
colonnes. Ces colonnes sont en mode filtre automatique. Lorsque je
paramètre manuellement mes filtres automatiques sur l'une des
feuilles, j'aimerais pouvoir récupérer le paramétrage du filtarge que
j'ai effectué pour le reproduire sur toutes les autres feuilles. Cela
m'éviterait ainsi de devoir reproduire sur toutes mes feuilles les
mêmes opérations de filtrage, d'autant plus que j'ai 108 colonnes, 17
feuilles, et que je suis susceptible de faire des filtres
personnalisés.

Quelqu'un sait-il comment faire cela dans une macro SVP ?

D'avance merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #21223451
bonjour Maia,

Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String

Sub LireFilters() 'lire le filtre de Feuil1
Set w = Worksheets("Feuil1")
With w.AutoFilter
currentFiltRange = .Range.Address
With .Filters
ReDim filterArray(1 To .Count, 1 To 3)
For f = 1 To .Count
With .Item(f)
If .On Then
filterArray(f, 1) = .Criteria1
If .Operator Then
filterArray(f, 2) = .Operator
filterArray(f, 3) = .Criteria2
End If
End If
End With
Next
End With
End With

End Sub

Sub RestoreFilters() 'applique un filtre identique à la Feuil1 sur la
feuille active
Set w = ActiveSheet
w.AutoFilterMode = False
For col = 1 To UBound(filterArray(), 1)
If Not IsEmpty(filterArray(col, 1)) Then
If filterArray(col, 2) Then
w.Range(currentFiltRange).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1), _
Operator:=filterArray(col, 2), _
Criteria2:=filterArray(col, 3)
Else
w.Range(currentFiltRange).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1)
End If
End If
Next
End Sub


isabelle

Le 2010-02-18 08:32, Maïa a écrit :
Bonjour,

J'ai un classeur avec plusieurs feuilles ayant exactement les mêmes
colonnes. Ces colonnes sont en mode filtre automatique. Lorsque je
paramètre manuellement mes filtres automatiques sur l'une des
feuilles, j'aimerais pouvoir récupérer le paramétrage du filtarge que
j'ai effectué pour le reproduire sur toutes les autres feuilles. Cela
m'éviterait ainsi de devoir reproduire sur toutes mes feuilles les
mêmes opérations de filtrage, d'autant plus que j'ai 108 colonnes, 17
feuilles, et que je suis susceptible de faire des filtres
personnalisés.

Quelqu'un sait-il comment faire cela dans une macro SVP ?

D'avance merci



isabelle
Le #21223581
au cas ou il y aurait des coupure de ligne involontaire,
http://cjoint.com/?cspGoP0vbQ

isabelle

Le 2010-02-18 09:02, isabelle a écrit :
bonjour Maia,

Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String

Sub LireFilters() 'lire le filtre de Feuil1
Set w = Worksheets("Feuil1")
With w.AutoFilter
currentFiltRange = .Range.Address
With .Filters
ReDim filterArray(1 To .Count, 1 To 3)
For f = 1 To .Count
With .Item(f)
If .On Then
filterArray(f, 1) = .Criteria1
If .Operator Then
filterArray(f, 2) = .Operator
filterArray(f, 3) = .Criteria2
End If
End If
End With
Next
End With
End With

End Sub

Sub RestoreFilters() 'applique un filtre identique à la Feuil1 sur la
feuille active
Set w = ActiveSheet
w.AutoFilterMode = False
For col = 1 To UBound(filterArray(), 1)
If Not IsEmpty(filterArray(col, 1)) Then
If filterArray(col, 2) Then
w.Range(currentFiltRange).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1), _
Operator:=filterArray(col, 2), _
Criteria2:=filterArray(col, 3)
Else
w.Range(currentFiltRange).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1)
End If
End If
Next
End Sub


isabelle

Le 2010-02-18 08:32, Maïa a écrit :
Bonjour,

J'ai un classeur avec plusieurs feuilles ayant exactement les mêmes
colonnes. Ces colonnes sont en mode filtre automatique. Lorsque je
paramètre manuellement mes filtres automatiques sur l'une des
feuilles, j'aimerais pouvoir récupérer le paramétrage du filtarge que
j'ai effectué pour le reproduire sur toutes les autres feuilles. Cela
m'éviterait ainsi de devoir reproduire sur toutes mes feuilles les
mêmes opérations de filtrage, d'autant plus que j'ai 108 colonnes, 17
feuilles, et que je suis susceptible de faire des filtres
personnalisés.

Quelqu'un sait-il comment faire cela dans une macro SVP ?

D'avance merci




Maïa
Le #21247601
On 18 fév, 15:02, isabelle wrote:
bonjour Maia,

Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String

Sub LireFilters() 'lire le filtre de Feuil1
Set w = Worksheets("Feuil1")
With w.AutoFilter
     currentFiltRange = .Range.Address
     With .Filters
         ReDim filterArray(1 To .Count, 1 To 3)
         For f = 1 To .Count
             With .Item(f)
                 If .On Then
                     filterArray(f, 1) = .Criteri a1
                     If .Operator Then
                         filterArray(f, 2) = .Operator
                         filterArray(f, 3) = .Criteria2
                     End If
                 End If
             End With
         Next
     End With
End With

End Sub

Sub RestoreFilters() 'applique un filtre identique à la Feuil1 sur la
feuille active
Set w = ActiveSheet
w.AutoFilterMode = False
For col = 1 To UBound(filterArray(), 1)
     If Not IsEmpty(filterArray(col, 1)) Then
         If filterArray(col, 2) Then
             w.Range(currentFiltRange).AutoFilter field:= col, _
                 Criteria1:=filterArray(col, 1), _
                     Operator:=filterArray(col, 2 ), _
                 Criteria2:=filterArray(col, 3)
         Else
             w.Range(currentFiltRange).AutoFilter field:= col, _
                 Criteria1:=filterArray(col, 1)
         End If
     End If
Next
End Sub

isabelle

Le 2010-02-18 08:32, Maïa a écrit :



> Bonjour,

> J'ai un classeur avec plusieurs feuilles ayant exactement les mêmes
> colonnes. Ces colonnes sont en mode filtre automatique. Lorsque je
> paramètre manuellement mes filtres automatiques sur l'une des
> feuilles, j'aimerais pouvoir récupérer le paramétrage du filtarge que
> j'ai effectué pour le reproduire sur toutes les autres feuilles. Cela
> m'éviterait ainsi de devoir reproduire sur toutes mes feuilles les
> mêmes opérations de filtrage, d'autant plus que j'ai 108 colonnes, 17
> feuilles, et que je suis susceptible de faire des filtres
> personnalisés.

> Quelqu'un sait-il comment faire cela dans une macro SVP ?

> D'avance merci- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Bonjour,

Merci pour la réponse. Je vais la tester au plus vite !
Maïa
Le #21360851
Bonjour,

Le code fonctionne très bien si j'ai plus de lignes dans la feuille
sur laquelle j'effectue le filtre que sur les autres.

En effet si j'ai moins de lignes sur la feuille dans laquelle
j'effectue le filtre et que je fais tourner la macro, toutes mes
lignes ne sont pas filtrées sur les autres feuilles.

Y a-t-il une solution pour prendre en compte toutes les lignes des
feuilles => j'ai des feuilles avec toujours le même nombre de colonnes
(et le même intitulé), mais avec un nombre de lignes variable.

Merci
isabelle
Le #21362671
bonjour Maïa,

as tu modifier cette ligne,
Set w = Worksheets("Feuil1")
par
Set w = Activesheet
pour l'adapter à la feuille ou tu exécute la macro

isabelle

Le 2010-03-11 10:25, Maïa a écrit :
Bonjour,

Le code fonctionne très bien si j'ai plus de lignes dans la feuille
sur laquelle j'effectue le filtre que sur les autres.

En effet si j'ai moins de lignes sur la feuille dans laquelle
j'effectue le filtre et que je fais tourner la macro, toutes mes
lignes ne sont pas filtrées sur les autres feuilles.

Y a-t-il une solution pour prendre en compte toutes les lignes des
feuilles => j'ai des feuilles avec toujours le même nombre de colonnes
(et le même intitulé), mais avec un nombre de lignes variable.

Merci

Maïa
Le #21364631
Le problème vient du fait que la macro LireFilters détecte la plage à
filtrer sur la feuille dont je veux copier le filtre => par exemple $A
$1:$IP$231 dans currentfiltrange

Du coup, lorsque je fais tourner la macro RestoreFilters sur les
autres feuilles, ça ne filtre que jusqu'à la ligne 231, même si les
autres feuilles ont par exemple 400 lignes. Il faudraitq ue je puisse
redéfinir le currentfiltrange à chaque fois que j'applique la macro
RestoreFilters, mais je ne sais pas comment faire.

Maïa
isabelle
Le #21366341
bonjour Maïa,

j'ai modifié la deuxième macro comme ca :

Sub RestoreFilters() 'applique un filtre identique à la Feuil1 sur la
feuille active
Set w = ActiveSheet
With w.AutoFilter
currentFiltRange1 = .Range.Address
.AutoFilterMode = False
For col = 1 To UBound(filterArray(), 1)
If Not IsEmpty(filterArray(col, 1)) Then
If filterArray(col, 2) Then
w.Range(currentFiltRange1).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1), _
Operator:=filterArray(col, 2), _
Criteria2:=filterArray(col, 3)
Else
w.Range(currentFiltRange1).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1)
End If
End If
Next
End With
End Sub

isabelle

Le 2010-03-12 06:08, Maïa a écrit :
Le problème vient du fait que la macro LireFilters détecte la plage à
filtrer sur la feuille dont je veux copier le filtre => par exemple $A
$1:$IP$231 dans currentfiltrange

Du coup, lorsque je fais tourner la macro RestoreFilters sur les
autres feuilles, ça ne filtre que jusqu'à la ligne 231, même si les
autres feuilles ont par exemple 400 lignes. Il faudraitq ue je puisse
redéfinir le currentfiltrange à chaque fois que j'applique la macro
RestoreFilters, mais je ne sais pas comment faire.

Maïa

Maïa
Le #21386991
Bonjour Isabelle,

En modifiant la macro ça marche effectivement. Merci ! J'ai enfin pu
construire un fichier efficace.

Pour info, j'ai par contre j'ai remarqué que la macro ne reproduisait
pas les fonctions tri croissant et tri décroissant des filtres
automatiques.

Maïa
isabelle
Le #21391211
bonjour Maïa,

désolé mais je travaille sur xl2002 et il n'y a pas d'option de tri sur
le filtre automatique,
tu travail sur quel version ?

isabelle

Le 2010-03-16 10:53, Maïa a écrit :
Bonjour Isabelle,

En modifiant la macro ça marche effectivement. Merci ! J'ai enfin pu
construire un fichier efficace.

Pour info, j'ai par contre j'ai remarqué que la macro ne reproduisait
pas les fonctions tri croissant et tri décroissant des filtres
automatiques.

Maïa

Publicité
Poster une réponse
Anonyme