Datediff qualificateur incorrecte [Résolu]

Messages postés
37
Date d'inscription
samedi 30 juillet 2011
Statut
Membre
Dernière intervention
23 août 2011
- - Dernière réponse : cs_Jack
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
- 18 août 2011 à 03:28
bonjour,
voici le code de ma fonction datediff et j'ai une erreur de compilation "qualificateur incrrecte".veuillez m'aidez svp.
Public Function Date_Compare(dateinterval as string, t1 As Date, t2 As Date) As Long
Dim ReturnValue As Long
Dim diff_days1 As Integer
Dim diff_days2 As Integer
Dim diff_hours1 As Integer
Dim diff_hours2 As Integer
Dim diff_minutes1 As Integer
Dim diff_minutes2 As Integer
Dim diff_seconds1 As Integer
Dim diff_seconds2 As Integer
Dim d As Date
d = Now
diff_days1 = DateDiff(dateInterval.Day, d, t1)
diff_days2 = DateDiff(dateInterval.Day, d, t2)
diff_hours1 = DateDiff(dateInterval.hour, d, t1)
diff_hours2 = DateDiff(dateInterval.hour, d, t2)
diff_minutes1 = DateDiff(dateInterval.Minute, d, t1)
diff_minutes2 = DateDiff(dateInterval.Minute, d, t2)
diff_seconds1 = DateDiff(dateInterval.Second, d, t1)
diff_seconds2 = DateDiff(dateInterval.Second, d, t2)

If diff_days1 - diff_days2 > 0 Then
 ReturnValue = 1
 ElseIf diff_days1 - diff_days2 < 0 Then
 ReturnValue = -1
 Else
    If diff_hours1 - diff_hours2 > 0 Then
    ReturnValue = 1
    ElseIf diff_hours1 - diff_hours2 > 0 Then
    ReturnValue = -1
    Else
       If diff_minutes1 - diff_minutes2 > 0 Then
       ReturnValue = 1
       ElseIf diff_minutes1 - diff_minutes2 < 0 Then
       ReturnValue = -1
       Else
          If diff_seconds1 - diff_seconds2 > 0 Then
          ReturnValue = 1
          ElseIf diff_seconds1 - diff_seconds2 < 0 Then
          ReturnValue = -1
          Else
          ReturnValue = 0
          End If
       End If
    End If
End If
Date_Compare = ReturnValue
End Function



merci d'avance.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
46
3
Merci
en plus ton parametre dateInterval ne sert
à rien
donc comme ça
Public Function Date_Compare(t1 As Date, t2 As Date) As Long
Dim ReturnValue As Long
Dim diff_days1 As Integer
Dim diff_days2 As Integer
Dim diff_hours1 As Integer
Dim diff_hours2 As Integer
Dim diff_minutes1 As Integer
Dim diff_minutes2 As Integer
Dim diff_seconds1 As Integer
Dim diff_seconds2 As Integer
Dim d As Date
d = Now
diff_days1 = DateDiff("d", d, t1)
diff_days2 = DateDiff("d", d, t2)
diff_hours1 = DateDiff("h", d, t1)
diff_hours2 = DateDiff("h", d, t2)
diff_minutes1 = DateDiff("n", d, t1)
diff_minutes2 = DateDiff("n", d, t2)
diff_seconds1 = DateDiff("s", d, t1)
diff_seconds2 = DateDiff("s", d, t2)

If diff_days1 - diff_days2 > 0 Then
 ReturnValue = 1
 ElseIf diff_days1 - diff_days2 < 0 Then
 ReturnValue = -1
 Else
    If diff_hours1 - diff_hours2 > 0 Then
    ReturnValue = 1
    ElseIf diff_hours1 - diff_hours2 > 0 Then
    ReturnValue = -1
    Else
       If diff_minutes1 - diff_minutes2 > 0 Then
       ReturnValue = 1
       ElseIf diff_minutes1 - diff_minutes2 < 0 Then
       ReturnValue = -1
       Else
          If diff_seconds1 - diff_seconds2 > 0 Then
          ReturnValue = 1
          ElseIf diff_seconds1 - diff_seconds2 < 0 Then
          ReturnValue = -1
          Else
          ReturnValue = 0
          End If
       End If
    End If
End If
Date_Compare = ReturnValue
End Function

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 189 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_ShayW
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
3
Merci
DateDiff : Pourquoi ne fais-tu pas la différence entre tes deux dates plutôt que de bidouiller des tests de jours, heures ... ?
Si tu fais une différence entre tes deux dates, exprimée en secondes :
Si 0
Si < 0
Si > 0
Tu auras là les 3 possibilités = plus simple à traiter

Autre chose : Ton code est, à l'origine, du code VB.Net.
Si tu dois l'utiliser en VB6 (sous réserve de compatibilité), il faut penser aux types de variables.
En VB6, DateDiff renvoie un Long, pas un Integer : Gare aux bugs de dépassement de capacité !
Integer VB.Net --> Long en VB6
Short VB.Net --> Integer en VB6
(pense à regarder dans l'aide)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 189 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
46
0
Merci
Salut
dateInterval est defini comme type string
donc dateInterval.Day est incorrecte
ainsi que
dateInterval.hour etc
Commenter la réponse de cs_ShayW
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
0
Merci
Le plus simple c de regarderl'aide de vb
Commenter la réponse de 4u4me4us
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
63
0
Merci
BL1919 : Dernier rappel : Il est important que tu postes tes messages dans la bonne catégorie.
Tu poses tes questions dans la catégorie VB6 mais tu colles du code VB.Net.
Il est important qu'on sache avec quoi tu travailles, d'une part parce qu'il est primordial de te répondre efficacement, d'autre part pour éviter qu'on perde du temps à te répondre alors que les solutions ne peuvent pas s'appliquer.
Comme toi, on est bénévole ici, alors ne perd pas de temps et n'en fait perdre à personne.
Merci

Autre possibilité : tu n'y connais rien (ce qui n'est pas un problème) et tu colles des bouts de code au hasard dans l'espoir d'avoir du code tout corrigé.
Dans ce cas, n’hésite pas à le dire; on a tous été débutant. Fais des recherches parmi les précédentes questions du forum; charge des applications parmi les sources disponibles sur le site et analyse les méthodes utilisées; fais des essais dans ton coin.
Tu en apprendras plus qu'en comptant toujours sur les autres.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack