Pb de dates avec VB et Access

Messages postés
29
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
1 août 2002
-
Messages postés
29
Date d'inscription
vendredi 8 mars 2002
Statut
Membre
Dernière intervention
26 juillet 2002
-
Alors voila, g un formulaire avec 2 controles :
- un me donnant un mois
- l autre me donnant une annee

Avec ca, je dois calculer le chiffre d affaire de ce mois (de cette annee) : par exemple le CA effectue en juin 2002.
Pb : je sens que ma requete pue un peu du fait qu'il me sort tjs le meme resultat : 250 €.

Pourtant, la structure de mes tables est correcte (je suis étudiant en maitrise d'informatique). En effet, Date_contrat est un champs de type date et Id et Id_contrat sont de type Long, Cout et Prix sont egalement de type Long....

PS : c'est la premiere fois que je fait du VB, alors soyez indulgent :)

Voici ma source :

Private Sub Commande120_Click()

Dim annee_recherche As String
Dim mois_recherche As String
Dim dbf As Database
Dim tuple As Recordset
Dim requete As String

Dim date_debut As Date
Dim date_fin As Date

Dim chiffre_affaire As Long
Dim marge As Long
Dim i As Integer

If (IsNull(Forms![Résultat - calcul du CA pour un mois donné]![Modifiable118].Value) Or (IsNull(Forms![Résultat - calcul du CA pour un mois donné]![Modifiable116].Value))) Then
MsgBox "Un champ n'a pas été rempli... :("
Else
annee_recherche = Forms![Résultat - calcul du CA pour un mois donné]![Modifiable118].Value
mois_recherche = Forms![Résultat - calcul du CA pour un mois donné]![Modifiable116].Value

Select Case mois_recherche
Case "Janvier"
date_debut = CDate("01/01/" & annee_recherche)
date_fin = CDate("31/01/" & annee_recherche)
Case "Février"
date_debut = CDate("01/02/" & annee_recherche)
date_fin = CDate("28/02/" & annee_recherche)
Case "Mars"
date_debut = CDate("01/03/" & annee_recherche)
date_fin = CDate("31/03/" & annee_recherche)
Case "Avril"
date_debut = CDate("01/04/" & annee_recherche)
date_fin = CDate("30/04/" & annee_recherche)
Case "Mai"
date_debut = CDate("01/05/" & annee_recherche)
date_fin = CDate("31/05/" & annee_recherche)
Case "Juin"
date_debut = CDate("01/06/" & annee_recherche)
date_fin = CDate("30/06/" & annee_recherche)
Case "Juillet"
date_debut = CDate("01/07/" & annee_recherche)
date_fin = CDate("31/07/" & annee_recherche)
Case "Août"
date_debut = CDate("01/08/" & annee_recherche)
date_fin = CDate("31/08/" & annee_recherche)
Case "Septembre"
date_debut = CDate("01/09/" & annee_recherche)
date_fin = CDate("30/09/" & annee_recherche)
Case "Octobre"
date_debut = CDate("01/10/" & annee_recherche)
date_fin = CDate("31/10/" & annee_recherche)
Case "Novembre"
date_debut = CDate("01/11/" & annee_recherche)
date_fin = CDate("30/11/" & annee_recherche)
Case "Décembre"
date_debut = CDate("01/12/" & annee_recherche)
date_fin = CDate("31/12/" & annee_recherche)
Case Else
MsgBox "Le mois que vous venez d'insérer est incorrect..."
End Select


Set dbf = CurrentDb

requete = "SELECT Prix, Cout "
requete = requete & "FROM Contrat, Piece_prestation_formation "
requete = requete & "WHERE [Piece_prestation_formation].[Id_contrat]=[Contrat].[Id] "
requete = requete & "AND [Contrat].[Date_contrat] >= #" & date_debut & "# "
requete = requete & "AND [Contrat].[Date_contrat] <= #" & date_fin & "#; "

Set tuple = dbf.OpenRecordset(requete)

If tuple.RecordCount = 0 Then
MsgBox "Il n'existe pas de contrat enregistré pendant ce mois..."
Else

chiffre_affaire = 0

For i = 1 To tuple.RecordCount
marge = CLng(tuple("Prix").Value) - CLng(tuple("Cout").Value)
chiffre_affaire = chiffre_affaire + marge
tuple.MoveNext
Next i

MsgBox "Chiffre d'affaire sur la période comprise entre le " & CStr(date_debut) & " et le " & CStr(date_fin) & " : " & vbCrLf & vbCrLf & vbTab & chiffre_affaire & " €"
End If

tuple.Close
Set tuple = Nothing
dbf.Close

End If
End Sub

3 réponses

Messages postés
75
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
24 mars 2003

requete = "SELECT Prix, Cout "
requete = requete & "FROM Contrat, Piece_prestation_formation "
requete = requete & "WHERE [Piece_prestation_formation].[Id_contrat]=[Contrat].[Id] "
requete = requete & "AND [Contrat].[Date_contrat] >= #" & format(date_debut,"dd/mm"yyyy") & "# "
requete = requete & "AND [Contrat].[Date_contrat] <= #" & format(date_fin,"dd/mm/yyyy") & "#; "

voila je pense que c t un probleme de format dans ta requete j'espere avoir repondu a ta question ;))

++
Messages postés
29
Date d'inscription
mardi 16 juillet 2002
Statut
Membre
Dernière intervention
1 août 2002

C gentil de m'aider.
mais ceci ne marche tjs po
Il retourne 250 € alors qu il devrait retouner 700 € comme CA

je pense qu il a du mal avec les dates : je sais po si il pige bien (le VB) ce que je veux --> en effet, j ai pas l impression qu il comprenne ce que veut dire Date_contrat >= #01/07/2002#

:(
Messages postés
29
Date d'inscription
vendredi 8 mars 2002
Statut
Membre
Dernière intervention
26 juillet 2002

Salut.
J'ai eu ce probleme, j'ai galéré un bon moment et j'ai la solution :
Si tu débug et que t'affiches des dates dans ta requetes, tu vas t'appercevoir que quand tu passes une varible type date de VBA vers SQL, il faut la passer formatée de la sorte :

MM/JJ/AAAA.

Sinon, ton 01/03/2002 est interprété comme le 3/01/2002,
et ton 31/03/2002 va etre interprété comme... je sais plus trop quoi qmais c'est pas joli à voir :)

Donc la solution c'est celle de notre ami Xime, avec un format "mm/dd/yyyy".

allez fais nous un sourrire :big) :-p

Bonne chance et bonne continuation :)