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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionje peux modifier mes messages ou je suis obligé de réécrire tout ?
Comment faire une reqUete regroupement ?
Et comment on fait option explicit et option strict
texte_SQL = "SELECT * FROM visites " & _ "WHERE Id_abonne= " & idAbo & _ " AND visites.vis_programmation=0 " & _ "ORDER BY visites.vis_date;" 'Tu te pointes vers le dernier enregistrement, pour avoir l' IdVis. rsVisite.Open texte_SQL, adocnx If Not (controle.EOF) Then rsVisite.MoveLast IdVis=rsVisite![vis_id] End If
texte_SQL = "SELECT * FROM visites_abos " & _ "WHERE visites_abos.vis_id=" & IdVis & ";" controle.Open texte_SQL, adocnx ...
'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=" & IdVis & ";"
chaque personne a son domaine de compétence et l'informatique ce n'est pas mon domaine
La macro je l'ai demandé à un pro
Range("A3:R65536").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.ClearContents
... etc ...
C'est compliquer pour se former afin d'arriver à faire ce que je veux