Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Copie de filtres automatiques

9 réponses
Avatar
Maïa
Bonjour,

J'ai un classeur avec plusieurs feuilles ayant exactement les m=EAmes
colonnes. Ces colonnes sont en mode filtre automatique. Lorsque je
param=E8tre manuellement mes filtres automatiques sur l'une des
feuilles, j'aimerais pouvoir r=E9cup=E9rer le param=E9trage du filtarge que
j'ai effectu=E9 pour le reproduire sur toutes les autres feuilles. Cela
m'=E9viterait ainsi de devoir reproduire sur toutes mes feuilles les
m=EAmes op=E9rations de filtrage, d'autant plus que j'ai 108 colonnes, 17
feuilles, et que je suis susceptible de faire des filtres
personnalis=E9s.

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

D'avance merci

9 réponses

Avatar
isabelle
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



Avatar
isabelle
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




Avatar
Maïa
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 !
Avatar
Maïa
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
Avatar
isabelle
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

Avatar
Maïa
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
Avatar
isabelle
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

Avatar
Maïa
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
Avatar
isabelle
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