XL 2019 VBA - Autofilter - Prob: Copie toute la plage sans prendre en compte le filtre

Lolexcel

XLDnaute Nouveau
Bonsoir !

J'ai un souci avec la fonction Autofilter sur VBA. La macro copie toute la plage de données sans prendre en compte le critère. Je ne comprends vraiment pas d'où vient le problème, d'autant plus qu'appliquée sur une autre feuille avec un autre critère, elle fonctionne parfaitement -_-

Sub TAB_LegSelect()

Dim Derlig1&, Derlig2&

Derlig1 = Sheets("LegSelect").Range("A" & Rows.Count).End(xlUp).Row
If Derlig1 <= 2 Then DerligS = 2
Sheets("LegSelect").Range("A2:F" & Derlig1).Clear

With Sheets("ListTotalLeg")
.AutoFilterMode = False
Derlig2 = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A2:E2").AutoFilter
.Range("$A$2:$E$" & Derlig2).AutoFilter Field:=5, Criteria1:="x"
.Range("$A$2:$C$" & Derlig2).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("LegSelect").Range("A2")
.AutoFilterMode = False
End With

End Sub


Une idée de ce qui coince ?

Merci d'avance !!
Lolexcel
 

Pièces jointes

  • TAB_PlanCulture.xlsm
    50.2 KB · Affichages: 7
Solution
Re

Quand tu copies copie juste !!! ;)
(CTRL C CTRL V est ton ami !!!) 🤣

Le bon code :

VB:
Sub TAB_LegSelect()

Dim Derlig&, Derlig2&

Derlig = Sheets("LegSelect").Range("A" & Rows.Count).End(xlUp).Row
If Derlig <= 2 Then Derlig = 2
Sheets("LegSelect").Range("A2:F" & Derlig).Clear

With Sheets("ListTotalLeg")
    .AutoFilterMode = False
    Derlig2 = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A1:E1").AutoFilter
    .Range("$A$1:$E$" & Derlig2).AutoFilter Field:=5, Criteria1:="x"
    .Range("$A$2:$C$" & Derlig2).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("LegSelect").Range("A2")
    .AutoFilterMode = False
End With

End Sub

Et ton erreur :
Range("A2:E2").AutoFilter
.Range("$A$2:$E$"...

Phil69970

XLDnaute Barbatruc
Re

Essaye comme ceci :
VB:
Sub TAB_LegSelect()

Dim Derlig1&, Derlig2&

Derlig1 = Sheets("LegSelect").Range("A" & Rows.Count).End(xlUp).Row
If Derlig1 <= 2 Then Derlig1 = 2
Sheets("LegSelect").Range("A2:F" & Derlig1).Clear

With Sheets("ListTotalLeg")
    .AutoFilterMode = False
    Derlig2 = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A2:E2").AutoFilter
    .Range("$A$2:$E$" & Derlig2).AutoFilter Field:=5, Criteria1:="x"
    .Range("$A$2:$C$" & Derlig2).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("LegSelect").Range("A2")
    .AutoFilterMode = False
End With

End Sub

@Phil69970
 

Phil69970

XLDnaute Barbatruc
Re

Quand tu copies copie juste !!! ;)
(CTRL C CTRL V est ton ami !!!) 🤣

Le bon code :

VB:
Sub TAB_LegSelect()

Dim Derlig&, Derlig2&

Derlig = Sheets("LegSelect").Range("A" & Rows.Count).End(xlUp).Row
If Derlig <= 2 Then Derlig = 2
Sheets("LegSelect").Range("A2:F" & Derlig).Clear

With Sheets("ListTotalLeg")
    .AutoFilterMode = False
    Derlig2 = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A1:E1").AutoFilter
    .Range("$A$1:$E$" & Derlig2).AutoFilter Field:=5, Criteria1:="x"
    .Range("$A$2:$C$" & Derlig2).SpecialCells(xlCellTypeVisible).Copy Destination:=Sheets("LegSelect").Range("A2")
    .AutoFilterMode = False
End With

End Sub

Et ton erreur :
Range("A2:E2").AutoFilter
.Range("$A$2:$E$" & Derlig2).AutoFilter Field:=5, Criteria1:="x"

au lieu de :
.Range("A1:E1").AutoFilter
.Range("$A$1:$E$" & Derlig2).AutoFilter Field:=5, Criteria1:="x"

@Phil69970
 

Lolexcel

XLDnaute Nouveau
Mince, merci, ça fonctionne ! Prochaine fois, je n'essaye pas de trouver ce qui cloche, je copie-colle direct :p

Par contre, je ne comprends pas pourquoi si l'AutoFilter est mis en ligne 1 ça fonctionne, et pas en ligne 2. Est-ce que tu pourrais m'expliquer stp ^^ ?
 

Phil69970

XLDnaute Barbatruc
Re

Car le filtre se fait comme ceci : ==> Incorrect

1670958649197.png


Au lieu de comme cela : ==> Correct

1670958704237.png


@Phil69970
 

Discussions similaires

Réponses
3
Affichages
577

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87