OVH Cloud OVH Cloud

Filtre élaboré

7 réponses
Avatar
Denys
Bonjour à tous,

Dans la macro suivante, Excel filtre et copie toutes les lignes sauf une
ayant la valeur 2003 en colonne V et la valeur "X" en colonne W...

Sauriez-vous pourquoi?

Sub Copier2003()
If [a4].Value = "" Then Exit Sub
On Error Resume Next
Range("AC1").Select
Dim Sh As Worksheet
Set Sh = Worksheets("Recap Workpage")
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
With Sh
.Range("AC1") = ""
.Range("AC2").FormulaLocal = "=(V2=2003)*(W2=""X"")"
With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sh.Range("AC1:AC2"), Unique:=False
.Offset(1).Resize(.Rows.Count - 1) _
.SpecialCells(xlCellTypeVisible).EntireRow.Offset(-1, 0).Select
End With
End With
Call Trsf2003
ShowAllData
End Sub

Sub Trsf2003()
Selection.Copy
Sheets("2003").Select
Call DerniereCell
ActiveSheet.Paste
Range("A1").Select
Columns("C:C").EntireColumn.AutoFit
Sheets("Recap Workpage").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A5").Select
End Sub

Voilà.... À chaque fois, il me reste une ligne avec 2003 en colonne V et "X"
en colonne W.....et je ne sais pas pourquoi..

Merci

Denys

7 réponses

Avatar
michdenis
Bonjour Denys,

C'est sûrement à cause de ta zone de critère que tu as défini :

.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"

Ce critère devrait te retourner toutes les lignes ou dans la colonne V 03 ET colonne W = "X"
ATTENTION AU "ET" cela signifie que les 2 colonnes sur la même ligne
doivent répondre au critère... si c'est l'une ou l'autre, tu utilises un "OU"
et ton critère devient : "=Ou(V2 03)+(W2=""X"")=1"

Cependant, je suppose que tu as oublié la ligne contenant les étiquettes dans la
définition de ta plage de cellule. Et le filtre te retourne la première ligne de données
au lieu de retourner seulement la première ligne qui devrait être la ligne d'étiquette.

With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
Il me semble que cela devrait être :
With .Range("V1:W" & .Range("W65536").End(xlUp).Row)


Salutations!


"Denys" a écrit dans le message de news:
Bonjour à tous,

Dans la macro suivante, Excel filtre et copie toutes les lignes sauf une
ayant la valeur 2003 en colonne V et la valeur "X" en colonne W...

Sauriez-vous pourquoi?

Sub Copier2003()
If [a4].Value = "" Then Exit Sub
On Error Resume Next
Range("AC1").Select
Dim Sh As Worksheet
Set Sh = Worksheets("Recap Workpage")
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
With Sh
.Range("AC1") = ""
.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"
With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sh.Range("AC1:AC2"), Unique:úlse
.Offset(1).Resize(.Rows.Count - 1) _
.SpecialCells(xlCellTypeVisible).EntireRow.Offset(-1, 0).Select
End With
End With
Call Trsf2003
ShowAllData
End Sub

Sub Trsf2003()
Selection.Copy
Sheets("2003").Select
Call DerniereCell
ActiveSheet.Paste
Range("A1").Select
Columns("C:C").EntireColumn.AutoFit
Sheets("Recap Workpage").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A5").Select
End Sub

Voilà.... À chaque fois, il me reste une ligne avec 2003 en colonne V et "X"
en colonne W.....et je ne sais pas pourquoi..

Merci

Denys
Avatar
Denys
Bonjour Denis,

Merci bien pout ta réponse. J'avais bien changé la plage V2 pour V1 etc...
Quant aux conditions, c,est bien ET, pas OU.... Ce ne peut donc pas être le
problème.

C'est curieux, car Excel me laisse une ligne de 2003, ensuite 1 ligne de
2004 et enfin une ligne de 2005. Si bien que lorsque la macro a fini de
"tourner", il me reste 3 lignes sur la feuille originale. Ça fait
"pouiche"....

