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
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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
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" <alainPFFFvallon@wanadoo.fr> a écrit dans le message de news:
uwTkKU%23zEHA.2568@TK2MSFTNGP11.phx.gbl...
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
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
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
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
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
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
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
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
AV
Toujours en suivant ton code... Autre idée d'erreur possible : à la ligne
vérifie que ta plage nommée "BdB" inclue bien l'étiquette de colonne (ce qui serait ma foi étonnant ..)
AV
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
vérifie que ta plage nommée "BdB" inclue bien l'étiquette de colonne (ce qui serait ma foi étonnant ..)
AV
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" <alainPFFFvallon@wanadoo.fr> a écrit dans le message de news:
%23eqruM$zEHA.3236@TK2MSFTNGP15.phx.gbl...
Toujours en suivant ton code...
Autre idée d'erreur possible :
à la ligne
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
vérifie que ta plage nommée "BdB" inclue bien l'étiquette de colonne (ce qui serait ma foi étonnant ..)
AV
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
vérifie que ta plage nommée "BdB" inclue bien l'étiquette de colonne (ce qui serait ma foi étonnant ..)
AV
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" <alainPFFFvallon@wanadoo.fr> a écrit dans le message de news:
%23eqruM$zEHA.3236@TK2MSFTNGP15.phx.gbl...
Toujours en suivant ton code...
Autre idée d'erreur possible :
à la ligne
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