Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] et requête SQL

3 réponses
Avatar
HD
Bonjour,

En VBA, j'ai une requête pour obtenir des données... mon souci est que je ne
comprend pas un résultat...

C'est une requête assez simple avec une jointure entre deux tables...

Si j'utilise cette requête :
Req = "SELECT dossiers.RaisonSociale, MAX(Factures.datefac) AS
Date_derniere_Facture FROM bdd.dbo.dossiers dossiers, bdd.dbo.Factures
Factures WHERE Dossiers.NEnreg =Factures.NEnregDos GROUP BY
dossiers.RaisonSociale"
J'obtiens bien ma liste de dossiers avec la dernière date de facture... mais
si je veux tout les champs de la table dossiers :
Req = "SELECT dossiers.*, MAX(Factures.datefac) AS Date_derniere_Facture
FROM bdd.dbo.dossiers dossiers, bdd.dbo.Factures Factures WHERE
Dossiers.NEnreg =Factures.NEnregDos GROUP BY dossiers.RaisonSociale"
Là, je me retrouve avec une page vide...

Pour la connexion entre Excel et SQL j'utilise:
With
ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=BdDCpta;Description=BdDCpta;UID=aa;PWD="
& MdP & ";APP=Microsoft Office
2003;WSID=ADMINFO;DATABASE=bdd;LANGUAGE=Français;Network=DBMSSOCN;Regional=yes",
Destination:=Range("A1"))
.CommandText = Req
.Name = "Liste Dossiers"
.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

Hum... je sais que mon souci est limite hors sujet sur le newsgroup Excel...
mais là c'est du VBA et du SQL et sur le newsgroup SQL je serais sûrement
également limite...

Merci pour votre aide
--
@+
HD

3 réponses

Avatar
michdenis
Bonjour,

Pour obtenir le code et le texte de ta requête,
tu lances l'enregistreur de macro et tu exécutes manuellement
ta requête utilisant MsQuery. Je ne suis pas certain pour Excel 2007,
mais c'est vrai pour les autres versions d'Excel.




"HD" a écrit dans le message de groupe de discussion :
hsb1qh$r85$
Bonjour,

En VBA, j'ai une requête pour obtenir des données... mon souci est que je ne
comprend pas un résultat...

C'est une requête assez simple avec une jointure entre deux tables...

Si j'utilise cette requête :
Req = "SELECT dossiers.RaisonSociale, MAX(Factures.datefac) AS
Date_derniere_Facture FROM bdd.dbo.dossiers dossiers, bdd.dbo.Factures
Factures WHERE Dossiers.NEnreg úctures.NEnregDos GROUP BY
dossiers.RaisonSociale"
J'obtiens bien ma liste de dossiers avec la dernière date de facture... mais
si je veux tout les champs de la table dossiers :
Req = "SELECT dossiers.*, MAX(Factures.datefac) AS Date_derniere_Facture
FROM bdd.dbo.dossiers dossiers, bdd.dbo.Factures Factures WHERE
Dossiers.NEnreg úctures.NEnregDos GROUP BY dossiers.RaisonSociale"
Là, je me retrouve avec une page vide...

Pour la connexion entre Excel et SQL j'utilise:
With
ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN½DCpta;Description½DCpta;UIDª;PWD="
& MdP & ";APP=Microsoft Office
2003;WSID­MINFO;DATABASE½d;LANGUAGE=Français;NetworkÛMSSOCN;Regional=yes",
Destination:=Range("A1"))
.CommandText = Req
.Name = "Liste Dossiers"
.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:úlse
End With

Hum... je sais que mon souci est limite hors sujet sur le newsgroup Excel...
mais là c'est du VBA et du SQL et sur le newsgroup SQL je serais sûrement
également limite...

Merci pour votre aide
--
@+
HD
Avatar
HD
Pour obtenir le code et le texte de ta requête,
tu lances l'enregistreur de macro et tu exécutes manuellement
ta requête utilisant MsQuery. Je ne suis pas certain pour Excel 2007,
mais c'est vrai pour les autres versions d'Excel.


Arfff... c'est vrai que je n'ai pas pris l'habitude d'utiliser MsQuery...
alors que c'est effectivement bien pratique pour constituer rapidement une
requête... en tout cas, ça m'a permi de voir que pour que tout mes champs
apparaissent il faut qu'ils soient tous dans le GROUP BY.... j'ai fait un
copier/coller des champs à afficher que j'ai placé dans le GROUP BY (sauf le
MAX(datFac)) est maintenant tout ressort bien...

Merci à toi MichDenis lol
--
@+
HD
Avatar
HD
J'ai put voir où était le souci... Il faut préciser chaque champs que l'on a
à l'affichage dans le GROUP BY... si il en manque un ça coince...

--
@+
HD