Macro date la plus récente chronologique

kriss13 Messages postés 11 Date d'inscription mercredi 25 juillet 2012 Statut Membre Dernière intervention 27 juillet 2012 - 25 juil. 2012 à 16:18
kriss13 Messages postés 11 Date d'inscription mercredi 25 juillet 2012 Statut Membre Dernière intervention 27 juillet 2012 - 27 juil. 2012 à 11:10
Bonjour, j'ai un fichier excel qui a une macro et qui va chercher les valeurs dans une base de donnée. Il recupere les informations des personnes, la date d'intervention et d'autre information concernant les interventions.

J'ai réalisé plusieurs intervention chez ces personnes et je souhaiterais qu'apparaissent uniquement la dernière date d'intervention dans mon tableau excel.

Je vous joints ci dessous la macro pouvez me dire ce qu'il faut modifier et où car je suis très nul....

En vous remerciant.

Cordialement.

Macro :

Sub BilanAbosControlesFactures()
Dim adocnx As New ADODB.Connection

Dim abo As New ADODB.Recordset
Dim parc As New ADODB.Recordset
Dim prop As New ADODB.Recordset
Dim controle As New ADODB.Recordset
Dim fact_vis As New ADODB.Recordset

Dim texte_SQL As String

Dim MesParcelles As String
Dim i As Integer
Dim j As Integer
Dim idAbo As Integer

'connexion ADO au fichier
Dim cheminBase As String
cheminBase = ConstruireChaineConnexion()

If (cheminBase <> "") Then
'associer le chemin à la connexion
adocnx.ConnectionString = cheminBase
'ouvrir la connexion
adocnx.Open
'Suppression des données
Range("A3:R65536").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

i = 3 'on commencera d'écrire après les 2 lignes d'entêtes

'chercher les abonnés
texte_SQL = "SELECT id_abonne as id, abo_nom, abo_prenom, abo_bat_num_rue, abo_bat_adresse, abo_bat_cp, abo_bat_ville FROM abo ORDER BY id_abonne"
abo.Open texte_SQL, adocnx
If Not (abo.EOF) Then
abo.MoveFirst
End If

While Not (abo.EOF)
Separateur (i)

'écrire l'abonné
idAbo = abo.Fields("id").Value
Cells(i, 1).Value = abo.Fields("id").Value
Cells(i, 2).Value = abo.Fields("abo_nom").Value
Cells(i, 3).Value = abo.Fields("abo_prenom").Value
Cells(i, 4).Value = abo.Fields("abo_bat_num_rue").Value
Cells(i, 5).Value = abo.Fields("abo_bat_adresse").Value
Cells(i, 6).Value = abo.Fields("abo_bat_cp").Value
Cells(i, 7).Value = abo.Fields("abo_bat_ville").Value

'chercher ses parcelles
texte_SQL = "SELECT parc_section, parc_num_cadas FROM parcelles INNER JOIN parcelles_abo ON parcelles_abo.parc_id=parcelles.parc_id WHERE parcelles_abo.id_abonne=" & idAbo
parc.Open texte_SQL, adocnx
MesParcelles = "" 'contiendra la liste des parcelles
If Not (parc.EOF) Then
parc.MoveFirst
End If
'écrire ses parcelles
While Not (parc.EOF)
'constituer la liste des parcelles
MesParcelles = MesParcelles & parc.Fields("parc_section").Value & " " & parc.Fields("parc_num_cadas").Value & " ; "
parc.MoveNext
Wend 'fin du while not (parc.eof)
If (MesParcelles <> "") Then
'inscrire la liste dans la cellule adaptée
Cells(i, 8).Value = Left(mesparcellest, Len(MesParcelles) - 3)
End If
'fermer ses parcelles
parc.Close

'chercher ses propriétaires
texte_SQL = "SELECT prop_nom, prop_prenom, prop_adresse, prop_cp, prop_ville FROM abo_props WHERE abo_props.id_abonne=" & idAbo & " AND abo_props.prop_id IN (SELECT min(p.prop_id) FROM abo_props as p WHERE p.id_abonne=abo_props.id_abonne)"
prop.Open texte_SQL, adocnx
If Not (prop.EOF) Then
prop.MoveFirst
End If
'écrire ses propriétaires
While Not (prop.EOF)
Cells(i, 9).Value = prop.Fields("prop_nom").Value
Cells(i, 10).Value = prop.Fields("prop_prenom").Value
Cells(i, 11).Value = prop.Fields("prop_adresse").Value
Cells(i, 12).Value = prop.Fields("prop_cp").Value
Cells(i, 13).Value = prop.Fields("prop_ville").Value
prop.MoveNext
Wend 'fin du While Not (prop.EOF)
'fermer ses propriétaires
prop.Close
'chercher ses contrôles
texte_SQL = "SELECT vis_id, vis_date, vis_type, vis_inst_ok, vis_inst_travaux, vis_cptrendu FROM visites WHERE visites.vis_id IN (SELECT visites_abos.vis_id FROM visites_abos WHERE visites_abos.vis_id=visites.vis_id AND visites_abos.id_abonne=" & idAbo & ") AND visites.vis_programmation=0 ORDER BY visites.vis_date"
controle.Open texte_SQL, adocnx
If Not (controle.EOF) Then
controle.MoveFirst
End If
j = i
'écrires ses contrôles
While Not (controle.EOF)
Cells(j, 14).Value = CDate(controle.Fields("vis_date").Value)
Cells(j, 15).Value = TypeVisite(controle.Fields("vis_type").Value)
If (controle.Fields("vis_inst_ok").Value = 0) Then
Cells(j, 16).Value = Conformite(controle.Fields("vis_inst_ok").Value) & " " & Travaux(controle.Fields("vis_inst_travaux").Value)
Else
Cells(j, 16).Value = Conformite(controle.Fields("vis_inst_ok").Value)
End If
Cells(j, 17).Value = controle.Fields("vis_cptrendu").Value
'chercher les factures de contrôles
texte_SQL = "SELECT fact_ope.ope_dd_facturation FROM fact_ope INNER JOIN fact_visite ON fact_visite.fact_id=fact_ope.fact_id WHERE fact_visite.vis_id=" & controle.Fields("vis_id").Value
fact_vis.Open texte_SQL, adocnx
If Not (fact_vis.EOF) Then
fact_vis.MoveFirst
End If
'écrire les factures de contrôles
While Not (fact_vis.EOF)
Cells(j, 18).Value = fact_vis.Fields("ope_dd_facturation").Value
fact_vis.MoveNext
Wend 'fin du While Not (fact_vis.EOF)
'fermer les factures de contrôles
fact_vis.Close
j = j + 1 'passer à la ligne suivante pour le contrôle suivant
controle.MoveNext
Wend 'fin du While Not (controle.EOF)
'fermer ses contrôles
controle.Close
'passer à la bonne ligne en fonction du nombre de contrôles
If (j > i + 1) Then
i = j
Else
i = i + 1
End If
'abonné suivant
abo.MoveNext
Wend 'fin du While Not (abo.EOF)
abo.Close
Separateur (i)
MsgBox ("Terminé.")
'fermer la connexion
adocnx.Close

End If 'fin du If (cheminBase <> "") Then

End Sub

21 réponses

kriss13 Messages postés 11 Date d'inscription mercredi 25 juillet 2012 Statut Membre Dernière intervention 27 juillet 2012
27 juil. 2012 à 11:10
Je vais tester votre méthode.

Merci
0
Rejoignez-nous