Excel/MS QUERY /VBA

Oxygene31

XLDnaute Nouveau
Bonjours à tous,

Avant de vous exposer mon problème voici ce que je compte faire :
J'ai 2 tables (2 feuilles donc).
La 1ere contenant le nom et prénom de patients
La 2eme contient le poids de ces patients (donc nom et prénom également pour lier les 2 tables) à des dates.

j'aimerais pouvoir selon le patient sélectionné (par le biais d'une userform) afficher sur une nouvelle feuille un graphique de l'évolution du poids en fonction des dates.
Je comptais donc faire une maccro qui lance une requête MS QUERY et m'affiche dans un tableau uniquement les enregistrements voulus et ensuite qui tracerai le graphe.

J'ai donc fait la requete manuellement en enregistrant la maccro.
Code:
    With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
        "ODBC;DBQ=C:\Documents and Settings\myke\Bureau\Mes-RDV\Patients.xls;DefaultDir=C:\Documents and Settings\myke\Bureau\Mes-RDV;Driver=" _
        ), Array( _
        "{Driver do Microsoft Excel(*.xls)};DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=0;SafeTra" _
        ), Array("nsactions=0;Threads=3;UserCommitSync=Yes;")), Destination:=Range( _
        "A1"))
        .CommandText = Array( _
        "SELECT `Patient$`.Nom, `Patient$`.Prénom, `'Evolution-détaillée-patients$'`.Date, `'Evolution-détaillée-patients$'`.Poids" & Chr(13) & "" & Chr(10) & "FROM `C:\Documents and Settings\myke\Bureau\Mes-RDV\Patients`.`'Evolution-dét" _
        , _
        "aillée-patients$'` `'Evolution-détaillée-patients$'`, `C:\Documents and Settings\myke\Bureau\Mes-RDV\Patients`.`Patient$` `Patient$`" & Chr(13) & "" & Chr(10) & "WHERE `Patient$`.Nom = `'Evolution-détaillée-patients$'`.`Nom#pati" _
        , _
        "ent` AND `'Evolution-détaillée-patients$'`.`Prénom#patient` = `Patient$`.Prénom AND ((`Patient$`.Nom='Esquirol) AND (`Patient$`.Prénom='Marina'))" & Chr(13) & "" & Chr(10) & "ORDER BY `'Evolution-détaillée-patients$'`.Date" _
        )
        .Name = "Lancer la requête à partir de Patient_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With

Je pensais ensuite remplacer
Code:
((`Patient$`.Nom='Esquirol) AND (`Patient$`.Prénom='Marina'))
par
Code:
((`Patient$`.Nom=Nom) AND (`Patient$`.Prénom=Prénom))

Avec Nom et Prénom étant 2 variables ayant pour valeur la value de 2 lists box (je pourrais ainsi faire la requête selon les patients voulu)

Mais il m'affiche une erreur dans le code :.Refresh BackgroundQuery:=False

Merci pour vos réponses
 

James007

XLDnaute Barbatruc
Re : Excel/MS QUERY /VBA

Bonjour,

Ton raisonnement est très bon ...

Avec un code initial qui fonctionne, au moment de rajouter tes deux variables ...
as-tu inséré une boucle ..?
Comment as-tu modifié ton code ..? puisque tu sembles dire que c'est la modification ques tu as faite qui plante ton code ...

A +
:)
 

JNP

XLDnaute Barbatruc
Re : Excel/MS QUERY /VBA

Bonjour le fil :),
Je suis pas très spécialiste en MS QUERY, mais au vu de ton code VBA, je dirais que tu est dans une chaine de texte, donc il faudrait le corriger ainsi
Code:
((`Patient$`.Nom='" & Nom & ") AND (`Patient$`.Prénom='" & Prénom & "'))"
D'autre part, ça me parait bizarre que 'Esquirol n'a pas de cote après alors que 'Marina' en a une, mais comme je disais, je n'y connait rien en MS QUERY :p...
Bon dimanche :cool:
 

Oxygene31

XLDnaute Nouveau
Re : Excel/MS QUERY /VBA

Je me disais bien que c'était une erreur de chaine mais je ne trouvais pas la solution.

Avec
Code:
'" & Prenom & "'
ça marche.

Maintenant que j'arrive à générer le tableau avec uniquement les données qui m'intéressent je n'ai plus qu'a générer le graphique.

Je vous met le code permettant de générer le graphique (ça peut toujours servir)

Code:
cellule = Range("D1").End(xlDown).Row
    Charts.Add
    ActiveChart.ChartType = xlLineMarkersStacked
    ActiveChart.SetSourceData Source:=Sheets("Résultats").Range("C2:D" & cellule), PlotBy _
        :=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Résultats"
    With ActiveChart
        .HasTitle = True
        .ChartTitle.Characters.Text = "Evolution du poids"
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Dates"
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "poids"
    End With
    ActiveChart.HasDataTable = False

==> on vient chercher la dernière cellule remplie de la colonne D pour rendre la chose dynamique lorsque l'on va ajouter des données.



MERCI BEAUCOUP POUR VOTRE AIDE
 

Discussions similaires

Réponses
22
Affichages
4 K
Réponses
4
Affichages
2 K

Statistiques des forums

Discussions
314 626
Messages
2 111 299
Membres
111 094
dernier inscrit
MFrequence