OVH Cloud OVH Cloud

Filtrer et reporter sur une autre feuille

2 réponses
Avatar
Denys
Bonjour à tous,

Voici une macro qui m'a généreusement été proposée par Denis Michon et qui
fonctionne à merveille:

J'y ai apporté quelques changements.... et ça fonctionne toujours... sauf
que je voudrais y apporter les suivants, et là j'ai besoin de votre aide...

Sub FiltreParDate()

Suite: If sheet1.Range ("B8").Value = "" Then Exit Sub

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

With Worksheets("Sheet1")
'Plage sur laquelle s'effecture le filtre
Set Rg = .Range("B8:V" & .Range("B65536").End(xlUp).Row)

Application.ScreenUpdating = False
'le filtre automatique :
With Rg
.AutoFilter field:=2, Criteria1:=[b8].value (est-ce que c'est bon?)
'Définir la plage à copier
Set Rg1 = .SpecialCells(xlCellTypeVisible)

'Où copier le résultat du filtre
'Ici je veux entrer: ajouter une feuille ayant pour nom la date en cellule A8

'Identifier la dernière ligne +1 de la plage A:A
DL = .Range("A65536").End(xlUp).Row
'copier les données du filtre
Rg1.Copy .Range("A" & DL)
'Rg1.EntireRow.Delete
End With
.AutoFilter
End With
End With
'Libère la mémoire des objets
Set Rg = Nothing: Set Rg1 = Nothing
Goto Suite

End Sub

En résumé, il faudrait que le filtre se fasse en fonction de la date en
cellule A8 de la Sheet1, et que le filtre copie toutes les lignes aynat la
même date dans une nouvelle feuille ayant pour nom cette date jusqu'à ce
qu'il n'y ait plus rien en cellule B8...

J'ai essayé avec Sheets.Add, sauf qu"Excel n'y copie rien, et bloque sur
AutoFilter...

Quelqu'un aurait une piste pour moi?

Merci pour votre temps

Denys

2 réponses

Avatar
michdenis
Bonjour Denys,

Le principe de base en anglais tel qu'un définit dans un bouquin d'un guru ...

Excel holds dates as numeric values equal to the number of days since January 1, 1900. For example, January 1, 2003, is held as
37622. When you ask for dates greater than or equal to January 1, 2003, Excel looks for date serial numbers greater than or equal to
37622. However, when you ask for dates equal to January 1, 2003, Excel does not look for the numeric value of the date; Excel checks
for the string value
'"Jan 1, 2003" as it appears formatted in the worksheet.

As-tu essayé ceci :

Utilise une variable pour contenir ton critère

Dim D As String
D = [b8].text
.AutoFilter field:=2, Criteria1:= D


Si tu travailles sur une version française... ceci ne fonctionnera pas... mais en anglais ceci devrait fonctionner selon les "top"
guru d'excel.
je n'ai jamais eu l'occasion de tester cela sur une version anglaise...!

Si tu veux savoir comment le faire en français... tu le dis !


Salutations!




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

Voici une macro qui m'a généreusement été proposée par Denis Michon et qui
fonctionne à merveille:

J'y ai apporté quelques changements.... et ça fonctionne toujours... sauf
que je voudrais y apporter les suivants, et là j'ai besoin de votre aide...

Sub FiltreParDate()

Suite: If sheet1.Range ("B8").Value = "" Then Exit Sub

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

With Worksheets("Sheet1")
'Plage sur laquelle s'effecture le filtre
Set Rg = .Range("B8:V" & .Range("B65536").End(xlUp).Row)

Application.ScreenUpdating = False
'le filtre automatique :
With Rg
.AutoFilter field:=2, Criteria1:=[b8].value (est-ce que c'est bon?)
'Définir la plage à copier
Set Rg1 = .SpecialCells(xlCellTypeVisible)

'Où copier le résultat du filtre
'Ici je veux entrer: ajouter une feuille ayant pour nom la date en cellule A8

'Identifier la dernière ligne +1 de la plage A:A
DL = .Range("A65536").End(xlUp).Row
'copier les données du filtre
Rg1.Copy .Range("A" & DL)
'Rg1.EntireRow.Delete
End With
.AutoFilter
End With
End With
'Libère la mémoire des objets
Set Rg = Nothing: Set Rg1 = Nothing
Goto Suite

End Sub

En résumé, il faudrait que le filtre se fasse en fonction de la date en
cellule A8 de la Sheet1, et que le filtre copie toutes les lignes aynat la
même date dans une nouvelle feuille ayant pour nom cette date jusqu'à ce
qu'il n'y ait plus rien en cellule B8...

J'ai essayé avec Sheets.Add, sauf qu"Excel n'y copie rien, et bloque sur
AutoFilter...

Quelqu'un aurait une piste pour moi?

Merci pour votre temps

Denys
Avatar
Denys
Bonjour Denis,

Merci, ta réponse m'a donné une autre idée. Comme les dates en colonne B
proviennent d'un Notepad, Excel ne les reconnait pas comme date, mais bien
comme texte. Donc, en colonne A j'applique la formule suivante: Úy(B8)

Cela me donne le jour correspondant, et ensuite j'applique ton filtre sur la
colonne A au lieu de la colonne B !!!

Peut-être pas très orthodoxe..... mais ça marche....

Merci encore....

Denys


Bonjour Denys,

Le principe de base en anglais tel qu'un définit dans un bouquin d'un guru ...

Excel holds dates as numeric values equal to the number of days since January 1, 1900. For example, January 1, 2003, is held as
37622. When you ask for dates greater than or equal to January 1, 2003, Excel looks for date serial numbers greater than or equal to
37622. However, when you ask for dates equal to January 1, 2003, Excel does not look for the numeric value of the date; Excel checks
for the string value
'"Jan 1, 2003" as it appears formatted in the worksheet.

As-tu essayé ceci :

Utilise une variable pour contenir ton critère

Dim D As String
D = [b8].text
..AutoFilter field:=2, Criteria1:= D


Si tu travailles sur une version française... ceci ne fonctionnera pas... mais en anglais ceci devrait fonctionner selon les "top"
guru d'excel.
je n'ai jamais eu l'occasion de tester cela sur une version anglaise...!

Si tu veux savoir comment le faire en français... tu le dis !


Salutations!




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

Voici une macro qui m'a généreusement été proposée par Denis Michon et qui
fonctionne à merveille:

J'y ai apporté quelques changements.... et ça fonctionne toujours... sauf
que je voudrais y apporter les suivants, et là j'ai besoin de votre aide...

Sub FiltreParDate()

Suite: If sheet1.Range ("B8").Value = "" Then Exit Sub

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

With Worksheets("Sheet1")
'Plage sur laquelle s'effecture le filtre
Set Rg = .Range("B8:V" & .Range("B65536").End(xlUp).Row)

Application.ScreenUpdating = False
'le filtre automatique :
With Rg
.AutoFilter field:=2, Criteria1:=[b8].value (est-ce que c'est bon?)
'Définir la plage à copier
Set Rg1 = .SpecialCells(xlCellTypeVisible)

'Où copier le résultat du filtre
'Ici je veux entrer: ajouter une feuille ayant pour nom la date en cellule A8

'Identifier la dernière ligne +1 de la plage A:A
DL = .Range("A65536").End(xlUp).Row
'copier les données du filtre
Rg1.Copy .Range("A" & DL)
'Rg1.EntireRow.Delete
End With
.AutoFilter
End With
End With
'Libère la mémoire des objets
Set Rg = Nothing: Set Rg1 = Nothing
Goto Suite

End Sub

En résumé, il faudrait que le filtre se fasse en fonction de la date en
cellule A8 de la Sheet1, et que le filtre copie toutes les lignes aynat la
même date dans une nouvelle feuille ayant pour nom cette date jusqu'à ce
qu'il n'y ait plus rien en cellule B8...

J'ai essayé avec Sheets.Add, sauf qu"Excel n'y copie rien, et bloque sur
AutoFilter...

Quelqu'un aurait une piste pour moi?

Merci pour votre temps

Denys