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

Bonjour à toutes et à tous,
Imaginons une colonne Excel (faisant partie d'un tableau de type base de do=
nné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 (visib=
les ET NON VISIBLES) sans effacer le(s) critère(s) de filtre sur cette co=
lonne.
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
Imaginons une colonne Excel (faisant partie d'un tableau de type base de do=
nné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 (visib=
les ET NON VISIBLES) sans effacer le(s) critère(s) de filtre sur cette co=
lonne.
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
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
'----------------------------------------------------
le critère utilisé : T2.Range.AutoFilter Field:=A, Criteria1:=.Criteria1, Criteria2:=.Criteria2
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
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
Il est plus complet et plus efficace!
'----------------------------------------------------------------
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
'----------------------------------------------------------------
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