Programme vb avec objet date

newgame -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
salut on m'a donné de réaliser un pgm qui calcule le nbr de jour ouvrable on vous donne la date début puis la date fin et puis vous donnez le nbr de jour entre les deux dates sans samdi et dimanche
bon je sais qu'il ya datediff en vb6 pour la differénce entre deux date mais comment ensuite enlever les samdi et dimanche
merci d'avance
Configuration: Windows XP
Firefox 3.0.10

14 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Le plus simple à programmer, ce serait de faire une boucle qui parcourt tous les jours du début à la fin, et qui incrémente un compteur quand le jour n'est ni un samedi ni un dimanche.

    Sub testcmm()
    Dim deb As Date
    Dim fin As Date
    deb = DateSerial(2001, 1, 1)
    fin = DateSerial(2009, 1, 1)
    Dim i As Date
    Dim cnt As Long
    cnt = 0
    For i = deb To fin
    If (Weekday(i) <> 6) And (Weekday(i) <> 7) Then
    cnt = cnt + 1
    'Debug.Print Weekday(i), WeekdayName(Weekday(i))
    End If
    Next i
    Debug.Print deb, fin, cnt
    End Sub
    1
    1. newgame
       
      re,
      oui moi aussi j'ai pensé à ça mais comment roconnaitre les et dimanches des autres jours c'était ça mon blem
      mais dans ton exemple la date saisie c'est 2001/1/1 alors du coup c'est facile de reconnaitre les samedi et dimanche avec 7 et 6 en ajoutant toujours 7
      je veux dire quand on donne comme debut 2009/2/12 et fin 2009/3/25 ça marche comme m alors vb6 comprends automatiquement ?
      j'attand ta réponse
      0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Oui, cela marche quelles que soient les dates de début et de fin.
    weekday donne le numéro du jour dans la semaine.
    Afin de vérifier, tu peux supprimer le commentaire devant la ligne
    'Debug.Print Weekday(i), WeekdayName(Weekday(i))
    Pour avoir encore une meilleure visibilité, tu peux faire :
    Debug.Print i,Weekday(i), WeekdayName(Weekday(i))
    Cela devrait t'afficher tous les jours sauf les samedis et les dimanches.
    Pour être certain, teste avec quelques dates...
    1
    1. newgame
       
      re,
      j'ai essayée avec deb=12/2/2009 et fin=25/3/2008 mais il m'affiche 0
      voici mon prog
      Private Sub Command1_Click()
      Dim dat1 As Date
      Dim date2 As Date
      Dim i As Date
      Dim c As Long
      date1 = Text1.Text
      Date = Text2.Text
      If date1 < date2 Then
      MsgBox "la date de début est supérieur à la date de fin"
      Else
      c = 0
      For i = date1 To date2
      If (Weekday(i) <> 7) And (Weekday(i) <> 6) Then
      c = c + 1
      End If
      Next
      Text3.Text = c
      End If
      End Sub



      peut être que j'ai mal saisie les dates
      jattend ta réponse
      0
  3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Salut,

    Es que tu tiens vraiment au VBA, il y a une formule très simple qui sait faire,

    Dans une plage exemple de A2 à A12 tu saisis les dates des jours fériés et tu nommes cette plage exemple Fériés (Insertion/Nom/Définiir)

    jeudi 01-janv-2009
    lundi 13-avr-2009
    vendredi 01-mai-2009
    vendredi 08-mai-2009
    jeudi 21-mai-2009
    lundi 01-juin-2009
    mardi 14-juil-2009
    samedi 15-août-2009
    dimanche 01-nov-2009
    mercredi 11-nov-2009
    vendredi 25-déc-2009

    en supposant que tu aies en B2 la date de départ et en C2 la date de fin en D2 colles cette formule et si tu as plusieurs lignes incrémentes vers le bas

    =NB.JOURS.OUVRES(B2;C2;Fériés)

    Il est également possible d'automatiser la saisie des dates des jours fériés avec des formules à partir de l'année 2009

    A+
    Mike-31

    Un problème sans solution est un problème mal posé  (Einstein)
    0
  4. newgame
     
    re,
    bon je vais l'essayer tout de suite
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    essaie en ajoutant une ligne avec
    option explicit
    tout en haut de la page de ton code

    j'ai l'impression que les noms de tes variables sont changeants.
    0
    1. newgame
       
      re,
      j'ai esssayer ça marche pas aussi
      voici prog modifié
      Option Explicit
      Private Sub Command1_Click()
      Dim dat1 As Date
      Dim date2 As Date
      Dim i As Date
      Dim c As Long
      date1 = Text1.Text
      Date = Text2.Text
      If date1 < date2 Then
      MsgBox "la date de début est supérieur à la date de fin"
      Else
      c = 0
      For i = date1 To date2
      If (Weekday(i) <> 7) And (Weekday(i) <> 6) Then
      c = c + 1
      End If
      Next
      Text3.Text = c
      End If
      End Sub
      0
  7. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Tes variables date1 et date ne sont pas déclarées : je suis surpris que l'option explicit ne te signale pas ces erreurs.
    Tu as deux dates, mais quatre variables : tu devrais y mettre de l'ordre.
    0
    1. newgame
       
      re,
      voila j'ai fait qq modification ça devrait marcher comme ça sans doute mais ça m'affiche toujours 0 comme résultat

      Private Sub Command1_Click()
      Dim date1 As Date
      Dim date2 As Date
      Dim i As Date
      Dim c As Long
      date1 = CDate(Text1.Text)
      date2 = CDate(Text2.Text)
      If date1 < date2 Then
      MsgBox "la date de début est supérieur à la date de fin"
      Else
      c = 0
      For i = date1 To date2
      If (Weekday(i) <> 7) And (Weekday(i) <> 6) Then
      c = c + 1
      End If
      Next
      Text3.Text = c
      End If
      End Sub
      0
  8. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    L'instruction "for" doit aller du début à la fin, j'ai l'impression que tu fais le contraire...
    0
  9. newgame
     
    salut,
    dsl de ne répondre que mnt j'avais des pbm avec mon navigateur
    la boucle for commence de la date1 vers date2 c'est juste pourquoi il y'aurais une erreur
    j'attends d'autres suggestion de ta part
    0
  10. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Si date1 est la date de début et date2 la date de fin, alors ton test est bizarre, non ?
    If date1 < date2 Then
    MsgBox "la date de début est supérieur à la date de fin"

    tu écris "j'ai essayée avec deb=12/2/2009 et fin=25/3/2008 mais il m'affiche 0"

    c'est normal, le début est après la fin !
    0
  11. newgame
     
    oui alors dans ce cas le message d'erreur doit s'afficher et il ne passera pas à la boucle for
    mais bizzarement ça m'affiche 0 comme résultat
    0
  12. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    fais un msgbox ou un debug.print ou un point d'arrêt, pour visualiser date1 et date2 dans ton code.
    0
    1. newgame
       
      re,
      j'ai fais l'affichage ça marche
      et en plus j'ai fais quelques modif et voici le nouveau pgm

      Private Sub Command1_Click()
      Dim date1 As Date
      Dim date2 As Date
      Dim i As Long
      Dim c As Long
      date1 = CDate(Text1.Text)
      date2 = CDate(Text2.Text)
      MsgBox date1
      MsgBox date2
      If date1 > date2 Then
      MsgBox "la date de début est supérieur à la date de fin"
      Else
      c = 0
      For i = 0 To date1 - date2
      If (Weekday(date2 + i) <> 7) And (Weekday(date2 + i) <> 6) Then
      c = c + 1
      End If
      Next
      Text3.Text = c
      End If
      End Sub
      mais ça m'affiche toujours 0 comme résultat
      je commence à devenir fou de ce truc
      0
  13. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    change date1 et date2 en datedebut et datefin, cela sera sans doute plus clair.

    cela affiche 0 parce que la date de debut est après la date de fin.
    0
    1. newgame
       
      re,
      voici le nouveau pgm
      il marche
      Private Sub Command1_Click()
      Dim date1 As Date
      Dim date2 As Date
      Dim i As Long
      Dim c As Long
      Dim x As Long
      date1 = CDate(Text1.Text)
      date2 = CDate(Text2.Text)
      If date1 > date2 Then
      MsgBox "la date de début est supérieur à la date de fin"
      Else
      c = 0
      x = DateDiff("D", date1, date2)
      For i = 0 To x
      If (Weekday(i) <> 7) and (weekday(i)<>6) Then
      c = c + 1
      End If
      Next
      Text3.Text = c
      End If
      End Sub
      il me reste juste à ajouter de soustraire les jours ferriers
      0
  14. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Je pense que cela n'est pas correct : essaie un peu avec des dates proches, pour voir.
    0
    1. newgame
       
      re,
      oui c vrai c pas à 100% correcte quand je test sur une période vaste c correcte mais quand je fais avec des dates proches il y a pas toujours mais parfois un jour qui manque
      je comprends plus rien moi
      0
  15. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    For i = date1 To date2
    0