-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !
On est tributaire du format de la plage à filtrer, des
formats de dates définis
dans les paramètres régionaux, de l'expression des
formats en anglais et..... de
qques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditions
Sub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de série
Pas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,
Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doivent
être uniformes sinon la remise au format d'origine ne se
fera pas !
- On est obligé de boucler sur la plage "lesDates" pour
remettre au format
d'origine chacune des cellules tout en gardant la plage
filtrée
PS : On peut regretter, au passage, qu'il n'existe
pas de commande pour
atteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,
CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone de
critères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !
On est tributaire du format de la plage à filtrer, des
formats de dates définis
dans les paramètres régionaux, de l'expression des
formats en anglais et..... de
qques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditions
Sub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de série
Pas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,
Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doivent
être uniformes sinon la remise au format d'origine ne se
fera pas !
- On est obligé de boucler sur la plage "lesDates" pour
remettre au format
d'origine chacune des cellules tout en gardant la plage
filtrée
PS : On peut regretter, au passage, qu'il n'existe
pas de commande pour
atteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,
CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone de
critères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !
On est tributaire du format de la plage à filtrer, des
formats de dates définis
dans les paramètres régionaux, de l'expression des
formats en anglais et..... de
qques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditions
Sub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de série
Pas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,
Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doivent
être uniformes sinon la remise au format d'origine ne se
fera pas !
- On est obligé de boucler sur la plage "lesDates" pour
remettre au format
d'origine chacune des cellules tout en gardant la plage
filtrée
PS : On peut regretter, au passage, qu'il n'existe
pas de commande pour
atteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,
CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone de
critères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
-----Message d'origine-----
A première vue, je dirais que c'est une question de
format de cellule. Tes
cellules sont au format date et dans VBA tu ne fais pas
une recherche dans
le bon format.
Voilà pour l'explication. Je rencontre le même problème
sur une recherche
dans une colonne où les cellules sont au format
pourcentage et j'ai le même
résultat que toi. Si je sélectionne les cellules de ma
colonne et que je
fais Format - Cellules et que je les mets au format
standard, ma macro
fonctionne.
Si quelqu'un a la solution, je suis preneur aussi car
j'aimerais bien garder
mes cellules au format pourcentage.
"jipi" a écrit dans le message de news:
02eb01c3c014$b3332be0$
Bonjour,
J'ai un petit souci avec le filtre automatique en VBA
Quand j'utilise la commande suivante :
Selection.AutoFilter Field:=3,
Criteria1:="$/12/2002", Operator:=xlOr, _
Criteria2:="1/12/2002"
mon écran reste vide.
Si je reviens sur le filtre personnalisé et que clique
sur ok j'obtiens le résultat recherché.
Comment obtenir ce résultat par VBA ?
Il doit manquer quelquechose mais je ne vois pas quoi.
Merci de votre aide
jipi
.
-----Message d'origine-----
A première vue, je dirais que c'est une question de
format de cellule. Tes
cellules sont au format date et dans VBA tu ne fais pas
une recherche dans
le bon format.
Voilà pour l'explication. Je rencontre le même problème
sur une recherche
dans une colonne où les cellules sont au format
pourcentage et j'ai le même
résultat que toi. Si je sélectionne les cellules de ma
colonne et que je
fais Format - Cellules et que je les mets au format
standard, ma macro
fonctionne.
Si quelqu'un a la solution, je suis preneur aussi car
j'aimerais bien garder
mes cellules au format pourcentage.
"jipi" <jipiwb@free.fr> a écrit dans le message de news:
02eb01c3c014$b3332be0$a101280a@phx.gbl...
Bonjour,
J'ai un petit souci avec le filtre automatique en VBA
Quand j'utilise la commande suivante :
Selection.AutoFilter Field:=3,
Criteria1:="=24/12/2002", Operator:=xlOr, _
Criteria2:="=31/12/2002"
mon écran reste vide.
Si je reviens sur le filtre personnalisé et que clique
sur ok j'obtiens le résultat recherché.
Comment obtenir ce résultat par VBA ?
Il doit manquer quelquechose mais je ne vois pas quoi.
Merci de votre aide
jipi
.
-----Message d'origine-----
A première vue, je dirais que c'est une question de
format de cellule. Tes
cellules sont au format date et dans VBA tu ne fais pas
une recherche dans
le bon format.
Voilà pour l'explication. Je rencontre le même problème
sur une recherche
dans une colonne où les cellules sont au format
pourcentage et j'ai le même
résultat que toi. Si je sélectionne les cellules de ma
colonne et que je
fais Format - Cellules et que je les mets au format
standard, ma macro
fonctionne.
Si quelqu'un a la solution, je suis preneur aussi car
j'aimerais bien garder
mes cellules au format pourcentage.
"jipi" a écrit dans le message de news:
02eb01c3c014$b3332be0$
Bonjour,
J'ai un petit souci avec le filtre automatique en VBA
Quand j'utilise la commande suivante :
Selection.AutoFilter Field:=3,
Criteria1:="$/12/2002", Operator:=xlOr, _
Criteria2:="1/12/2002"
mon écran reste vide.
Si je reviens sur le filtre personnalisé et que clique
sur ok j'obtiens le résultat recherché.
Comment obtenir ce résultat par VBA ?
Il doit manquer quelquechose mais je ne vois pas quoi.
Merci de votre aide
jipi
.
-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !
On est tributaire du format de la plage à filtrer, des
formats de dates définis
dans les paramètres régionaux, de l'expression des
formats en anglais et..... de
qques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditions
Sub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de série
Pas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,
Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doivent
être uniformes sinon la remise au format d'origine ne se
fera pas !
- On est obligé de boucler sur la plage "lesDates" pour
remettre au format
d'origine chacune des cellules tout en gardant la plage
filtrée
PS : On peut regretter, au passage, qu'il n'existe
pas de commande pour
atteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,
CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone de
critères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !
On est tributaire du format de la plage à filtrer, des
formats de dates définis
dans les paramètres régionaux, de l'expression des
formats en anglais et..... de
qques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditions
Sub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de série
Pas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,
Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doivent
être uniformes sinon la remise au format d'origine ne se
fera pas !
- On est obligé de boucler sur la plage "lesDates" pour
remettre au format
d'origine chacune des cellules tout en gardant la plage
filtrée
PS : On peut regretter, au passage, qu'il n'existe
pas de commande pour
atteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,
CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone de
critères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !
On est tributaire du format de la plage à filtrer, des
formats de dates définis
dans les paramètres régionaux, de l'expression des
formats en anglais et..... de
qques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditions
Sub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de série
Pas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,
Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doivent
être uniformes sinon la remise au format d'origine ne se
fera pas !
- On est obligé de boucler sur la plage "lesDates" pour
remettre au format
d'origine chacune des cellules tout en gardant la plage
filtrée
PS : On peut regretter, au passage, qu'il n'existe
pas de commande pour
atteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,
CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone de
critères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !
On est tributaire du format de la plage à filtrer, des
formats de dates définis
dans les paramètres régionaux, de l'expression des
formats en anglais et..... de
qques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditions
Sub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de série
Pas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,
Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doivent
être uniformes sinon la remise au format d'origine ne se
fera pas !
- On est obligé de boucler sur la plage "lesDates" pour
remettre au format
d'origine chacune des cellules tout en gardant la plage
filtrée
PS : On peut regretter, au passage, qu'il n'existe
pas de commande pour
atteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,
CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone de
critères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !
On est tributaire du format de la plage à filtrer, des
formats de dates définis
dans les paramètres régionaux, de l'expression des
formats en anglais et..... de
qques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditions
Sub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de série
Pas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,
Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doivent
être uniformes sinon la remise au format d'origine ne se
fera pas !
- On est obligé de boucler sur la plage "lesDates" pour
remettre au format
d'origine chacune des cellules tout en gardant la plage
filtrée
PS : On peut regretter, au passage, qu'il n'existe
pas de commande pour
atteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,
CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone de
critères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !
On est tributaire du format de la plage à filtrer, des
formats de dates définis
dans les paramètres régionaux, de l'expression des
formats en anglais et..... de
qques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditions
Sub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de série
Pas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,
Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doivent
être uniformes sinon la remise au format d'origine ne se
fera pas !
- On est obligé de boucler sur la plage "lesDates" pour
remettre au format
d'origine chacune des cellules tout en gardant la plage
filtrée
PS : On peut regretter, au passage, qu'il n'existe
pas de commande pour
atteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,
CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone de
critères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
-----Message d'origine-----
Bonjour Jipi,
[A1] ou Range("A1") on peut dire que c'est la même
chose ( ou presque ! ) pour les fins de la procédure.
Cette procédure suppose que tes données débutent en A1
jusqu'à la colonne X et ligne Z. sur lequel tu veux
filtre automatique.
Salutations!
"jipi" a écrit dans le message de
news:06bd01c3c16d$f1bc2060$
Bonjour,
J'ai testé ta solution 3 mais il me manque un élément que
représente [A1]?
Merci de ta collaboration
jipi-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !On est tributaire du format de la plage à filtrer, des
formats de dates définisdans les paramètres régionaux, de l'expression des
formats en anglais et..... deqques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditionsSub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de sériePas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doiventêtre uniformes sinon la remise au format d'origine ne se
fera pas !- On est obligé de boucler sur la plage "lesDates" pour
remettre au formatd'origine chacune des cellules tout en gardant la plage
filtréePS : On peut regretter, au passage, qu'il n'existe
pas de commande pouratteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone decritères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
.
-----Message d'origine-----
Bonjour Jipi,
[A1] ou Range("A1") on peut dire que c'est la même
chose ( ou presque ! ) pour les fins de la procédure.
Cette procédure suppose que tes données débutent en A1
jusqu'à la colonne X et ligne Z. sur lequel tu veux
filtre automatique.
Salutations!
"jipi" <jipiwb@free.fr> a écrit dans le message de
news:06bd01c3c16d$f1bc2060$a301280a@phx.gbl...
Bonjour,
J'ai testé ta solution 3 mais il me manque un élément que
représente [A1]?
Merci de ta collaboration
jipi
-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !
On est tributaire du format de la plage à filtrer, des
formats de dates définis
dans les paramètres régionaux, de l'expression des
formats en anglais et..... de
qques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditions
Sub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de série
Pas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,
Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doivent
être uniformes sinon la remise au format d'origine ne se
fera pas !
- On est obligé de boucler sur la plage "lesDates" pour
remettre au format
d'origine chacune des cellules tout en gardant la plage
filtrée
PS : On peut regretter, au passage, qu'il n'existe
pas de commande pour
atteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,
CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone de
critères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
.
-----Message d'origine-----
Bonjour Jipi,
[A1] ou Range("A1") on peut dire que c'est la même
chose ( ou presque ! ) pour les fins de la procédure.
Cette procédure suppose que tes données débutent en A1
jusqu'à la colonne X et ligne Z. sur lequel tu veux
filtre automatique.
Salutations!
"jipi" a écrit dans le message de
news:06bd01c3c16d$f1bc2060$
Bonjour,
J'ai testé ta solution 3 mais il me manque un élément que
représente [A1]?
Merci de ta collaboration
jipi-----Message d'origine-----
Ma "contribution" du jour....
Le filtrage de dates par Vba peut entraîner qques fortes
prises de tête !On est tributaire du format de la plage à filtrer, des
formats de dates définisdans les paramètres régionaux, de l'expression des
formats en anglais et..... deqques autres vicissitudes.... que j'oublie !
Pour que ça le fasse à tous les coups :
Ex. Feuille active avec un tableau en A1:Dx
- Etiquettes de colonnes en A1:D1
- Plage Nommée "lesDates" en C2:Cx
Filtrer les lignes des dates = 25/12/02 OU = 31/12/02
# Solution 1 #
Boucler sur la plage date et masquer lignes selon
conditionsSub zz_Filtre_Dates1()
Application.ScreenUpdating = False
For Each c In [lesDates]
If c.Value * 1 <> DateSerial(2002, 12, 25) * 1 And _
c.Value * 1 <> DateSerial(2002, 12, 31) * 1 Then _
Range(c.Address).EntireRow.Hidden = True
Next
End Sub
* Avantages de la méthode :
- Simplicité
- Pas de problèmes de formats
* Inconvénient :
- "Lenteur" d'exécution si la plage des dates est
importante
# Solution 2 #
Filtrer en utilisant, non pas les dates formatées, mais
les numéros de sériePas de problème de langue et/ou de formats !
Avec le même exemple de tableau et les même critères de
filtre
Sub zz_Filtre_Dates()
Application.ScreenUpdating = False
With [lesDates]
mémo = .NumberFormat
.NumberFormat = "General"
crit1 = DateSerial(2002, 12, 24) * 1
crit2 = DateSerial(2002, 12, 31) * 1
[C:C].AutoFilter Field:=1, Criteria1:="=" & crit1,
Operator:=xlOr,Criteria2:="=" & crit2
End With
'pour remettre au bon format en
'gardant la plage filtrée
For Each c In [lesDates]
c.NumberFormat = mémo
Next
End Sub
* Inconvénients de la méthode :
- Les formats de dates (quels qu'ils soient) de la
plage "lesDates" doiventêtre uniformes sinon la remise au format d'origine ne se
fera pas !- On est obligé de boucler sur la plage "lesDates" pour
remettre au formatd'origine chacune des cellules tout en gardant la plage
filtréePS : On peut regretter, au passage, qu'il n'existe
pas de commande pouratteindre les cellules non-visibles
* Avantage :
- Rapidité
# Solution 3 # (amha la plus "complète")
Utilisation d'un filtre élaboré
Avec le même exemple de tableau et les même critères de
filtre :
Sub zz_Filtre_Dates2()
[F1] = "lesDates"
[F2] = "12/25/2002" 'format anglais !
[F3] = "12/31/2002"
[A1].CurrentRegion.AdvancedFilter
Action:=xlFilterInPlace,CriteriaRange:=[F1:F3]
For i = 1 To 3
Cells(i, 6) = ""
Next
End Sub
* Avantages de la méthode
- Les formats de la plage dates de même que ceux de la
plage de la zone decritères peuvent être quelconques
- Grande rapidité
* Inconvénients :
J'en vois pas vraiment ......
AV
.
.
Finalement la solution ne fonctionne pas bien.
Je préfère la solution 2 qui elle me donne le résultat
recherché
Finalement la solution ne fonctionne pas bien.
Je préfère la solution 2 qui elle me donne le résultat
recherché
Finalement la solution ne fonctionne pas bien.
Je préfère la solution 2 qui elle me donne le résultat
recherché