Je continue à chercher...

Merci encore

Denys


Bonjour Denys,

C'est sûrement à cause de ta zone de critère que tu as défini :

.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"

Ce critère devrait te retourner toutes les lignes ou dans la colonne V 03 ET colonne W = "X"
ATTENTION AU "ET" cela signifie que les 2 colonnes sur la même ligne
doivent répondre au critère... si c'est l'une ou l'autre, tu utilises un "OU"
et ton critère devient : "=Ou(V2 03)+(W2=""X"")=1"

Cependant, je suppose que tu as oublié la ligne contenant les étiquettes dans la
définition de ta plage de cellule. Et le filtre te retourne la première ligne de données
au lieu de retourner seulement la première ligne qui devrait être la ligne d'étiquette.

With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
Il me semble que cela devrait être :
With .Range("V1:W" & .Range("W65536").End(xlUp).Row)


Salutations!


"Denys" a écrit dans le message de news:
Bonjour à tous,

Dans la macro suivante, Excel filtre et copie toutes les lignes sauf une
ayant la valeur 2003 en colonne V et la valeur "X" en colonne W...

Sauriez-vous pourquoi?

Sub Copier2003()
If [a4].Value = "" Then Exit Sub
On Error Resume Next
Range("AC1").Select
Dim Sh As Worksheet
Set Sh = Worksheets("Recap Workpage")
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
With Sh
.Range("AC1") = ""
.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"
With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sh.Range("AC1:AC2"), Unique:úlse
.Offset(1).Resize(.Rows.Count - 1) _
.SpecialCells(xlCellTypeVisible).EntireRow.Offset(-1, 0).Select
End With
End With
Call Trsf2003
ShowAllData
End Sub

Sub Trsf2003()
Selection.Copy
Sheets("2003").Select
Call DerniereCell
ActiveSheet.Paste
Range("A1").Select
Columns("C:C").EntireColumn.AutoFit
Sheets("Recap Workpage").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A5").Select
End Sub

Voilà.... À chaque fois, il me reste une ligne avec 2003 en colonne V et "X"
en colonne W.....et je ne sais pas pourquoi..

Merci

Denys





Avatar
michdenis
Bonjour Denys,

Voici un exemple comment extraire seulement les données correspondant
au critère du filtre et copier ces données vers une autre feuille.

'----------------------------------------
Sub Filtre()

Dim Rg As Range, Rg1 As Range, DL As Long

With Worksheets("Feuil1")
'Plage sur laquelle s'effecture le filtre
Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row)
'Zone de critère
.Range("D1") = "" 'pour être sûr
.Range("D2").Formula = "=(A2 06)*(B2=""s"")"
'Attribution d'un nom à la plage de critère
.Range("D1:D2").Name = "Crit"

'le filtre élaboré :
With Rg
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("Crit")
'Définir la plage à copier
Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible)
End With

'Où copier le résultat du filtre
With Worksheets("Feuil2")
'Identifier la dernière ligne +1 de la plage A:A
DL = .Range("A:A").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row + 1

'copier les données du filtre
Rg1.Copy .Range("A" & DL)
End With

'afficher toutes les données
.ShowAllData
End With
'Supprime le NOM de la zone de critère
Application.Names("Crit").Delete
'Libère la mémoire des objets
Set Rg = Nothing: Set Rg1 = Nothing

End Sub
'----------------------------------------



Salutations!




"Denys" a écrit dans le message de news:
Bonjour Denis,

Merci bien pout ta réponse. J'avais bien changé la plage V2 pour V1 etc...
Quant aux conditions, c,est bien ET, pas OU.... Ce ne peut donc pas être le
problème.

C'est curieux, car Excel me laisse une ligne de 2003, ensuite 1 ligne de
2004 et enfin une ligne de 2005. Si bien que lorsque la macro a fini de
"tourner", il me reste 3 lignes sur la feuille originale. Ça fait
"pouiche"....

Je continue à chercher...

Merci encore

Denys


Bonjour Denys,

C'est sûrement à cause de ta zone de critère que tu as défini :

.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"

Ce critère devrait te retourner toutes les lignes ou dans la colonne V 03 ET colonne W = "X"
ATTENTION AU "ET" cela signifie que les 2 colonnes sur la même ligne
doivent répondre au critère... si c'est l'une ou l'autre, tu utilises un "OU"
et ton critère devient : "=Ou(V2 03)+(W2=""X"")=1"

Cependant, je suppose que tu as oublié la ligne contenant les étiquettes dans la
définition de ta plage de cellule. Et le filtre te retourne la première ligne de données
au lieu de retourner seulement la première ligne qui devrait être la ligne d'étiquette.

With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
Il me semble que cela devrait être :
With .Range("V1:W" & .Range("W65536").End(xlUp).Row)


Salutations!


"Denys" a écrit dans le message de news:
Bonjour à tous,

Dans la macro suivante, Excel filtre et copie toutes les lignes sauf une
ayant la valeur 2003 en colonne V et la valeur "X" en colonne W...

Sauriez-vous pourquoi?

Sub Copier2003()
If [a4].Value = "" Then Exit Sub
On Error Resume Next
Range("AC1").Select
Dim Sh As Worksheet
Set Sh = Worksheets("Recap Workpage")
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
With Sh
.Range("AC1") = ""
.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"
With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sh.Range("AC1:AC2"), Unique:úlse
.Offset(1).Resize(.Rows.Count - 1) _
.SpecialCells(xlCellTypeVisible).EntireRow.Offset(-1, 0).Select
End With
End With
Call Trsf2003
ShowAllData
End Sub

Sub Trsf2003()
Selection.Copy
Sheets("2003").Select
Call DerniereCell
ActiveSheet.Paste
Range("A1").Select
Columns("C:C").EntireColumn.AutoFit
Sheets("Recap Workpage").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A5").Select
End Sub

Voilà.... À chaque fois, il me reste une ligne avec 2003 en colonne V et "X"
en colonne W.....et je ne sais pas pourquoi..

Merci

Denys





Avatar
Denys
Bonjour Denis,

Curieux... le filtre s'effectue... mais pas la copie....Quoiqu'il en soit,
merci... je continue ...

Bonne journée

Denys


Bonjour Denys,

Voici un exemple comment extraire seulement les données correspondant
au critère du filtre et copier ces données vers une autre feuille.

'----------------------------------------
Sub Filtre()

Dim Rg As Range, Rg1 As Range, DL As Long

With Worksheets("Feuil1")
'Plage sur laquelle s'effecture le filtre
Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row)
'Zone de critère
.Range("D1") = "" 'pour être sûr
.Range("D2").Formula = "=(A2 06)*(B2=""s"")"
'Attribution d'un nom à la plage de critère
.Range("D1:D2").Name = "Crit"

'le filtre élaboré :
With Rg
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("Crit")
'Définir la plage à copier
Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible)
End With

'Où copier le résultat du filtre
With Worksheets("Feuil2")
'Identifier la dernière ligne +1 de la plage A:A
DL = .Range("A:A").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row + 1

'copier les données du filtre
Rg1.Copy .Range("A" & DL)
End With

'afficher toutes les données
.ShowAllData
End With
'Supprime le NOM de la zone de critère
Application.Names("Crit").Delete
'Libère la mémoire des objets
Set Rg = Nothing: Set Rg1 = Nothing

End Sub
'----------------------------------------



Salutations!




"Denys" a écrit dans le message de news:
Bonjour Denis,

Merci bien pout ta réponse. J'avais bien changé la plage V2 pour V1 etc...
Quant aux conditions, c,est bien ET, pas OU.... Ce ne peut donc pas être le
problème.

