Recherche entre 2 dates

Résolu
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 - 11 juil. 2022 à 14:44
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 - 13 juil. 2022 à 19:07

Bonjour,

Je souhaite faire une recherche dans les fichiers compris entre 2 dates.

Les fichiers sont de la forme 20220711  annee ,mois, jour.

Dans le code si dessous j'incrémente de 1 mais cela ne va pas vu que maxi on a 31 jours dans un mois.

Comment puis je faire pour récupérer les dates ?

 ' avec recherche entre 2 dates
        Dim var As Integer = 0
        
            If tbdate1.Text = "" Then
                MsgBox("Renseigner la date de fin")
            Else
                Do While tbdate.Text + var4183 <> tbdate1.Text

                    If IO.File.Exists("c:\test\" & tbdate.Text + var & ".txt") Then
                        Dim truc As String() = System.IO.File.ReadAllLines("c:\test\" & tbdate.Text + var & ".txt")
                        lesFichiers.Add(tb41.Text & "\" & tbdate.Text & ".txt")

                    End If
                    var = var + 1
                Loop
            End If
       

9 réponses

Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
13 juil. 2022 à 19:07

Ça doit être une histoire d'heure, dtpFin.Value serait par exemple à midi alors que laDate est à 9h00.

Donc le 13 juillet 9h c'est bien avant le 13 juillet midi ça fait un tour de plus.

Le hic avec ta bidouille c'est si pour une raison quelconque l'heure change, ça ne marchera plus.

Teste ça

Dim laDate As DateTime = dtpDebut.Value.Date 'ici on ne prend que la composante date

'...

While laDate < dtpFin.Value.Date
   '...

1
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
11 juil. 2022 à 14:59

J'ai utiliser montcalendar

Dim sMonthSelected As String 'I have this under my Public class

        sMonthSelected = MonthCalendar1.SelectionRange.Start.Date.ToString("yyyyMMdd")
        MsgBox(sMonthSelected) 
0
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
11 juil. 2022 à 15:26

Je t'ai déjà dit que la base de la base quand tu travailles avec des dates c'est de te servir du type DateTime.

Ça 

Do While tbdate.Text + var4183 <> tbdate1.Text

c'est aberrant et même si ça fonctionne aujourd'hui, le fait de penser comme ça te jouera des tours.

Et depuis des mois que tu poses des questions de débutant (ça c.est normal quand on débute) et qu'on te dit que tu n'y arriveras qu'en prenant le temps d'apprendre les bases. Tu ne l'as pas fait.

  • Soit tu as lu le cours de Tahé que je t'ai conseillé ou un autre sans comprendre 
  • Soit tu ne l'as pas lu du tout

Dans un cas comme dans l'autre, tu ne progresseras pas sans apprendre et comprendre de nombreux fondamentaux qui te font défaut.

Si tu avais fait les efforts nécessaires ces derniers mois, tu les aurais acquis et tu ne perdrais pas des heures à buter sur des problèmes aussi simples.

Je t'invite à nouveau à lire ce message https://codes-sources.commentcamarche.net/forum/affich-10107769-message-a-tous-les-debutants-souvent-autodidactes#p10107769


0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
11 juil. 2022 à 15:30

oui je l'utilise le datetime mais je voulais teste et me tromper par moi meme en me trompant j'apprends de mes erreurs.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
11 juil. 2022 à 15:38

En théorie oui on apprend de ses erreurs, mais si on les refait c'est qu'on n'a pas appris.

C'est au moins la 3eme fois que tu fais ce genre d'erreurs, la première c'était dans ta première question, et la précédente ne date même pas de 3 semaines.

https://codes-sources.commentcamarche.net/forum/affich-10108689-charger-tous-les-fichiers-inferieurs-a-une-date


0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
11 juil. 2022 à 15:47

ah oui effectivement je m'en souvenait plus. désolé

0
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
11 juil. 2022 à 16:53

Je ne cherche pas à t'accabler, mais à te faire prendre conscience que pour devenir un bon codeur, ça demande un réel investissement.


0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
11 juil. 2022 à 18:12

Bon je commence je pense mettre les dates dans une textbox puis prendre chaque date une par un pour faire mon traitement.

Dim dt1 As Date = CDate(DateTimePicker1.Value)
        Dim dt2 As Date = CDate(DateTimePicker2.Value)
        ComboBox1.Items.Add(CStr(dt1)) ' pour éviter l'appel à la fonction dateadd avec 0 jour à ajouter => ainsi la boucle démarre à 1
        For i As Integer = 1 To CInt(DateDiff(DateInterval.Day, dt1, dt2))
            ComboBox1.Items.Add(CStr(DateAdd(DateInterval.Day, i, dt1)))
        Next
0
Whismeril Messages postés 19034 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 1 mai 2024 656
11 juil. 2022 à 19:01

parmi les trucs qu'on t'a répété plusieurs fois, enlève la référence à visual basic.

https://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net#conclusion

VB.net c'est pas du VB6, VB6 est obsolète depuis 1999.

Le type Date, CDate, Cint, CStr, DateDiif, DateAdd c'est à bannir.


Je t'ai dit de te servir de DateTime.

En plus la propriété Value, d'un DateTimePicker c'est déjà un DateTime, y a pas de conversion à faire.


Je t'ai aussi dit et répété que les données doivent être dans des collections, que les contrôles ne doivent servir qu'à l'interface avec l'utilisateur.

Avec ça 

ComboBox1.Items.Add

Ce ne sont plus des dates mais des comboboxitems. Pour t'en resservir en tant que date, il faut les reconvertir.

Perte de temps, consommation de ressource pour rien, pas logique dans un langage objet.


Ce commentaire

' pour éviter l'appel à la fonction dateadd avec 0 jour à ajouter => ainsi la boucle démarre à 1

Alors qu'en dessous tu nous fais des conversions de conversions sur 2 lignes

      CInt(DateDiff(DateInterval.Day, dt1, dt2))
ComboBox1.Items.Add(CStr(DateAdd(DateInterval.Day, i, dt1)))

Ou dans le code de ce matin 

If IO.File.Exists("c:\test\" & tbdate.Text + var & ".txt") Then
     Dim truc As String() = System.IO.File.ReadAllLines("c:\test\" & tbdate.Text + var & ".txt")

2 fois la même concaténation en 2 lignes


Enfin tu utilises des noms faibles, c'est une mauvaise pratique, un nom fort permet de savoir sans équivoque à quoi sert telle ou telle variable. C'est déjà plus simple à coder, mais c'est encore plus simple à maintenir, quand 1 an ou 2 après la fin de ton projet il te faudra t'y replonger pour corriger un bug, ou mettre à jour une fonction qui doit évoluer ComboBox1 ça va vraiment pas t'aider à retrouver tes petits.


En 6 lignes, tu résumes tout ce que j'essaye de te faire comprendre depuis 3h.

Tu bidouilles avec plus ou moins de succès mais sans progression et ça fait 6 mois que ça dure.

En principe, si tu avais suivi les cours qu'on t'as conseillé le 17 février tu devrais coder bien mieux que ça et ne venir ici que pour des problèmes bien plus complexe que faire une boucle entre dates....

Dim laDate As DateTime = dtpDebut.Value 'là on sait que c'est un DateTimePicker et il sert à sélectionner le début, tu vois un nom fort c'est pas dur à trouver et c'est pratique

Dim mesDates As List(Of DateTime) = New List(Of DateTime) From {laDate} 'comme ça la liste est initialisée avec la première date

While laDate < dtpFin.Value
   laDate = laDate.AddDays(1)'date suivante
   mesDates.Add(laDate)'on l'ajoute à la liste
End While

cbbLesDates.DataSource = mesDates 'et là le combobox affiche les dates, mais toi tu peux travailler avec la liste.

Et encore, avec Linq, ça s'écrit en 2 lignes qui s'exécutent encore plus vite.


0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
11 juil. 2022 à 21:39

Ah oui comme ça sa me parait simple je complique à chaque fois, je finis ça et pendant mes vacances je vais relire le tuto.

merci en tout cas

0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
13 juil. 2022 à 13:15

dans le code il y a un probléme je selection le 11 juillet au 13 juillet, pour teste il me place bien dans la combo le 11 ,12,13,14 

0
trucss Messages postés 189 Date d'inscription jeudi 17 février 2022 Statut Membre Dernière intervention 23 janvier 2024 1
13 juil. 2022 à 14:16

Un peu sale peut être mais ça fonctionne

While laDateheure < dtpFin.Value.AddDays(-1)
0
Rejoignez-nous