Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2411 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Filtrer par date (semaine entière) en VB

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Filtrer par date (semaine entière) en VB

n°1311779
juans
Posté le 22-02-2006 à 19:38:08  profilanswer
 

Bonjour,
 
Je souhaite effectuer un FILTRE d'une colonne Excel via un code VB
Le but est filtrer du lundi au dimanche de la semaine en cours
 
Ce code fonctionne mais pour les date qui commence par 01 à 09, le jour s'inverse avec le mois (c'est à dire, en format anglais)
 
Est il possible formater la date en jj/mm/aaa  ou de renvoyer la date en forme de texte?
 
 
Voici le code :
 
Pour info Range(D2) = numéro de jour : 1 = lundi
 
 

Code :
  1. Private Sub CommandButton2_Click()
  2. Dim lundi As Date
  3. lundi = Now() - Range("d2" ).Value + 1
  4. l = Format(lundi, "DD" & "/" & "MM" & "/" & "YYYY" )
  5. semaine.TextBox1.Text = l
  6. Dim dimanche As Date
  7. dimanche = Now() - Range("d2" ).Value + 7
  8. d = Format(dimanche, "DD" & "/" & "MM" & "/" & "YYYY" )
  9. semaine.TextBox2.Text = d
  10.     Selection.AutoFilter Field:=3, Criteria1:=">=" & l, Operator:=xlAnd _
  11.         , Criteria2:="<=" & d
  12.        
  13. End Sub


 
 
