begin process at 2013 05 24 06:27:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Base de données

 > 

Access

 > 

Macro date la plus récente chronologique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Macro date la plus récente chronologique

mercredi 25 juillet 2012 à 16:18:23 | Macro date la plus récente chronologique

kriss13

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
mercredi 25 juillet 2012 à 18:37:19 | Re : Macro date la plus récente chronologique

LIBRE_MAX

Bonjour,

Très difficile de lire un code non indenté.

D' après ce que j' ai pu dèceler, il te suffit de rechercher les interventions dans un ordre croissant des dates.Puis de se positionner sur le dernier enregistrement.
Ceci dit tu peux faire une requete regroupement.



[] Ce qui va sans dire. va mieux en le disant.
mercredi 25 juillet 2012 à 19:02:39 | Re : Macro date la plus récente chronologique

NHenry

Membre Club Administrateur CodeS-SourceS
Bonjour,

Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).

---------------------------------------------------------------------
  1. Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.
  2. Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).
  3. En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
  4. Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés

---
Mon site
mercredi 25 juillet 2012 à 19:10:21 | Re : Macro date la plus récente chronologique

kriss13

Merci pour vos réponses alors je corrige mon erreur

Comment faire une reqUete regroupement ?

Code Visual Basic :
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
mercredi 25 juillet 2012 à 19:19:13 | Re : Macro date la plus récente chronologique

NHenry

Membre Club Administrateur CodeS-SourceS
Bonjour,

C'est déjà un bon dé"but, pour faciliter la lecture, ajoutes aussi l'indentation comme te l'a conseillé Libre_Max.

Essayes aussi d'appliquer sa suggestion de résolution.

---------------------------------------------------------------------
  1. Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.
  2. Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).
  3. En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
  4. Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés

---
Mon site
mercredi 25 juillet 2012 à 20:25:36 | Re : Macro date la plus récente chronologique

kriss13

je peux modifier mes messages ou je suis obligé de réécrire tout ?

Et comment on fait option explicit et option strict

Merci pour vos aides
mercredi 25 juillet 2012 à 22:30:13 | Re : Macro date la plus récente chronologique

LIBRE_MAX

Re-Bonsoir,

je peux modifier mes messages ou je suis obligé de réécrire tout ?


non, c' est plus nécessaire.Mais si tu devais le faire pour plus d' éclaircissement, fais le de façon circoncise, pour aller à l' essentiel.
Déjà tu dois nous préciser quelle partie du code te pose des soucis..

Comment faire une reqUete regroupement ?



Si on prend la partie recherche des contrôles, ça serais difficicile de te donner un exemple.Vu que tu utilises une requete imbriquée.

Et comment on fait option explicit et option strict


Les deux instructions doivent être placées tout au début de la partie declaration de ton module.




[] Ce qui va sans dire. va mieux en le disant.
mercredi 25 juillet 2012 à 22:38:31 | Re : Macro date la plus récente chronologique

LIBRE_MAX

Pour faure encore plus simple, donnes nous une idée sur les tables qui sont en jeu.Avec la structure de chacune d' elle, et une description de ce que tu tentes de faire.








[] Ce qui va sans dire. va mieux en le disant.
jeudi 26 juillet 2012 à 07:58:20 | Re : Macro date la plus récente chronologique

kriss13

J'aimerais dans mon tableau excel faire afficher le dernier contrôle réalisé chez chaque particulier et ce qui va avec facture.....

Donc je suppose ce qui est à modifier ou à insérer ce situe dés la partie chercher ces contrôles.

En vous remerciant pour votre aide.
jeudi 26 juillet 2012 à 14:06:44 | Re : Macro date la plus récente chronologique

LIBRE_MAX


Bonjour,
Bon,on va faire avec ce qu' on a..

A mon avis, la requete dans la partie chercher les controles,doit être fractionnée en deux temps:

1°-récupèrer IdVis de la dernière visiste de IdAbo en question.

Code Visual Basic :
 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

2°-chercher ensuite dans visites_abos les controles correspondants à cet IdVis.
Code Visual Basic :
 texte_SQL = "SELECT * FROM visites_abos " & _
   "WHERE visites_abos.vis_id=" & IdVis & ";"
   controle.Open texte_SQL, adocnx
   ...


Il va de soi que tu vas utiliser 2 recordsets dans cette partie là.
Tu dois donc en rajouter un.

C' est après que tu pourras passer aux factures (toujours de l' abonné en question).
Code Visual Basic :
'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 & ";"

IdVis étant la variable dans laquelle on a récupèré la dernière visiste de IdAbo en question..





[] Ce qui va sans dire. va mieux en le disant.

1 2 3

Cette discussion est classée dans : fields, value, vis, prop, abo


Répondre à ce message

Sujets en rapport avec ce message

- PB prcours de recordset !!! HARD [ par ckoo ] Voila mon code :a = idAff Set rsTemp = BD.OpenRecordset( _ "SELECT idTâche FROM TACHES WHERE nomTâche =""" & T & """ ", dbOpenDynaset) b = rs - PB de recordset (parcours) HARD !!!! [ par ckoo ] Voila mon code :a = idAff Set rsTemp = BD.OpenRecordset( _ "SELECT idTâche FROM TACHES WHERE nomTâche =""" & T & """ ", dbOpenDynaset) b = rs - PB de recordset (parcours) HARD !!!! [ par ckoo ] Voila mon code :a = idAff Set rsTemp = BD.OpenRecordset( _ "SELECT idTâche FROM TACHES WHERE nomTâche =""" & T & """ ", dbOpenDynaset) b = rs Mise à jour base Access [ par dmat ] J'ai écris le code suivant pour mettre à jour ma base (ouvre un fichier .txt, extrait les données et cherche les champs pour y intégrer les données) : with problématique [ par osoudee ] bonjour,j'ai l'habitude d'utiliser le with en vbscript et j'ai le malheur de remarqué qu'il ne fonctionne plus correctement:exemple : with toto.fields Problème avec Null [ par Globig ] Bonjour.Je rencontre un problème avec l'écriture suivanteIf rs.fields(0).value is Null Then variable = 0Else variable = rs.fields(0).value * 0.01End I afficher dans une liste [ par yaya31 ] re bonjoursJ ai des valeurs que j ai calcule et que j affiche dans un messageMsgBox ("le numero de la facture est: " & rs.Fields("Numfact").Value & " Urgent, problème de code [ par griese ] J'essai de coder un petit moteur de recherche mais il ne marche pas. Quelqu'un connait il la solution, je vous met le code : Private Sub recherche_Cli probleme de valeur [ par Fanch29 ] J'ai un petit problême avec une valeur.J'ai dans une table, sous access, contenant le teléphone d'un client. Cependant certains champs ne contient rie *VB5* |Ajout de lignes dans Excel comme dans une DB| [ par JLB59 ] Boujour à tous,J'ai récupéré sur ce site le prg permettant d'exporter une DB vers Excel.Je l'ai essayé et ça marche.Le prb est que si dans une DB on p


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,463 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales