OVH Cloud OVH Cloud

VB5 et calcul de date !

11 réponses
Avatar
Claude
Bonjour à tous !

J`utilise VB5 et je dois me faire une application qui calcule le nombre de
jour entre 2 dates.
J`avais penser utiliser l`outil Calendar avec sa calendar.value mais le
résultat est une chaine de caractere. Comment faire pour faire une opération
mathématique sur une chaine de caractere? J`ai réussi avec Excell mais
j`aimerais le faire avec VB5.

Merci

Claude

1 réponse

1 2
Avatar
X
Oui, parfait, voici un code simple, efficace et compréhensible...
Tu pourrais même gagner quelques lignes, mais bof... :o)

------
Site logiciels
http://irolog.free.fr
Mail
http://irolog.free.fr/ecrire/index.htm
Site perso
http://irolog.free.fr/joe/index.htm
Principe d'utilisation des news Groups
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
------------------------------------------------------------------------------------
"Claude" a écrit dans le message de news:

Salut!

Et bien, grace à ton aide, j`ai réussi à trouver la solution !

Voici donc mon code.... tres simple en fait....


merci pour tes lumières !

Claude


Dim D1 As Date
Dim D2 As Date


Private Sub Command1_Click() `bouton 1 ère date
Text3.Text = Calendar1.Value
D1 = Text3.Text
End Sub


Private Sub Command2_Click() `bouton 2 ieme date
Text2.Text = Calendar1.Value
D2 = Text2.Text
valeur = DateDiff("d", D1, D2)
If D2 < D1 Then MsgBox "La 1ere date doit être = ou < à la 2eme date,
",
vbExclamation
Text1.Text = valeur
End Sub


Private Sub Command3_Click()` bouton recommencer
Text3.Text = ""
Text2.Text = ""
Text1.Text = ""
End Sub




"X" wrote in message
news:%
| De rien cher ami, serviteur :o)
|
| ------
| Site logiciels
| http://irolog.free.fr
| Mail
| http://irolog.free.fr/ecrire/index.htm
| Site perso
| http://irolog.free.fr/joe/index.htm
| Principe d'utilisation des news Groups
| http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
| ------------------------------------------------------------------------------------
| "Claude Gagné" a écrit dans le message de news:
| %
| >2 millions de fois merci !
| >
| > Claude
| >
| > "X" a écrit dans le message de
| > news:
| >> Salut,
| >>
| >> En fait je n'ai pas mis de Calendar dans l'exemple, mais il te
sera
| >> facile de transposer, j'ai fait un choix par combo, car ça risquait
de
ne
| >> pas marcher, nous n'avons pas la même version de VB ni la même
version
du
| >> calendar, en plus ça évite un ocx de plus, et parfois la mise à jour
de
| >> sa
| >> dépendance à la main...
| >> Il y a 2 choix, l'un avec combo à date totale, l'autre plus souple
avec
3
| >> combos (jj + mm + aaaa)...
| >> A toi de voir si tu veux vraiment un calendar, ou ce qui t'es proposé
te
| >> suffit :o)
| >> Voici le code, les fichiers sources sont joints, comme les objets
| >> (justement) sont les mêmes, ça ne devrait pas trop poser de problèmes
| >> pour
| >> faire du copier/coller, voire à lancer directement en vb5...
| >> ---------------------
| >>
| >> ' <> entre 2 dates : form1 : 1.0 : 22/03/06
| >> '
| >> ' 24 OBJET A INCORPORER sur form1
| >> ' - 4 comboBox : combo1 + combo2 + combo3 + combo4
| >> ' - 6 labels : label1 + label2 + label3 + label4 + label5 + label6
| >> ' - 4 optionBoutons : option1 + option2 + option3 + option4
| >> ' - 2 textBox : text1 + text2
| >> ' - 6 boutons : command1 + command2 + command3 + command4 +
command5
+
| >> command6
| >> ' - 2 frames : frame1 + frame 2
| >> '
| >> ' NOTE
| >> 'si utilisation de Calendar, remplacer la date obtenue par les
combo
| >> ' comboX.text ou ce qui en découle, par calendarX.value
| >> '
| >> Option Explicit
| >> Dim date_jour As Long
| >> '
| >> Sub Form_Load() ' chargement
| >> Dim ladate As Date
| >> Dim i As Long
| >> '
| >> Combo1.Clear ' mettre combo1.style = 2 POSSIBILITE 1
| >> ladate = "01/01/1970" ' date inférieure
| >> For i = 0 To 20000 ' date de fin = date de départ + 20.000 jours
| >> Combo1.AddItem ladate ' met date dans combo
| >> ladate = ladate + 1 ' date ++
| >> If Date = ladate Then date_jour = i + 1 ' date du jour
| >> Next i
| >> Combo1.ListIndex = date_jour ' positionne date du jour
| >> '
| >> Combo2.Clear ' mettre les 3 combos.style = 2 POSSIBILITE 2
| >> Combo3.Clear
| >> Combo4.Clear
| >> For i = 1 To 31
| >> Combo2.AddItem Format(i, "00")
| >> If i < 13 Then Combo3.AddItem Format(i, "00")
| >> Next i
| >> '
| >> For i = 1900 To 2099
| >> Combo4.AddItem i
| >> Next i
| >> '
| >> Combo2.ListIndex = Day(Date) - 1 ' positionne date du jour
| >> Combo3.ListIndex = Month(Date) - 1
| >> Combo4.ListIndex = Year(Date) - 1900
| >> '
| >> Option1.Value = True ' POSSIBILITES 1 + 2
| >> Option3.Value = True
| >> Label2.Caption = ""
| >> Label3.Caption = ""
| >> Label5.Caption = ""
| >> Label6.Caption = ""
| >> Text1 = ""
| >> Text2 = ""
| >> End Sub
| >>
| >> Sub Command1_Click() 'validation de la date POSSIBILITE 1
| >> If Option1.Value = True Then Label2.Caption = Combo1.Text
| >> If Option1.Value = False Then Label3.Caption = Combo1.Text
| >> End Sub
| >>
| >> Sub Command3_Click() 'date du jour POSSIBILITE 1
| >> Combo1.ListIndex = date_jour
| >> End Sub
| >>
| >> Sub Command2_Click() 'calcule la différence POSSIBILITE 1
| >> Dim date1 As Date
| >> Dim date2 As Date
| >> '
| >> If Label2.Caption = "" Or Label3.Caption = "" Then
| >> MsgBox "Vous devez choisir 2 dates, remédier ", vbExclamation
| >> Exit Sub
| >> End If
| >> '
| >> date1 = Label2.Caption
| >> date2 = Label3.Caption
| >> If date1 > date2 Then
| >> MsgBox "La 1ere date doit être = ou < à la 2eme date, remédier
",
| >> vbExclamation
| >> Exit Sub
| >> End If
| >> '
| >> Text1 = Format(date2 - date1, "## ##0")
| >> End Sub
| >>
| >> Sub Command4_Click() 'validation de la date POSSIBILITE 2
| >> Dim verif_date As Date
| >> '
| >> If Option3.Value = True Then
| >> Label5.Caption = Combo2.Text & "/" & Combo3.Text & "/" &
Combo4.Text
| >> On Error GoTo erreur
| >> verif_date = Label5.Caption
| >> End If
| >> '
| >> If Option3.Value = False Then
| >> Label6.Caption = Combo2.Text & "/" & Combo3.Text & "/" &
Combo4.Text
| >> On Error GoTo erreur
| >> verif_date = Label6.Caption
| >> End If
| >> Exit Sub
| >> '
| >> erreur:
| >> On Error Resume Next
| >> MsgBox "Cette date n'existe pas, remédier ", vbExclamation
| >> End Sub
| >>
| >> Sub Command6_Click() 'date du jour POSSIBILITE 2
| >> Dim jour As Date
| >> Combo2.ListIndex = Day(Date) - 1
| >> Combo3.ListIndex = Month(Date) - 1
| >> Combo4.ListIndex = Year(Date) - 1900
| >> End Sub
| >>
| >> Sub Command5_Click() 'calcule la défférence POSSIBILITE 2
| >> Dim date1 As Date
| >> Dim date2 As Date
| >> '
| >> If Label5.Caption = "" Or Label6.Caption = "" Then
| >> MsgBox "Vous devez choisir 2 dates, remédier ", vbExclamation
| >> Exit Sub
| >> End If
| >> '
| >> date1 = Label5.Caption
| >> date2 = Label6.Caption
| >> If date1 > date2 Then
| >> MsgBox "La 1ere date doit être = ou < à la 2eme date, remédier
",
| >> vbExclamation
| >> Exit Sub
| >> End If
| >> '
| >> Text2 = Format(date2 - date1, "## ##0")
| >> End Sub
| >> ------
| >> fin de code
| >> ------
| >>
| >> Site logiciels
| >> http://irolog.free.fr
| >> Mail
| >> http://irolog.free.fr/ecrire/index.htm
| >> Site perso
| >> http://irolog.free.fr/joe/index.htm
| >> Principe d'utilisation des news Groups
| >>
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
|
>> --------------------------------------------------------------------------
| > ----------
| >> "Claude" a écrit dans le message de news:
| >>
| >> > Merci pour tes explications mais elles sont un peu sombres pour
moi.
| >> > Voici l`idée que j`aimerais faire...
| >> >
| >> > L`utilisateur clique sur une premiere date sur le calendrier, puis
sur
| > une
| >> > deuxieme.
| >> > Ensuite, il ne reste qu`à cliquer sur un bouton pour savoir la
| > difference
| >> > de
| >> > jour entre ces 2 dates !
| >> > C`est aussi simple que cela !
| >> > Tu peux m`aider?
| >> >
| >> > En te remerciant d`avance
| >> >
| >> > Claude
| >> >
| >> > "X" wrote in message
| > news:
| >> > | Salut,
| >> > |
| >> > | La propriété est numérique ou date (texte date), selon ce que
tu
| >> > veux,
| >> > | voici, j'ai testé:
| >> > |
| >> > | Si ton code (dans un bouton 1) est ça:
| >> > | Sub Command1_Click()
| >> > | Dim ladate As Double
| >> > | Dim date_a As Date
| >> > | Dim date_b As Date
| >> > | Text1 = CDbl(Calendar1.Value) & vbCrLf ' = 1er/01/1900
| >> > | date_a = "21/03/2006"
| >> > | Text1 = Text1 & date_a & vbCrLf
| >> > | Text1 = Text1 & CDbl(date_a) & vbCrLf
| >> > | date_a = CDate(38799)
| >> > | Text1 = Text1 & date_a & vbCrLf
| >> > | date_a = "21/03/2006"
| >> > | date_b = "23/03/2006"
| >> > | ladate = date_b - date_a
| >> > | Text1 = Text1 & ladate & vbCrLf
| >> > | End Sub
| >> > |
| >> > |
| >> > | Ça te donne en mettant le calendar au 1/1/1900
| >> > | 2
| >> > | 21/03/2006
| >> > | 38797
| >> > | 23/03/2006
| >> > | 2
| >> > |
| >> > | En conséquence (tu as vu ci-dessus comment on passait du
numérique
à
| > la
| >> > | date, et réciproquement):
| >> > | - En numérique, calendar commence au 31/12/1899 = jour 1
| >> > | - Le 21/03/2006 est le jour 38797
| >> > | - Le 23/03/2006 est le jour 38799
| >> > | donc 38799-39797 = 2, il y a 2 jours entre le 21 et le 23/3/2006
| >> > |
| >> > |
| >> > | En conclusions:
| >> > |
| >> > | - Pour passer d'une date texte à une date numérique:
| >> > | Dim ladate As Double
| >> > | Dim date_a As Date
| >> > | ladate = CDbl(Calendar1.Value)
| >> > |
| >> > | - Pour passer d'une date numérique à une date texte:
| >> > | Dim ladate As Double
| >> > | Dim date_a As Date
| >> > | date_a = CDate(38799)
| >> > |
| >> > | - pour calculer l'écart entre 2 dates texte
| >> > | dim numérique as double
| >> > | dim date1 as date
| >> > | dim date2 as date
| >> > | date1="21/03/2006"
| >> > | date2="23/03/2006"
| >> > | numerique = date2 - date1 (= 2)
| >> > |
| >> > | Et si tu représente une date avec une heure, ce sera alors une
| > décimal,
| >> > | comme déjà épondu:
| >> > | nombre de jours depuis le 31/12/1899 ,virgule, nombre de secondes
| >> > | j,s
| >> > |
| >> > | Si tu utilises les fonctions indiquées par Jacques ça donnera la
même
| >> > chose,
| >> > | à toi de voir si tu veux faire du calcul ou utiliser les
fonctions
| >> > | prédéfinies...
| >> > |
| >> > | Est-ce clair, si c'est sombre, envoie, je te fais !
| >> > |
| >> > | ------
| >> > | Site logiciels
| >> > | http://irolog.free.fr
| >> > | Mail
| >> > | http://irolog.free.fr/ecrire/index.htm
| >> > | Site perso
| >> > | http://irolog.free.fr/joe/index.htm
| >> > | Principe d'utilisation des news Groups
| >> > |
| >
http://support.microsoft.com/directory/worldwide/fr/newsgroup/regles.htm
| >> >
| >
| --------------------------------------------------------------------------
| > ----------
| >> > | "Claude" a écrit dans le message de news:
| >> > |
| >> > | > Bonjour Jacques!
| >> > | >
| >> > | > J`utilise la librairie Microsoft Calendar components V 10.0
pour
| > aller
| >> > | > choisir les dates.
| >> > | > La propriétés calendar1.value est-elle numerique ou bien chaine
de
| >> > | > caracteres? Où puis-je trouver ce renseignement !
| >> > | > VB5 contient la fonction Datediff mais le résultat est toujours
0,
| >> > c`est
| >> > | > pourquoi je me demande si calendar1.value est chaine. Si oui,
| > comment
| >> > | > puis-je la convertir en numérique afin d`y effectuer
l`opération
| >> > | > mathematique et obtenir ainsi le nombre de jour entre mes 2
dates!
| >> > | >
| >> > | > merci infiniment.....
| >> > | >
| >> > | > Claude
| >> > | >
| >> > | > "Jacques93" wrote in message
| >> > | > news:
| >> > | > | Bonjour Claude,
| >> > | > | Claude a écrit :
| >> > | > | > Bonjour à tous !
| >> > | > | >
| >> > | > | > J`utilise VB5 et je dois me faire une application qui
calcule
| >> > le
| >> > | > nombre
| >> > | > de
| >> > | > | > jour entre 2 dates.
| >> > | > | > J`avais penser utiliser l`outil Calendar avec sa
calendar.value
| >> > mais
| >> > | > le
| >> > | > | > résultat est une chaine de caractere. Comment faire pour
faire
| > une
| >> > | > opération
| >> > | > | > mathématique sur une chaine de caractere? J`ai réussi avec
| > Excell
| >> > mais
| >> > | > | > j`aimerais le faire avec VB5.
| >> > | > | >
| >> > | > |
| >> > | > | Si la fonction DateDiff est présente sous VB5 (OK sous VB6) :
| >> > | > |
| >> > | > | MsgBox DateDiff("d", d1, d2)
| >> > | > |
| >> > | > | Sinon
| >> > | > |
| >> > | > | MsgBox d2 - d1
| >> > | > |
| >> > | > | Avec d2 >= d1
| >> > | > |
| >> > | > | En fait c'est comme sous Excel
| >> > | > |
| >> > | > | --
| >> > | > | Cordialement,
| >> > | > |
| >> > | > | Jacques.
| >> > | >
| >> > | >
| >> > |
| >> > |
| >> >
| >> >
| >>
| >>
| >>
| >
| >
|
|




1 2