C'est curieux, car Excel me laisse une ligne de 2003, ensuite 1 ligne de
2004 et enfin une ligne de 2005. Si bien que lorsque la macro a fini de
"tourner", il me reste 3 lignes sur la feuille originale. Ça fait
"pouiche"....

Je continue à chercher...

Merci encore

Denys


Bonjour Denys,

C'est sûrement à cause de ta zone de critère que tu as défini :

.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"

Ce critère devrait te retourner toutes les lignes ou dans la colonne V 03 ET colonne W = "X"
ATTENTION AU "ET" cela signifie que les 2 colonnes sur la même ligne
doivent répondre au critère... si c'est l'une ou l'autre, tu utilises un "OU"
et ton critère devient : "=Ou(V2 03)+(W2=""X"")=1"

Cependant, je suppose que tu as oublié la ligne contenant les étiquettes dans la
définition de ta plage de cellule. Et le filtre te retourne la première ligne de données
au lieu de retourner seulement la première ligne qui devrait être la ligne d'étiquette.

With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
Il me semble que cela devrait être :
With .Range("V1:W" & .Range("W65536").End(xlUp).Row)


Salutations!


"Denys" a écrit dans le message de news:
Bonjour à tous,

Dans la macro suivante, Excel filtre et copie toutes les lignes sauf une
ayant la valeur 2003 en colonne V et la valeur "X" en colonne W...

Sauriez-vous pourquoi?

Sub Copier2003()
If [a4].Value = "" Then Exit Sub
On Error Resume Next
Range("AC1").Select
Dim Sh As Worksheet
Set Sh = Worksheets("Recap Workpage")
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
With Sh
.Range("AC1") = ""
.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"
With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sh.Range("AC1:AC2"), Unique:úlse
.Offset(1).Resize(.Rows.Count - 1) _
.SpecialCells(xlCellTypeVisible).EntireRow.Offset(-1, 0).Select
End With
End With
Call Trsf2003
ShowAllData
End Sub

Sub Trsf2003()
Selection.Copy
Sheets("2003").Select
Call DerniereCell
ActiveSheet.Paste
Range("A1").Select
Columns("C:C").EntireColumn.AutoFit
Sheets("Recap Workpage").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A5").Select
End Sub

Voilà.... À chaque fois, il me reste une ligne avec 2003 en colonne V et "X"
en colonne W.....et je ne sais pas pourquoi..

Merci

Denys










Avatar
michdenis
Tu peux m'envoyer ton classeur dans ma BAL et tu fais disparaître
ce qui est confidentiel. Je n'ai pas besoin de toutes les feuilles !


Salutations!


"Denys" a écrit dans le message de news:
Bonjour Denis,

Curieux... le filtre s'effectue... mais pas la copie....Quoiqu'il en soit,
merci... je continue ...

Bonne journée

Denys


Bonjour Denys,

Voici un exemple comment extraire seulement les données correspondant
au critère du filtre et copier ces données vers une autre feuille.

'----------------------------------------
Sub Filtre()

Dim Rg As Range, Rg1 As Range, DL As Long

With Worksheets("Feuil1")
'Plage sur laquelle s'effecture le filtre
Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row)
'Zone de critère
.Range("D1") = "" 'pour être sûr
.Range("D2").Formula = "=(A2 06)*(B2=""s"")"
'Attribution d'un nom à la plage de critère
.Range("D1:D2").Name = "Crit"

'le filtre élaboré :
With Rg
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("Crit")
'Définir la plage à copier
Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible)
End With

'Où copier le résultat du filtre
With Worksheets("Feuil2")
'Identifier la dernière ligne +1 de la plage A:A
DL = .Range("A:A").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row + 1

'copier les données du filtre
Rg1.Copy .Range("A" & DL)
End With

'afficher toutes les données
.ShowAllData
End With
'Supprime le NOM de la zone de critère
Application.Names("Crit").Delete
'Libère la mémoire des objets
Set Rg = Nothing: Set Rg1 = Nothing

End Sub
'----------------------------------------



Salutations!




"Denys" a écrit dans le message de news:
Bonjour Denis,

Merci bien pout ta réponse. J'avais bien changé la plage V2 pour V1 etc...
Quant aux conditions, c,est bien ET, pas OU.... Ce ne peut donc pas être le
problème.

C'est curieux, car Excel me laisse une ligne de 2003, ensuite 1 ligne de
2004 et enfin une ligne de 2005. Si bien que lorsque la macro a fini de
"tourner", il me reste 3 lignes sur la feuille originale. Ça fait
"pouiche"....

Je continue à chercher...

Merci encore

Denys


Bonjour Denys,

C'est sûrement à cause de ta zone de critère que tu as défini :

.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"

Ce critère devrait te retourner toutes les lignes ou dans la colonne V 03 ET colonne W = "X"
ATTENTION AU "ET" cela signifie que les 2 colonnes sur la même ligne
doivent répondre au critère... si c'est l'une ou l'autre, tu utilises un "OU"
et ton critère devient : "=Ou(V2 03)+(W2=""X"")=1"

Cependant, je suppose que tu as oublié la ligne contenant les étiquettes dans la
définition de ta plage de cellule. Et le filtre te retourne la première ligne de données
au lieu de retourner seulement la première ligne qui devrait être la ligne d'étiquette.

With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
Il me semble que cela devrait être :
With .Range("V1:W" & .Range("W65536").End(xlUp).Row)


Salutations!


"Denys" a écrit dans le message de news:
Bonjour à tous,

Dans la macro suivante, Excel filtre et copie toutes les lignes sauf une
ayant la valeur 2003 en colonne V et la valeur "X" en colonne W...

Sauriez-vous pourquoi?

Sub Copier2003()
If [a4].Value = "" Then Exit Sub
On Error Resume Next
Range("AC1").Select
Dim Sh As Worksheet
Set Sh = Worksheets("Recap Workpage")
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
With Sh
.Range("AC1") = ""
.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"
With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sh.Range("AC1:AC2"), Unique:úlse
.Offset(1).Resize(.Rows.Count - 1) _
.SpecialCells(xlCellTypeVisible).EntireRow.Offset(-1, 0).Select
End With
End With
Call Trsf2003
ShowAllData
End Sub

Sub Trsf2003()
Selection.Copy
Sheets("2003").Select
Call DerniereCell
ActiveSheet.Paste
Range("A1").Select
Columns("C:C").EntireColumn.AutoFit
Sheets("Recap Workpage").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A5").Select
End Sub

Voilà.... À chaque fois, il me reste une ligne avec 2003 en colonne V et "X"
en colonne W.....et je ne sais pas pourquoi..

Merci

Denys










Avatar
Denys
Rebonjour Denis,

C'est parti.... et merci

Denys


Tu peux m'envoyer ton classeur dans ma BAL et tu fais disparaître
ce qui est confidentiel. Je n'ai pas besoin de toutes les feuilles !


Salutations!


"Denys" a écrit dans le message de news:
Bonjour Denis,

Curieux... le filtre s'effectue... mais pas la copie....Quoiqu'il en soit,
merci... je continue ...

Bonne journée

Denys


Bonjour Denys,

Voici un exemple comment extraire seulement les données correspondant
au critère du filtre et copier ces données vers une autre feuille.

'----------------------------------------
Sub Filtre()

Dim Rg As Range, Rg1 As Range, DL As Long

With Worksheets("Feuil1")
'Plage sur laquelle s'effecture le filtre
Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row)
'Zone de critère
.Range("D1") = "" 'pour être sûr
.Range("D2").Formula = "=(A2 06)*(B2=""s"")"
'Attribution d'un nom à la plage de critère
.Range("D1:D2").Name = "Crit"

'le filtre élaboré :
With Rg
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("Crit")
'Définir la plage à copier
Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible)
End With

'Où copier le résultat du filtre
With Worksheets("Feuil2")
'Identifier la dernière ligne +1 de la plage A:A
DL = .Range("A:A").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row + 1

