OVH Cloud OVH Cloud

Filtre élaboré sur Date

9 réponses
Avatar
Péhemme
Bonjour à toutes et à tous,

J'ai une base de données de hauteur variable dont les titres sont sur la
ligne A10:AU10.
Je souhaite filtrer cette base de données sur la colonne AT qui contient des
dates (de clôture de fiches) et remplie par la saisie de date dans un
TextBox sur un UserForm par la (partie de) macro :

With Sheets("BasedeDonnées")
If txtClos.Value = "" Then
.Range("at" & L).Value = ""
Else
.Range("at" & L).Value = CDate(txtClos.Value)
End If
End With

Les critères en O2 et P2 sont sous la forme : >=01/09/2004 et < 30/09/2004
issus également d'un
UserForm par cette macro :

Sub Validation()
Dim LeJourAD As Integer
Dim LeMoisAD As Integer
Dim LAnnéeAD As Integer
Dim LaDateAD As Date
Dim LeJourAF As Integer
Dim LeMoisAF As Integer
Dim LAnnéeAF As Integer
Dim LaDateAF As Date

LeJourAD = TextBox1.Value
LeMoisAD = TextBox2.Value
LAnnéeAD = TextBox3.Value
LaDateAD = DateSerial(LAnnéeAD, LeMoisAD, LeJourAD)
LeJourAF = TextBox4.Value
LeMoisAF = TextBox5.Value
LAnnéeAF = TextBox6.Value
LaDateAF = DateSerial(LAnnéeAF, LeMoisAF, LeJourAF)

With Sheets("BasedeDonnées")
.Range("o2").Value = ">=" & LaDateAD
.Range("p2").Value = "<" & LaDateAF
End With

Sheets("BasedeDonnées").Visible = True
Sheets("BasedeDonnées").Select
Range("BdD").AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("o1:p2"), Unique:=False
End Sub

Le filtre masque toutes les dates.
Cela proviendrait-il des formats des dates ?
CDate(txtClos.Value) et DateSerial(LAnnéeAF, LeMoisAF, LeJourAF)
Une erreur dans la syntaxe d'une macro ?
Merci de vos avis.

Michel

9 réponses

Avatar
AV
Avec des plages dates, pour ne pas que le résultat soit tributaire du format
utilisé, filtre en te servant des numéros de séries comme critères :
Exemple de possibilité :
au lieu de
crit = DateSerial(LAnnéeAF, LeMoisAF, LeJourAF)
préférer
crit = DateSerial(LAnnéeAF, LeMoisAF, LeJourAF) * 1

AV
Avatar
Péhemme
Merci AV
Je teste et je reviens.
Michel
Avatar
Péhemme
Re Bonsoir AV,

Je dois avoir une autre erreur qui interfère car ta proposition n'apporte
pas de solution apparente.
Tout est masqué, y compris les cellules vierges (comme précédemment).
Merci quand même de ton aide.

Michel

"AV" a écrit dans le message de news:
uwTkKU%
Avec des plages dates, pour ne pas que le résultat soit tributaire du
format
utilisé, filtre en te servant des numéros de séries comme critères :
Exemple de possibilité :
au lieu de
crit = DateSerial(LAnnéeAF, LeMoisAF, LeJourAF)
préférer
crit = DateSerial(LAnnéeAF, LeMoisAF, LeJourAF) * 1

AV




Avatar
AV
Au vu de ton code...
Pour un filtre élaboré, il faut absolument que tes données comportent des
étiquettes de colonnes et si ton champ n'est pas calculé (ce qui est le cas dans
ton exemple) que la zone de critère comporte strictement le même nom
Dans ton cas, en O1 et P1, on devrait donc trouver la valeur exacte de A10

AV
Avatar
Péhemme
Au vu de ton code...
Pour un filtre élaboré, il faut absolument que tes données comportent des
étiquettes de colonnes et si ton champ n'est pas calculé (ce qui est le
cas dans
ton exemple) que la zone de critère comporte strictement le même nom
Dans ton cas, en O1 et P1, on devrait donc trouver la valeur exacte de A10