Voila....   :(

mood
Publicité
Posté le 22-02-2006 à 19:38:08  profilanswer
 

n°1312038
tegu
Posté le 23-02-2006 à 11:03:26  profilanswer
 

Je ne connais pas bien les focntionnalités Excel, aussi sais-tu ce que le paramètre Criteria1: attend comme type de données ?
 
Sinon :
Format(dateLundi, "dd/mm/yyyy" ) renvoie un Variant
Format$(dateLundi, "dd/mm/yyyy" ) renvoie un String
Le format "dd/mm/yyyy" (en minuscules) est un format de date française qui fonctionne.

n°1312053
juans
Posté le 23-02-2006 à 11:22:56  profilanswer
 

Je viens d'essayer en stringant le Format mais ça ne marche pas.
 
 
Le paramètre criteria doit renvoyer une date sous forme jj/mm/aaaa (format texte ou non)
 
 
J'arrive a renvoyer une date en mm/jj/aaaa mais pas en jj/mm/aaaa
 
 
Le probleme se rencontre quand jj <10  ou mm<10
Le jour et le mois s'inversent
 

n°1312174
tegu
Posté le 23-02-2006 à 13:43:24  profilanswer
 

Après quelques tests, voici mes remarques :
 
Le paramètre Criteria1 attend une date au format ANGLAIS
Quand tu lui passes une date au format français, il essaie de la convertir : 01/02/2005 ne lui pose pas de problème mais pour lui cela veut dire 2 janvier !
Si tu lui passes 17/03/2005, il transforme cela en 03/17/2005 automatiquement car le mois ne pouvant être égal à 17, aucune ambiguité n'est possible.
Du coup quand il te rend des résultats, il inverse les jours et mois dans le contexte du premier exemple.
 
Voici la syntaxe à utiliser et qui fonctionne chez moi :

Selection.AutoFilter field:=3, Criteria1:=CDate(Format(lundi, "mm/dd/yyyy" ))


Il faut donc bien lui passer une date en format anglais comme paramètre, et aussi utiliser la fonction de conversion CDate() si tes cellules Excel sont formatées comme champ de type date.


Message édité par tegu le 23-02-2006 à 13:46:38
n°1312211
juans
Posté le 23-02-2006 à 14:17:59  profilanswer
 

Effectivement le format date est résolu mais un nouveau probleme apparait!
 
Maintenant pour les dates supérieures à 09, ça bug !!!

n°1312226
tegu
Posté le 23-02-2006 à 14:27:03  profilanswer
 

Une « date supérieure à 09 » ça me parle pas.
Le numéro de jour, de mois, la décennie, autre ?
 
« Ça bug » veut dire quoi ? Une erreur apparaît (n°, description) ? Ça te donne un autre résultat que celui attendu ?

n°1312297
juans
Posté le 23-02-2006 à 14:51:34  profilanswer
 

En fait maintenant le tri fonctionne pour les jj  <  10
 
 
Mais pour les jj > 09, le filtre ne marche plus
 
Effectivement ce n'est pas un bug ça, j'avoue j'ai fait une erreur dans mon code!!!    :(  
 
 
 
J'ai plusieurs idées mais je n'arrive pas savoir le format que je dois choisir
  - envoyer des données dans Criteria sous forme de texte ou de date
  - formater les cellules Excel en texte ou en date
 
Là je suis au bout de mes capacités, j'y ai passé une journée !!!!!!!!!!!!
 
"In VB Veritas"


Message édité par juans le 23-02-2006 à 14:58:14
n°1312348
tegu
Posté le 23-02-2006 à 15:20:55  profilanswer
 

Dans mon test, la colonne est de type date mais son format est français (17/01/2205).
L'affichage est donc conforme à tes attentes, MAIS il n'empêche qu'il faut passer en paramètre un format anglais.
 
Je ne vois pas ce qui te gêne. Déclare ta colonne au format date et utilise ma syntaxe.

n°1312434
juans
Posté le 23-02-2006 à 16:41:57  profilanswer
 

Je regarde ça, je vais raser mon code et repartir du début....
 
Je te donne mon code dès que je l'ai fini... Si j'y arrive

n°1312486
juans
Posté le 23-02-2006 à 17:26:00  profilanswer
 

En fait il manque un paramètre dans ton code, c'est pas un filtre par date que je cherche a faire mais par semaine.
 
C'est a dire de Critetia1 à Criteria2  (compris entre 2 dates)
 
Et dans ce cas la je n'arrive pas a le faire marcher le filtre.
 
Voici mon code :
 

Selection.AutoFilter Field:=3, Criteria1:=">=" & CDate(Format(aa, "mm/dd/yyyy" )), Operator:=xlAnd _
        , Criteria2:="<=" & CDate(Format(bb, "mm/dd/yyyy" ))

mood
Publicité
Posté le 23-02-2006 à 17:26:00  profilanswer
 

n°1312837
tegu
Posté le 24-02-2006 à 09:27:25  profilanswer
 

Comme ça, ça a l'air de bien fonctionner

Selection.AutoFilter Field:=3, Criteria1:=">=" & Format$(aa, "mm/dd/yyyy" ), _
          Operator:=xlAnd, Criteria2:="<=" & Format$(bb, "mm/dd/yyyy" )


Message édité par tegu le 24-02-2006 à 09:27:52
n°1313137
juans
Posté le 24-02-2006 à 16:33:45  profilanswer
 

OK, merci... Entre temps j'ai créé une nouvelle colonne avec mon numéro de semaine! Solution de facilité...

n°1315256
Profil sup​primé
Posté le 28-02-2006 à 13:06:59  answer
 

Code :
  1. CDate( Mid(bb,4,2) & "/" & Mid(bb,1,2) & "/" & Mid(bb,7,2) )


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Filtrer par date (semaine entière) en VB

 

Sujets relatifs
Convertir en date à partir d'un formulairetype date et autoincrementer ss sql server 2000
trouver le nom du jour a partir d'une date ?[SQLServer]recherche sur un champ date indépendante du format
[Jave] string to date[Hibernate]Filtrer une requete avec une methode java
[Sybase] Format de date : YYYYMMDDhhmmssDate() et timestamp :)
date en C++Rediriger en fonction de la date?
Plus de sujets relatifs à : Filtrer par date (semaine entière) en VB


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR