Copier/Coller de toutes les cellules d'une colonne filtrée

7 réponses
Avatar
Patrick_67
Bonjour =E0 toutes et =E0 tous,

Imaginons une colonne Excel (faisant partie d'un tableau de type base de do=
nn=E9es) sur laquelle un filtre est appliqu=E9.
Seules sont donc visibles les cellules qui correspondent au(x) crit=E8re(s)=
de filtre pour cette colonne.
Je souhaite n=E9anmoins copier toutes les cellules de cette colonnes (visib=
les ET NON VISIBLES) sans effacer le(s) crit=E8re(s) de filtre sur cette co=
lonne.
Par d=E9faut, Excel ne copie QUE les cellules visibles.
Or je souhaite donc copier TOUTES les cellules (affich=E9es ET masqu=E9es) =
de cette colonne.

Merci d'avance pour vos r=E9ponses =E0 ce sujet...

Patrick

7 réponses

Avatar
MichD
Bonjour,


Voici un bout de code. Cet exemple copie un "Tableau" de la "Feuil1" (nom de la propriété "Name" de l'objet "Feuille" visible
seulement dans la fenêtre de l'éditeur de code) vers la feuil2 à partir de la cellule H11 (adresse au hasard) en appliquant
le filtre du tableau 1 vers le tableau2.
Dans mon exemple, sur un champ numérique, j'ai utilisé comme critère : ">5" ou plus grand que ">15".
Le code ressemble à ceci :

'----------------------------------------------------
Sub Test100()

Dim T As ListObject, T2 As ListObject, X As Variant
Dim LeFiltre As Filter, Rg As Range, A As Long
Dim NomFeuille As String

Application.ScreenUpdating = False
NomFeuille = ActiveSheet.Name

'Où est le tableau à copier
Set T = Feuil1.ListObjects(1)

'Destination de la copie
Set Rg = Feuil2.Range("H11")

'Copie du tableau
With T
.Range.Copy Rg
Set T2 = Rg.ListObject
End With
T.Parent.Select
T.Range.Select

'Section qui applique les mêmes filtres sur le tableau
'de destinatin que le tableau source
'On Error Resume Next
With T
For Each LeFiltre In .Range.Parent.AutoFilter.Filters
A = A + 1
With LeFiltre
If .On Then
T2.Range.AutoFilter Field:=A, Criteria1:=.Criteria1, Criteria2:=.Criteria2
End If
End With
Next
End With
Worksheets(NomFeuille).Select
Application.EnableEvents = True
End Sub
'----------------------------------------------------
Avatar
MichD
J'ai omis de mentionner que cette ligne de code peut-être différente selon le type de données sur laquelle tu as un filtre et
le critère utilisé : T2.Range.AutoFilter Field:=A, Criteria1:=.Criteria1, Criteria2:=.Criteria2
Avatar
DanielCo
Bonjour,
Ou aussi, avec une seule colonne filtrée :
With Sheets(1).AutoFilter
Var = Application.Transpose(.Range)
Sheets(2).[A1].Resize(UBound(Var)) = Application.Transpose(Var)
End With
Cordidalement.
Daniel


Bonjour à toutes et à tous,

Imaginons une colonne Excel (faisant partie d'un tableau de type base de
données) sur laquelle un filtre est appliqué. Seules sont donc visibles les
cellules qui correspondent au(x) critère(s) de filtre pour cette colonne. Je
souhaite néanmoins copier toutes les cellules de cette colonnes (visibles ET
NON VISIBLES) sans effacer le(s) critère(s) de filtre sur cette colonne. Par
défaut, Excel ne copie QUE les cellules visibles. Or je souhaite donc copier
TOUTES les cellules (affichées ET masquées) de cette colonne.

Merci d'avance pour vos réponses à ce sujet...

Patrick
Avatar
MichD
Bonjour Daniel,

On n'a pas compris la même chose!

A ) Le demandeur parle d'un "Tableau" sur lequel un filtre est appliqué.

B ) La plage où sont copiées les données doit comprendre toutes les données,
mais les filtres (critères) du premier tableau doivent demeurer appliqués sur
le "tableau" qui vient d'être créer.

Je ne vois pas comment ta proposition répond à la question.

Voici un fichier exemple utilisant le code que je propose!
http://cjoint.com/?DFjvZt6V5HI
Avatar
MichD
Je vous invite à retenir plutôt le code de ce fichier : http://cjoint.com/?DFkcx4aWQK1
Il est plus complet et plus efficace!
Avatar
MichD
Le code du fichier exemple :

'----------------------------------------------------------------
Sub Test()

Dim T As ListObject, T2 As ListObject, X As Variant
Dim LeFiltre As Filter, Rg As Range, A As Long

'Où est le tableau à copier
Set T = Feuil1.ListObjects(1)

'Destination de la copie
Set Rg = Feuil2.Range("H11")

'Copie du tableau
With T
.Range.Copy Rg
Set T2 = Rg.ListObject
End With

'Section qui applique les mêmes filtres sur le tableau
'de destination que le tableau source
With Worksheets(T.Range.Parent.Name)
With .ListObjects(T.Name)
For Each LeFiltre In .AutoFilter.Filters
A = A + 1
With LeFiltre
If .On Then
Select Case .Operator
Case 1, 2 'XlAnd ou XlOr
T2.Range.AutoFilter Field:=A, Criteria1:=.Criteria1, _
Operator:=.Operator, Criteria2:=.Criteria2
Case Else
T2.Range.AutoFilter Field:=A, Criteria1:=.Criteria1, _
Operator:=.Operator
End Select
End If
End With
Next
End With
End With
End Sub
'----------------------------------------------------------------
Avatar
DanielCo
Bonjour Denis,
Effectivement !
1. c'est toute l'ambiguïté du terme "tableau".
2. j'ai compris : sans effacer les critères de filtre sur la colonne
copiée "sans effacer le(s) critère(s) de filtre sur cette colonne".
Reste à connaître l'avis de Patrick.
Cordialement.
Daniel


Bonjour Daniel,

On n'a pas compris la même chose!

A ) Le demandeur parle d'un "Tableau" sur lequel un filtre est appliqué.

B ) La plage où sont copiées les données doit comprendre toutes les données,
mais les filtres (critères) du premier tableau doivent demeurer
appliqués sur
le "tableau" qui vient d'être créer.

Je ne vois pas comment ta proposition répond à la question.

Voici un fichier exemple utilisant le code que je propose!
http://cjoint.com/?DFjvZt6V5HI