C'est le cas, j'ai copié/collé en O1 et P1 l'étiquette de AT10, cela ne peut
pas être plus "pareil" (enfin j'espère).
J'ai entre temps, essayé de modifier les formats de ma colonne AT mais rien
ni fait...
Je ne vois vraiment pas quelle mauvaise manoeuvre je peux faire.
A+
Michel

Avatar
AV
Toujours en suivant ton code...
Autre idée d'erreur possible :
à la ligne

Range("BdD").AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("o1:p2"), Unique:úlse

vérifie que ta plage nommée "BdB" inclue bien l'étiquette de colonne (ce qui
serait ma foi étonnant ..)

AV
Avatar
Péhemme
J'ai déterminé dans insertion/nom/définir BdD fait référence à :

ÞCALER(BasedeDonnées!$A$10;;;NBVAL(BasedeDonnées!$C:$C)-1)

Crois-tu que cela peut provenir de cette définition ?

J'ai détruit ma colonne, je l'ai reconstituée.
Le test fonctionne de façon aléatoire (tu me diras : y a du mieux ;-))) ).

Michel

"AV" a écrit dans le message de news:
%23eqruM$
Toujours en suivant ton code...
Autre idée d'erreur possible :
à la ligne

Range("BdD").AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("o1:p2"), Unique:úlse

vérifie que ta plage nommée "BdB" inclue bien l'étiquette de colonne (ce
qui
serait ma foi étonnant ..)

AV




Avatar
Péhemme
Je me rapproche.
En effet, le filtre fonctionne bien "à la main".
C'est donc la façon de l'appeler dans la macro qui doit coincer.
Je regarde cela plus en détail.
Michel


"AV" a écrit dans le message de news:
%23eqruM$
Toujours en suivant ton code...
Autre idée d'erreur possible :
à la ligne

Range("BdD").AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("o1:p2"), Unique:úlse

vérifie que ta plage nommée "BdB" inclue bien l'étiquette de colonne (ce
qui
serait ma foi étonnant ..)

AV




Avatar
Péhemme
Alain,

Mille mercis Alain te m'avoir aider à réfléchir.
Je crois, qu'en fin de compte, c'était un problème de définition de la base
de données.
En effet, j'ai solutionné mon problème en écrivant :
Sub Val()

Dim LeJourAD As Integer
Dim LeMoisAD As Integer
Dim LAnnéeAD As Integer
Dim LaDateAD As Date
Dim LeJourAF As Integer
Dim LeMoisAF As Integer
Dim LAnnéeAF As Integer
Dim LaDateAF As Date
LeJourAD = TextBox1.Value
LeMoisAD = TextBox2.Value
LAnnéeAD = TextBox3.Value
LaDateAD = DateSerial(LAnnéeAD, LeMoisAD, LeJourAD)
LeJourAF = TextBox4.Value
LeMoisAF = TextBox5.Value
LAnnéeAF = TextBox6.Value
LaDateAF = DateSerial(LAnnéeAF, LeMoisAF, LeJourAF)

With Sheets("BasedeDonnées")
.Range("o2").Value = ">=" & LaDateAD
.Range("p2").Value = "<" & LaDateAF
End With
Sheets("BasedeDonnées").Visible = True
Sheets("BasedeDonnées").Select
Range("A11").Select

Dim R As Long
R = Range("c65536").End(xlUp).Row
MsgBox R
Range("A10:AU" & R).AdvancedFilter Action:=xlFilterInPlace,
CriteriaRange:= _
Range("O1:P2"), Unique:úlse
Unload Me
End Sub

Et ça marche !!!

Bonne soirée à toi.
Michel


"AV" a écrit dans le message de news:
%23eqruM$
Toujours en suivant ton code...
Autre idée d'erreur possible :
à la ligne

Range("BdD").AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("o1:p2"), Unique:úlse

vérifie que ta plage nommée "BdB" inclue bien l'étiquette de colonne (ce
qui
serait ma foi étonnant ..)

AV