A voir également:
- Programme vb avec objet date
- Vb - Télécharger - Langages
- Programme demarrage windows - Guide
- Vente objet occasion entre particulier - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
14 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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
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
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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...
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...
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
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
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)
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)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
option explicit
tout en haut de la page de ton code
j'ai l'impression que les noms de tes variables sont changeants.
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
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
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
Tu as deux dates, mais quatre variables : tu devrais y mettre de l'ordre.
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
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
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
L'instruction "for" doit aller du début à la fin, j'ai l'impression que tu fais le contraire...
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
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
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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 !
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 !
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
mais bizzarement ça m'affiche 0 comme résultat
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
fais un msgbox ou un debug.print ou un point d'arrêt, pour visualiser date1 et date2 dans ton code.
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
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
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
cela affiche 0 parce que la date de debut est après la date de fin.
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
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
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Je pense que cela n'est pas correct : essaie un peu avec des dates proches, pour voir.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
For i = date1 To date2
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