Bonjour,
J'ai une table Pneus contenant des immatriculations et des=20
dates de changement de pneus, plusieurs dates pour une=20
m=EAme immatriculation
Je souhaite savoir quel vehicule a consomm=E9 le plus de=20
pneu : faire la difference des dates et recuperer=20
l'immatriculation qui a le plus petit intervalle.
Je n'arrive pas a faire une requete qui marche.
Auriez-vous une id=E9e(m=EAme en vb)
Merci
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Hervé
Salut Carine, La proc ci-dessous est un peu tirée par les cheveux mais je n'est rien trouvé d'autre (pas trop habitué à Access et c'est la 1ère fois que j'interviens dans ce groupe). Admettons que tu est dans ta table "Pneus" un champ "Immatriculation", un champ "DateAncien" (date du précédent remplacement) et un champ "DateNouveau" (date du nouveau remplacement) au format date bien évidemment, adapte si les noms sont diff. La proc fonctionne de la manière suivante : 1 Ouvre une connection (avec ADO) 2 dimensionne le tableau par rapport au nombre d'enregistrements 3 récupère la différence en nombre de jours entre les 2 champs de dates 4 récupère l'immatriculation correspondante 5 ferme la connection 6 effectue un tri croissant dans le tableau 7 affiche le résultat dans un MsgBox Tu peux boucler sur le tableau si tu veux avoir les résultats afficher dans l'ordre. L'exemple de la boucle qui est en commantaire affiche le résultat dans la fenêtre d'exécution (Ctrl+G).
Pour le test, à mettre dans un module standard :
Private Sub DiffDate() Dim ConnectBD As ADODB.Connection Dim Rs As ADODB.Recordset Dim Tbl() Dim I As Integer Dim ChaineSQL As String
Set ConnectBD = CurrentProject.Connection Set Rs = New ADODB.Recordset
With Rs .CursorType = adOpenKeyset .LockType = adLockOptimistic .Open ChaineSQL, ConnectBD ReDim Tbl(1 To .RecordCount, 1 To 2) Do While Not .EOF I = I + 1 'en nombre de jours >"d" Tbl(I, 1) = DateDiff("d", .Fields("DateAncien"), _ .Fields("DateNouveau")) Tbl(I, 2) = .Fields("Immatriculation") .MoveNext Loop End With
Rs.Close
'tri le tableau en ordre croissant Tri Tbl()
'utilise une boucle dans ce genre pour avoir l'ordre 'd'usure 'For I = 1 To UBound(Tbl, 1) ' Debug.Print "Immatriculation : " & Tbl(I, 2) _ ' & ", Durée en Jours : " & Tbl(I, 1) 'Next
MsgBox "La voiture qui a le plus usée " _ & "ses pneus, est immatriculée : " _ & vbCrLf & UCase(Tbl(1, 2)) & vbCrLf _ & "Son train de pneus a été usé en " & Tbl(1, 1) & " jours !"
Set ConnectBD = Nothing Set Rs = Nothing Erase Tbl End Sub
Sub Tri(Tbl()) Dim Tempo1, Tempo2 Dim I As Integer, J As Integer 'éffectue un tri croissant For I = 1 To UBound(Tbl) - 1 For J = I + 1 To UBound(Tbl) If Tbl(I, 1) > Tbl(J, 1) Then Tempo1 = Tbl(J, 1) Tempo2 = Tbl(J, 2) Tbl(J, 1) = Tbl(I, 1) Tbl(J, 2) = Tbl(I, 2) Tbl(I, 1) = Tempo1 Tbl(I, 2) = Tempo2 End If Next J Next I End Sub
Hervé.
"carine" a écrit dans le message news: 010c01c35d0a$b5f90d80$ Bonjour, J'ai une table Pneus contenant des immatriculations et des dates de changement de pneus, plusieurs dates pour une même immatriculation Je souhaite savoir quel vehicule a consommé le plus de pneu : faire la difference des dates et recuperer l'immatriculation qui a le plus petit intervalle. Je n'arrive pas a faire une requete qui marche. Auriez-vous une idée(même en vb) Merci
Salut Carine,
La proc ci-dessous est un peu tirée par les cheveux mais je n'est rien
trouvé d'autre (pas trop habitué à Access et c'est la 1ère fois que
j'interviens dans ce groupe). Admettons que tu est dans ta table "Pneus" un
champ "Immatriculation", un champ "DateAncien" (date du précédent
remplacement) et un champ "DateNouveau" (date du nouveau remplacement) au
format date bien évidemment, adapte si les noms sont diff. La proc
fonctionne de la manière suivante :
1 Ouvre une connection (avec ADO)
2 dimensionne le tableau par rapport au nombre d'enregistrements
3 récupère la différence en nombre de jours entre les 2 champs de dates
4 récupère l'immatriculation correspondante
5 ferme la connection
6 effectue un tri croissant dans le tableau
7 affiche le résultat dans un MsgBox
Tu peux boucler sur le tableau si tu veux avoir les résultats afficher dans
l'ordre. L'exemple de la boucle qui est en commantaire affiche le résultat
dans la fenêtre d'exécution (Ctrl+G).
Pour le test, à mettre dans un module standard :
Private Sub DiffDate()
Dim ConnectBD As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Tbl()
Dim I As Integer
Dim ChaineSQL As String
Set ConnectBD = CurrentProject.Connection
Set Rs = New ADODB.Recordset
With Rs
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open ChaineSQL, ConnectBD
ReDim Tbl(1 To .RecordCount, 1 To 2)
Do While Not .EOF
I = I + 1
'en nombre de jours >"d"
Tbl(I, 1) = DateDiff("d", .Fields("DateAncien"), _
.Fields("DateNouveau"))
Tbl(I, 2) = .Fields("Immatriculation")
.MoveNext
Loop
End With
Rs.Close
'tri le tableau en ordre croissant
Tri Tbl()
'utilise une boucle dans ce genre pour avoir l'ordre
'd'usure
'For I = 1 To UBound(Tbl, 1)
' Debug.Print "Immatriculation : " & Tbl(I, 2) _
' & ", Durée en Jours : " & Tbl(I, 1)
'Next
MsgBox "La voiture qui a le plus usée " _
& "ses pneus, est immatriculée : " _
& vbCrLf & UCase(Tbl(1, 2)) & vbCrLf _
& "Son train de pneus a été usé en " & Tbl(1, 1) & " jours !"
Set ConnectBD = Nothing
Set Rs = Nothing
Erase Tbl
End Sub
Sub Tri(Tbl())
Dim Tempo1, Tempo2
Dim I As Integer, J As Integer
'éffectue un tri croissant
For I = 1 To UBound(Tbl) - 1
For J = I + 1 To UBound(Tbl)
If Tbl(I, 1) > Tbl(J, 1) Then
Tempo1 = Tbl(J, 1)
Tempo2 = Tbl(J, 2)
Tbl(J, 1) = Tbl(I, 1)
Tbl(J, 2) = Tbl(I, 2)
Tbl(I, 1) = Tempo1
Tbl(I, 2) = Tempo2
End If
Next J
Next I
End Sub
Hervé.
"carine" <carien_ruhlmann@yahoo.fr> a écrit dans le message news:
010c01c35d0a$b5f90d80$a401280a@phx.gbl...
Bonjour,
J'ai une table Pneus contenant des immatriculations et des
dates de changement de pneus, plusieurs dates pour une
même immatriculation
Je souhaite savoir quel vehicule a consommé le plus de
pneu : faire la difference des dates et recuperer
l'immatriculation qui a le plus petit intervalle.
Je n'arrive pas a faire une requete qui marche.
Auriez-vous une idée(même en vb)
Merci
Salut Carine, La proc ci-dessous est un peu tirée par les cheveux mais je n'est rien trouvé d'autre (pas trop habitué à Access et c'est la 1ère fois que j'interviens dans ce groupe). Admettons que tu est dans ta table "Pneus" un champ "Immatriculation", un champ "DateAncien" (date du précédent remplacement) et un champ "DateNouveau" (date du nouveau remplacement) au format date bien évidemment, adapte si les noms sont diff. La proc fonctionne de la manière suivante : 1 Ouvre une connection (avec ADO) 2 dimensionne le tableau par rapport au nombre d'enregistrements 3 récupère la différence en nombre de jours entre les 2 champs de dates 4 récupère l'immatriculation correspondante 5 ferme la connection 6 effectue un tri croissant dans le tableau 7 affiche le résultat dans un MsgBox Tu peux boucler sur le tableau si tu veux avoir les résultats afficher dans l'ordre. L'exemple de la boucle qui est en commantaire affiche le résultat dans la fenêtre d'exécution (Ctrl+G).
Pour le test, à mettre dans un module standard :
Private Sub DiffDate() Dim ConnectBD As ADODB.Connection Dim Rs As ADODB.Recordset Dim Tbl() Dim I As Integer Dim ChaineSQL As String
Set ConnectBD = CurrentProject.Connection Set Rs = New ADODB.Recordset
With Rs .CursorType = adOpenKeyset .LockType = adLockOptimistic .Open ChaineSQL, ConnectBD ReDim Tbl(1 To .RecordCount, 1 To 2) Do While Not .EOF I = I + 1 'en nombre de jours >"d" Tbl(I, 1) = DateDiff("d", .Fields("DateAncien"), _ .Fields("DateNouveau")) Tbl(I, 2) = .Fields("Immatriculation") .MoveNext Loop End With
Rs.Close
'tri le tableau en ordre croissant Tri Tbl()
'utilise une boucle dans ce genre pour avoir l'ordre 'd'usure 'For I = 1 To UBound(Tbl, 1) ' Debug.Print "Immatriculation : " & Tbl(I, 2) _ ' & ", Durée en Jours : " & Tbl(I, 1) 'Next
MsgBox "La voiture qui a le plus usée " _ & "ses pneus, est immatriculée : " _ & vbCrLf & UCase(Tbl(1, 2)) & vbCrLf _ & "Son train de pneus a été usé en " & Tbl(1, 1) & " jours !"
Set ConnectBD = Nothing Set Rs = Nothing Erase Tbl End Sub
Sub Tri(Tbl()) Dim Tempo1, Tempo2 Dim I As Integer, J As Integer 'éffectue un tri croissant For I = 1 To UBound(Tbl) - 1 For J = I + 1 To UBound(Tbl) If Tbl(I, 1) > Tbl(J, 1) Then Tempo1 = Tbl(J, 1) Tempo2 = Tbl(J, 2) Tbl(J, 1) = Tbl(I, 1) Tbl(J, 2) = Tbl(I, 2) Tbl(I, 1) = Tempo1 Tbl(I, 2) = Tempo2 End If Next J Next I End Sub
Hervé.
"carine" a écrit dans le message news: 010c01c35d0a$b5f90d80$ Bonjour, J'ai une table Pneus contenant des immatriculations et des dates de changement de pneus, plusieurs dates pour une même immatriculation Je souhaite savoir quel vehicule a consommé le plus de pneu : faire la difference des dates et recuperer l'immatriculation qui a le plus petit intervalle. Je n'arrive pas a faire une requete qui marche. Auriez-vous une idée(même en vb) Merci