'copier les données du filtre
Rg1.Copy .Range("A" & DL)
End With

'afficher toutes les données
.ShowAllData
End With
'Supprime le NOM de la zone de critère
Application.Names("Crit").Delete
'Libère la mémoire des objets
Set Rg = Nothing: Set Rg1 = Nothing

End Sub
'----------------------------------------



Salutations!




"Denys" a écrit dans le message de news:
Bonjour Denis,

Merci bien pout ta réponse. J'avais bien changé la plage V2 pour V1 etc...
Quant aux conditions, c,est bien ET, pas OU.... Ce ne peut donc pas être le
problème.

C'est curieux, car Excel me laisse une ligne de 2003, ensuite 1 ligne de
2004 et enfin une ligne de 2005. Si bien que lorsque la macro a fini de
"tourner", il me reste 3 lignes sur la feuille originale. Ça fait
"pouiche"....

Je continue à chercher...

Merci encore

Denys


Bonjour Denys,

C'est sûrement à cause de ta zone de critère que tu as défini :

.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"

Ce critère devrait te retourner toutes les lignes ou dans la colonne V 03 ET colonne W = "X"
ATTENTION AU "ET" cela signifie que les 2 colonnes sur la même ligne
doivent répondre au critère... si c'est l'une ou l'autre, tu utilises un "OU"
et ton critère devient : "=Ou(V2 03)+(W2=""X"")=1"

Cependant, je suppose que tu as oublié la ligne contenant les étiquettes dans la
définition de ta plage de cellule. Et le filtre te retourne la première ligne de données
au lieu de retourner seulement la première ligne qui devrait être la ligne d'étiquette.

With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
Il me semble que cela devrait être :
With .Range("V1:W" & .Range("W65536").End(xlUp).Row)


Salutations!


"Denys" a écrit dans le message de news:
Bonjour à tous,

Dans la macro suivante, Excel filtre et copie toutes les lignes sauf une
ayant la valeur 2003 en colonne V et la valeur "X" en colonne W...

Sauriez-vous pourquoi?

Sub Copier2003()
If [a4].Value = "" Then Exit Sub
On Error Resume Next
Range("AC1").Select
Dim Sh As Worksheet
Set Sh = Worksheets("Recap Workpage")
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
With Sh
.Range("AC1") = ""
.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"
With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sh.Range("AC1:AC2"), Unique:úlse
.Offset(1).Resize(.Rows.Count - 1) _
.SpecialCells(xlCellTypeVisible).EntireRow.Offset(-1, 0).Select
End With
End With
Call Trsf2003
ShowAllData
End Sub

Sub Trsf2003()
Selection.Copy
Sheets("2003").Select
Call DerniereCell
ActiveSheet.Paste
Range("A1").Select
Columns("C:C").EntireColumn.AutoFit
Sheets("Recap Workpage").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A5").Select
End Sub

Voilà.... À chaque fois, il me reste une ligne avec 2003 en colonne V et "X"
en colonne W.....et je ne sais pas pourquoi..

Merci

Denys















Avatar
michdenis
Fichier retourné.


Salutations!


"Denys" a écrit dans le message de news:
Rebonjour Denis,

C'est parti.... et merci

Denys


Tu peux m'envoyer ton classeur dans ma BAL et tu fais disparaître
ce qui est confidentiel. Je n'ai pas besoin de toutes les feuilles !


Salutations!


"Denys" a écrit dans le message de news:
Bonjour Denis,

Curieux... le filtre s'effectue... mais pas la copie....Quoiqu'il en soit,
merci... je continue ...

Bonne journée

Denys


Bonjour Denys,

Voici un exemple comment extraire seulement les données correspondant
au critère du filtre et copier ces données vers une autre feuille.

'----------------------------------------
Sub Filtre()

Dim Rg As Range, Rg1 As Range, DL As Long

With Worksheets("Feuil1")
'Plage sur laquelle s'effecture le filtre
Set Rg = .Range("A1:B" & .Range("B65536").End(xlUp).Row)
'Zone de critère
.Range("D1") = "" 'pour être sûr
.Range("D2").Formula = "=(A2 06)*(B2=""s"")"
'Attribution d'un nom à la plage de critère
.Range("D1:D2").Name = "Crit"

'le filtre élaboré :
With Rg
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("Crit")
'Définir la plage à copier
Set Rg1 = .Offset(1).Resize(.Rows.Count - 1). _
SpecialCells(xlCellTypeVisible)
End With

'Où copier le résultat du filtre
With Worksheets("Feuil2")
'Identifier la dernière ligne +1 de la plage A:A
DL = .Range("A:A").Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row + 1

'copier les données du filtre
Rg1.Copy .Range("A" & DL)
End With

'afficher toutes les données
.ShowAllData
End With
'Supprime le NOM de la zone de critère
Application.Names("Crit").Delete
'Libère la mémoire des objets
Set Rg = Nothing: Set Rg1 = Nothing

End Sub
'----------------------------------------



Salutations!




"Denys" a écrit dans le message de news:
Bonjour Denis,

Merci bien pout ta réponse. J'avais bien changé la plage V2 pour V1 etc...
Quant aux conditions, c,est bien ET, pas OU.... Ce ne peut donc pas être le
problème.

C'est curieux, car Excel me laisse une ligne de 2003, ensuite 1 ligne de
2004 et enfin une ligne de 2005. Si bien que lorsque la macro a fini de
"tourner", il me reste 3 lignes sur la feuille originale. Ça fait
"pouiche"....

Je continue à chercher...

Merci encore

Denys


Bonjour Denys,

C'est sûrement à cause de ta zone de critère que tu as défini :

.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"

Ce critère devrait te retourner toutes les lignes ou dans la colonne V 03 ET colonne W = "X"
ATTENTION AU "ET" cela signifie que les 2 colonnes sur la même ligne
doivent répondre au critère... si c'est l'une ou l'autre, tu utilises un "OU"
et ton critère devient : "=Ou(V2 03)+(W2=""X"")=1"

Cependant, je suppose que tu as oublié la ligne contenant les étiquettes dans la
définition de ta plage de cellule. Et le filtre te retourne la première ligne de données
au lieu de retourner seulement la première ligne qui devrait être la ligne d'étiquette.

With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
Il me semble que cela devrait être :
With .Range("V1:W" & .Range("W65536").End(xlUp).Row)


Salutations!


"Denys" a écrit dans le message de news:

Bonjour à tous,

Dans la macro suivante, Excel filtre et copie toutes les lignes sauf une
ayant la valeur 2003 en colonne V et la valeur "X" en colonne W...

Sauriez-vous pourquoi?

Sub Copier2003()
If [a4].Value = "" Then Exit Sub
On Error Resume Next
Range("AC1").Select
Dim Sh As Worksheet
Set Sh = Worksheets("Recap Workpage")
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
With Sh
.Range("AC1") = ""
.Range("AC2").FormulaLocal = "=(V2 03)*(W2=""X"")"
With .Range("V2:W" & .Range("W65536").End(xlUp).Row)
.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
Sh.Range("AC1:AC2"), Unique:úlse
.Offset(1).Resize(.Rows.Count - 1) _
.SpecialCells(xlCellTypeVisible).EntireRow.Offset(-1, 0).Select
End With
End With
Call Trsf2003
ShowAllData
End Sub

Sub Trsf2003()
Selection.Copy
Sheets("2003").Select
Call DerniereCell
ActiveSheet.Paste
Range("A1").Select
Columns("C:C").EntireColumn.AutoFit
Sheets("Recap Workpage").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlUp
Range("A5").Select
End Sub

Voilà.... À chaque fois, il me reste une ligne avec 2003 en colonne V et "X"
en colonne W.....et je ne sais pas pourquoi..

Merci

Denys