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

Excel & Access.

3 réponses
Avatar
David
Bonjour.

J'ai une requete SQL qui refuse de passer .

Pourtant la meme sous access en directe passe correctement !!

Voici ma Bilan_Commande.
SELECT Commandes.id_cmd, Sum(IIf([Bilan_Acompte].[emis] Is
Null,0,[Bilan_Acompte].[emis])) AS Emis, Sum(Bilan_Acompte.Paye) AS Paye,
Sum(IIf([Bilan_Acompte].[Reste] Is Null,0,[Bilan_Acompte].[Reste])) AS
ResteaPayer, [Commandes].[MontantTTC] - [Emis] AS ResteAppeler,
resteAppeler+resteapayer AS TotalDu, IIf(([Commandes].[Facture] Is Not Null)
And totalDu<=0,0,1) AS Complet
FROM Commandes LEFT JOIN Bilan_Acompte ON Commandes.id_cmd =
Bilan_Acompte.id_Cmd
GROUP BY Commandes.id_cmd, Commandes.MontantTTC, Commandes.Facture;


Si sous access je cree une requete simple :
Select * from Bilan_Commande

J'obtient bien toutes les lignes.

Si je fais la meme chose sous excel j'ai une erreur:
Erreur d'execution -2147217887(80040e21)
Vous avez essayé d'executer une requete ne comprenant pas l'expression
specifiée 'Commande.MontantTTC - [Emis]' comme une partie de l'agregat.


Si je rajoute Commande.MontantTTC - [Emis] a la fin du group by, mes lignes
ne sont plus groupées et le status est donc Faux.

Voici le code excel qui pour moi me semble similaire a ma requete de test
sous access!

Set rs = .GetRecordset("SELECT * from Bilan_Commande;")

J'utilise ADODB.Recordset.


Merci de votre aide !

David.

3 réponses

Avatar
Denis Michon
Bonjour David,

Voici un exemple comment faire pour utiliser ADO pour importer des données de l'application Access vers une feuille
excel.

Pour ce qui est de la syntaxe de la requête, Le copier-coller de la fenêtre de requête direct Sql dans excel n'est pas
toujours évident. Et à moins d'avoir la base de données à porter de main, il n'est pas difficile de corriger la
syntaxe...


Voici l'exemple :


Seulement ces 3 lignes de code de la procédure ont besoin d'être défini selon les paramètres de ton application.

CheminDb = "C:Mes documentsComptoir.mdb"
NomTable = "Employés"
Requete = "Select * From " & NomTable & ""

ESSENTIEL: AJOUT DE LA BIBLIOTHÈQUE :
'Microsoft activex data objects 2.0 librairy

'------------------------------------------
Sub ImporterDesDonnéesDeAccess()

'Si ta table dans Access contient un champ "OleObject"
'Il faut l'exclure de la requête...sinon ça va planter !!!

'Attention, si access possède un champ mémo
'Limitation à 1823 caractères le nombre de
'caractère importé dans Excel

'Les champs "date" de la table access vont apparaître
'dans excel sous leur forme numérique avec la méthode
'CopyFromRecordSet version 2000 et 2002. Au besoin
'prévoir quelques lignes de code pour formatage

Dim X As Integer, C As Integer
Dim Cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Rg As Range, Sh As Worksheet
Dim NbEnr As Long, CheminDb As String
Dim NomTable As String, NomFeuille As String
Dim Tblo As Variant, Requete As String

CheminDb = "C:Mes documentsComptoir.mdb"
NomTable = "Employés"
Requete = "Select * From " & NomTable & ""

'La chaîne de connexion à une base de donnée Access
Cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & CheminDb & ";"

'Ouverture du recordset
Rst.Open Requete, Cnt, adOpenStatic

'Si aucun enregistrement est trouvé lors de la requête
If Rst.RecordCount = 0 Then
MsgBox "Aucun enregistrement trouvé." & vbCrLf & _
"Fin de l'opération.", vbInformation + vbOKOnly, "Annulation"
' Ferme la connection et le recordset
Rst.Close: Cnt.Close
'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set sh = Nothing
Exit sub
End If

'Éviter le rafraîchissement de l'écran
Application.ScreenUpdating = False

'Conserve dans une variable le nom de la feuille active.
NomFeuille = ThisWorkbook.ActiveSheet.Name

'Ajoute une nouvelle feuille où seront acheminées les données
Set Sh = Worksheets.Add

'détermine la cellule supérieur gauche où
'le recordset va être copié
With Sh
Set Rg = .Range("A1")
End With

'Si tu es intéressé de récupérer directement les noms
'des champs de ton recordset, tu peux utiliser ce
'qui suit :

Do
Rg.Offset(, C) = Rst.Fields(C).Name
C = C + 1
X = X + 1
Loop Until X = Rst.Fields.Count

'Section copiant le recordset dans excel

'La procédur va pouvoir choisir selon la version
'd'excel d'installer laquelle des méthodes choisir.

'Un test sur la version excel en cours ...
If Val(Mid(Application.Version, 1, InStr(1, _
Application.Version, ".") - 1)) > 8 Then
'EXCEL 2000 or 2002: La méthode CopyFromRecordset
Rg.Offset(1).CopyFromRecordset Rst
Else
'EXCEL 97 ou antérieur: Méthode GetRows

' GetRows transforme le recordset en tableau de base 0
Tblo = Rst.GetRows
'Première dimension tableau = Champ du recordset
'Deuxièm dimension Tableau = Données du recordset

'Détermine le nombre d'enregistrements
'Le +1 c'est pour tenir compte du tableau qui est de
'base 0 ... première cellule dans excel est cells(1,1)
NbEnr = UBound(Tblo, 2) + 1

'Transpose le tableau(tblo) pour que la première dimension
'devienne les données et que sa présentation soit
'conforme lorsqu'il sera copié dans Excel
Rg.Offset(1).Resize(NbEnr, Rst.Fields.Count).Value = TransposeSpecial(Tblo)
End If

'Redimensionnement des cellules.
Rg.CurrentRegion.Columns.AutoFit
Rg.CurrentRegion.Rows.AutoFit

'Sélection de la feuille au départ de la procédure
Worksheets(NomFeuille).Select

' Ferme la connection et le recordset
Rst.Close: Cnt.Close

'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set sh = Nothing
End Sub
'------------------------------------------

'Fonction requise par la procédure pour les
'versions antérieures à excel 200

'------------------------------------------
Function TransposeSpecial(ByRef Arr As Variant) As Variant
Dim A As Integer, B As Integer, Arr1() As Variant
Dim C As Integer, D As Integer
A = UBound(Arr, 1): B = UBound(Arr, 2)
ReDim Arr1(B, A)
For C = 0 To A
For D = 0 To B
Arr1(D, C) = Arr(C, D)
Next
Next
TransposeSpecial = (Arr1)
End Function
'------------------------------------------


Salutations!







"David" a écrit dans le message de news:boohs1$5s4$
Bonjour.

J'ai une requete SQL qui refuse de passer .

Pourtant la meme sous access en directe passe correctement !!

Voici ma Bilan_Commande.
SELECT Commandes.id_cmd, Sum(IIf([Bilan_Acompte].[emis] Is
Null,0,[Bilan_Acompte].[emis])) AS Emis, Sum(Bilan_Acompte.Paye) AS Paye,
Sum(IIf([Bilan_Acompte].[Reste] Is Null,0,[Bilan_Acompte].[Reste])) AS
ResteaPayer, [Commandes].[MontantTTC] - [Emis] AS ResteAppeler,
resteAppeler+resteapayer AS TotalDu, IIf(([Commandes].[Facture] Is Not Null)
And totalDu<=0,0,1) AS Complet
FROM Commandes LEFT JOIN Bilan_Acompte ON Commandes.id_cmd Bilan_Acompte.id_Cmd
GROUP BY Commandes.id_cmd, Commandes.MontantTTC, Commandes.Facture;


Si sous access je cree une requete simple :
Select * from Bilan_Commande

J'obtient bien toutes les lignes.

Si je fais la meme chose sous excel j'ai une erreur:
Erreur d'execution -2147217887(80040e21)
Vous avez essayé d'executer une requete ne comprenant pas l'expression
specifiée 'Commande.MontantTTC - [Emis]' comme une partie de l'agregat.


Si je rajoute Commande.MontantTTC - [Emis] a la fin du group by, mes lignes
ne sont plus groupées et le status est donc Faux.

Voici le code excel qui pour moi me semble similaire a ma requete de test
sous access!

Set rs = .GetRecordset("SELECT * from Bilan_Commande;")

J'utilise ADODB.Recordset.


Merci de votre aide !

David.
Avatar
David
Merci.

C'est grosso modo ce que j'ai comme code.
Sauf que c'est une CLASS.
Cela fonctionne pour plein de requete dans mon application.
Y a que celle la qui pose probleme.

Je viens meme d'essayer un truc.
Creer dans access une requete BILAN_COMMANDE2.
Celle ci ne contient que SELECT * FROM Bilan_Commande.

Et je fais pointer excel sur BILAN_COMMANDE2.
Resultat ? La meme chose: erreur d'agregat !!!!!!!!!

Alors que si je double clique sur ma requete dans access tout se passe a
merveille.

Si dessous la class au cas ou.
Pour la base, y a pas de pb pour l'envoyer en Email.
Zipper ca doit passer.

Public Function GetRecordset(ByVal SQLQuery As String) As ADODB.Recordset
'Returns a disconnected recordset with the SQLQuery parameter
Dim oRs As ADODB.Recordset
On Error GoTo ErrHandler
Set oRs = New ADODB.Recordset

'Set recordset connection and optimize it
With oRs
.ActiveConnection = oConn
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.CursorLocation = adUseClient
.Source = SQLQuery

.Open 'Open the recordset
End With
'Disconnect the recordset
Set oRs.ActiveConnection = Nothing
'Return the recordset
Set GetRecordset = oRs

Garbage:
'Release our stuff
Set oRs = Nothing
Exit Function
ErrHandler:
'Handle errors. Could be replaced with a more sophisticated thing
Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile,
Err.HelpContext
Set GetRecordset = Nothing
Resume Garbage
End Function

Merci de votre aide.

David.


"Denis Michon" a écrit dans le message de news:
HlRrb.27817$
Bonjour David,

Voici un exemple comment faire pour utiliser ADO pour importer des données
de l'application Access vers une feuille

excel.

Pour ce qui est de la syntaxe de la requête, Le copier-coller de la
fenêtre de requête direct Sql dans excel n'est pas

toujours évident. Et à moins d'avoir la base de données à porter de main,
il n'est pas difficile de corriger la

syntaxe...


Voici l'exemple :


Seulement ces 3 lignes de code de la procédure ont besoin d'être défini
selon les paramètres de ton application.


CheminDb = "C:Mes documentsComptoir.mdb"
NomTable = "Employés"
Requete = "Select * From " & NomTable & ""

ESSENTIEL: AJOUT DE LA BIBLIOTHÈQUE :
'Microsoft activex data objects 2.0 librairy

'------------------------------------------
Sub ImporterDesDonnéesDeAccess()

'Si ta table dans Access contient un champ "OleObject"
'Il faut l'exclure de la requête...sinon ça va planter !!!

'Attention, si access possède un champ mémo
'Limitation à 1823 caractères le nombre de
'caractère importé dans Excel

'Les champs "date" de la table access vont apparaître
'dans excel sous leur forme numérique avec la méthode
'CopyFromRecordSet version 2000 et 2002. Au besoin
'prévoir quelques lignes de code pour formatage

Dim X As Integer, C As Integer
Dim Cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Rg As Range, Sh As Worksheet
Dim NbEnr As Long, CheminDb As String
Dim NomTable As String, NomFeuille As String
Dim Tblo As Variant, Requete As String

CheminDb = "C:Mes documentsComptoir.mdb"
NomTable = "Employés"
Requete = "Select * From " & NomTable & ""

'La chaîne de connexion à une base de donnée Access
Cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & CheminDb & ";"

'Ouverture du recordset
Rst.Open Requete, Cnt, adOpenStatic

'Si aucun enregistrement est trouvé lors de la requête
If Rst.RecordCount = 0 Then
MsgBox "Aucun enregistrement trouvé." & vbCrLf & _
"Fin de l'opération.", vbInformation + vbOKOnly, "Annulation"
' Ferme la connection et le recordset
Rst.Close: Cnt.Close
'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set sh = Nothing
Exit sub
End If

'Éviter le rafraîchissement de l'écran
Application.ScreenUpdating = False

'Conserve dans une variable le nom de la feuille active.
NomFeuille = ThisWorkbook.ActiveSheet.Name

'Ajoute une nouvelle feuille où seront acheminées les données
Set Sh = Worksheets.Add

'détermine la cellule supérieur gauche où
'le recordset va être copié
With Sh
Set Rg = .Range("A1")
End With

'Si tu es intéressé de récupérer directement les noms
'des champs de ton recordset, tu peux utiliser ce
'qui suit :

Do
Rg.Offset(, C) = Rst.Fields(C).Name
C = C + 1
X = X + 1
Loop Until X = Rst.Fields.Count

'Section copiant le recordset dans excel

'La procédur va pouvoir choisir selon la version
'd'excel d'installer laquelle des méthodes choisir.

'Un test sur la version excel en cours ...
If Val(Mid(Application.Version, 1, InStr(1, _
Application.Version, ".") - 1)) > 8 Then
'EXCEL 2000 or 2002: La méthode CopyFromRecordset
Rg.Offset(1).CopyFromRecordset Rst
Else
'EXCEL 97 ou antérieur: Méthode GetRows

' GetRows transforme le recordset en tableau de base 0
Tblo = Rst.GetRows
'Première dimension tableau = Champ du recordset
'Deuxièm dimension Tableau = Données du recordset

'Détermine le nombre d'enregistrements
'Le +1 c'est pour tenir compte du tableau qui est de
'base 0 ... première cellule dans excel est cells(1,1)
NbEnr = UBound(Tblo, 2) + 1

'Transpose le tableau(tblo) pour que la première dimension
'devienne les données et que sa présentation soit
'conforme lorsqu'il sera copié dans Excel
Rg.Offset(1).Resize(NbEnr, Rst.Fields.Count).Value TransposeSpecial(Tblo)
End If

'Redimensionnement des cellules.
Rg.CurrentRegion.Columns.AutoFit
Rg.CurrentRegion.Rows.AutoFit

'Sélection de la feuille au départ de la procédure
Worksheets(NomFeuille).Select

' Ferme la connection et le recordset
Rst.Close: Cnt.Close

'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set sh = Nothing
End Sub
'------------------------------------------

'Fonction requise par la procédure pour les
'versions antérieures à excel 200

'------------------------------------------
Function TransposeSpecial(ByRef Arr As Variant) As Variant
Dim A As Integer, B As Integer, Arr1() As Variant
Dim C As Integer, D As Integer
A = UBound(Arr, 1): B = UBound(Arr, 2)
ReDim Arr1(B, A)
For C = 0 To A
For D = 0 To B
Arr1(D, C) = Arr(C, D)
Next
Next
TransposeSpecial = (Arr1)
End Function
'------------------------------------------


Salutations!







"David" a écrit dans le message de
news:boohs1$5s4$

Bonjour.

J'ai une requete SQL qui refuse de passer .

Pourtant la meme sous access en directe passe correctement !!

Voici ma Bilan_Commande.
SELECT Commandes.id_cmd, Sum(IIf([Bilan_Acompte].[emis] Is
Null,0,[Bilan_Acompte].[emis])) AS Emis, Sum(Bilan_Acompte.Paye) AS Paye,
Sum(IIf([Bilan_Acompte].[Reste] Is Null,0,[Bilan_Acompte].[Reste])) AS
ResteaPayer, [Commandes].[MontantTTC] - [Emis] AS ResteAppeler,
resteAppeler+resteapayer AS TotalDu, IIf(([Commandes].[Facture] Is Not
Null)

And totalDu<=0,0,1) AS Complet
FROM Commandes LEFT JOIN Bilan_Acompte ON Commandes.id_cmd > Bilan_Acompte.id_Cmd
GROUP BY Commandes.id_cmd, Commandes.MontantTTC, Commandes.Facture;


Si sous access je cree une requete simple :
Select * from Bilan_Commande

J'obtient bien toutes les lignes.

Si je fais la meme chose sous excel j'ai une erreur:
Erreur d'execution -2147217887(80040e21)
Vous avez essayé d'executer une requete ne comprenant pas l'expression
specifiée 'Commande.MontantTTC - [Emis]' comme une partie de l'agregat.


Si je rajoute Commande.MontantTTC - [Emis] a la fin du group by, mes
lignes

ne sont plus groupées et le status est donc Faux.

Voici le code excel qui pour moi me semble similaire a ma requete de test
sous access!

Set rs = .GetRecordset("SELECT * from Bilan_Commande;")

J'utilise ADODB.Recordset.


Merci de votre aide !

David.









Avatar
David
C'est bon j'ai trouvé.

En fait , c'est access qui a tort de ne pas generer des erreurs!!!

J'ai reconstruit une autre requete et cela va beaucoup mieux.

A°+

"David" a écrit dans le message de news:
bootl5$ahm$
Merci.

C'est grosso modo ce que j'ai comme code.
Sauf que c'est une CLASS.
Cela fonctionne pour plein de requete dans mon application.
Y a que celle la qui pose probleme.

Je viens meme d'essayer un truc.
Creer dans access une requete BILAN_COMMANDE2.
Celle ci ne contient que SELECT * FROM Bilan_Commande.

Et je fais pointer excel sur BILAN_COMMANDE2.
Resultat ? La meme chose: erreur d'agregat !!!!!!!!!

Alors que si je double clique sur ma requete dans access tout se passe a
merveille.

Si dessous la class au cas ou.
Pour la base, y a pas de pb pour l'envoyer en Email.
Zipper ca doit passer.

Public Function GetRecordset(ByVal SQLQuery As String) As ADODB.Recordset
'Returns a disconnected recordset with the SQLQuery parameter
Dim oRs As ADODB.Recordset
On Error GoTo ErrHandler
Set oRs = New ADODB.Recordset

'Set recordset connection and optimize it
With oRs
.ActiveConnection = oConn
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.CursorLocation = adUseClient
.Source = SQLQuery

.Open 'Open the recordset
End With
'Disconnect the recordset
Set oRs.ActiveConnection = Nothing
'Return the recordset
Set GetRecordset = oRs

Garbage:
'Release our stuff
Set oRs = Nothing
Exit Function
ErrHandler:
'Handle errors. Could be replaced with a more sophisticated thing
Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile,
Err.HelpContext
Set GetRecordset = Nothing
Resume Garbage
End Function

Merci de votre aide.

David.


"Denis Michon" a écrit dans le message de news:
HlRrb.27817$
Bonjour David,

Voici un exemple comment faire pour utiliser ADO pour importer des
données


de l'application Access vers une feuille
excel.

Pour ce qui est de la syntaxe de la requête, Le copier-coller de la
fenêtre de requête direct Sql dans excel n'est pas

toujours évident. Et à moins d'avoir la base de données à porter de
main,


il n'est pas difficile de corriger la
syntaxe...


Voici l'exemple :


Seulement ces 3 lignes de code de la procédure ont besoin d'être défini
selon les paramètres de ton application.


CheminDb = "C:Mes documentsComptoir.mdb"
NomTable = "Employés"
Requete = "Select * From " & NomTable & ""

ESSENTIEL: AJOUT DE LA BIBLIOTHÈQUE :
'Microsoft activex data objects 2.0 librairy

'------------------------------------------
Sub ImporterDesDonnéesDeAccess()

'Si ta table dans Access contient un champ "OleObject"
'Il faut l'exclure de la requête...sinon ça va planter !!!

'Attention, si access possède un champ mémo
'Limitation à 1823 caractères le nombre de
'caractère importé dans Excel

'Les champs "date" de la table access vont apparaître
'dans excel sous leur forme numérique avec la méthode
'CopyFromRecordSet version 2000 et 2002. Au besoin
'prévoir quelques lignes de code pour formatage

Dim X As Integer, C As Integer
Dim Cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim Rg As Range, Sh As Worksheet
Dim NbEnr As Long, CheminDb As String
Dim NomTable As String, NomFeuille As String
Dim Tblo As Variant, Requete As String

CheminDb = "C:Mes documentsComptoir.mdb"
NomTable = "Employés"
Requete = "Select * From " & NomTable & ""

'La chaîne de connexion à une base de donnée Access
Cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & CheminDb & ";"

'Ouverture du recordset
Rst.Open Requete, Cnt, adOpenStatic

'Si aucun enregistrement est trouvé lors de la requête
If Rst.RecordCount = 0 Then
MsgBox "Aucun enregistrement trouvé." & vbCrLf & _
"Fin de l'opération.", vbInformation + vbOKOnly, "Annulation"
' Ferme la connection et le recordset
Rst.Close: Cnt.Close
'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set sh = Nothing
Exit sub
End If

'Éviter le rafraîchissement de l'écran
Application.ScreenUpdating = False

'Conserve dans une variable le nom de la feuille active.
NomFeuille = ThisWorkbook.ActiveSheet.Name

'Ajoute une nouvelle feuille où seront acheminées les données
Set Sh = Worksheets.Add

'détermine la cellule supérieur gauche où
'le recordset va être copié
With Sh
Set Rg = .Range("A1")
End With

'Si tu es intéressé de récupérer directement les noms
'des champs de ton recordset, tu peux utiliser ce
'qui suit :

Do
Rg.Offset(, C) = Rst.Fields(C).Name
C = C + 1
X = X + 1
Loop Until X = Rst.Fields.Count

'Section copiant le recordset dans excel

'La procédur va pouvoir choisir selon la version
'd'excel d'installer laquelle des méthodes choisir.

'Un test sur la version excel en cours ...
If Val(Mid(Application.Version, 1, InStr(1, _
Application.Version, ".") - 1)) > 8 Then
'EXCEL 2000 or 2002: La méthode CopyFromRecordset
Rg.Offset(1).CopyFromRecordset Rst
Else
'EXCEL 97 ou antérieur: Méthode GetRows

' GetRows transforme le recordset en tableau de base 0
Tblo = Rst.GetRows
'Première dimension tableau = Champ du recordset
'Deuxièm dimension Tableau = Données du recordset

'Détermine le nombre d'enregistrements
'Le +1 c'est pour tenir compte du tableau qui est de
'base 0 ... première cellule dans excel est cells(1,1)
NbEnr = UBound(Tblo, 2) + 1

'Transpose le tableau(tblo) pour que la première dimension
'devienne les données et que sa présentation soit
'conforme lorsqu'il sera copié dans Excel
Rg.Offset(1).Resize(NbEnr, Rst.Fields.Count).Value > TransposeSpecial(Tblo)
End If

'Redimensionnement des cellules.
Rg.CurrentRegion.Columns.AutoFit
Rg.CurrentRegion.Rows.AutoFit

'Sélection de la feuille au départ de la procédure
Worksheets(NomFeuille).Select

' Ferme la connection et le recordset
Rst.Close: Cnt.Close

'Libère la mémoire vive occupée par les objets
Set Rst = Nothing: Set Cnt = Nothing
Set Rg = Nothing: Set sh = Nothing
End Sub
'------------------------------------------

'Fonction requise par la procédure pour les
'versions antérieures à excel 200

'------------------------------------------
Function TransposeSpecial(ByRef Arr As Variant) As Variant
Dim A As Integer, B As Integer, Arr1() As Variant
Dim C As Integer, D As Integer
A = UBound(Arr, 1): B = UBound(Arr, 2)
ReDim Arr1(B, A)
For C = 0 To A
For D = 0 To B
Arr1(D, C) = Arr(C, D)
Next
Next
TransposeSpecial = (Arr1)
End Function
'------------------------------------------


Salutations!







"David" a écrit dans le message de
news:boohs1$5s4$

Bonjour.

J'ai une requete SQL qui refuse de passer .

Pourtant la meme sous access en directe passe correctement !!

Voici ma Bilan_Commande.
SELECT Commandes.id_cmd, Sum(IIf([Bilan_Acompte].[emis] Is
Null,0,[Bilan_Acompte].[emis])) AS Emis, Sum(Bilan_Acompte.Paye) AS
Paye,


Sum(IIf([Bilan_Acompte].[Reste] Is Null,0,[Bilan_Acompte].[Reste])) AS
ResteaPayer, [Commandes].[MontantTTC] - [Emis] AS ResteAppeler,
resteAppeler+resteapayer AS TotalDu, IIf(([Commandes].[Facture] Is Not
Null)

And totalDu<=0,0,1) AS Complet
FROM Commandes LEFT JOIN Bilan_Acompte ON Commandes.id_cmd > > Bilan_Acompte.id_Cmd
GROUP BY Commandes.id_cmd, Commandes.MontantTTC, Commandes.Facture;


Si sous access je cree une requete simple :
Select * from Bilan_Commande

J'obtient bien toutes les lignes.

Si je fais la meme chose sous excel j'ai une erreur:
Erreur d'execution -2147217887(80040e21)
Vous avez essayé d'executer une requete ne comprenant pas l'expression
specifiée 'Commande.MontantTTC - [Emis]' comme une partie de l'agregat.


Si je rajoute Commande.MontantTTC - [Emis] a la fin du group by, mes
lignes

ne sont plus groupées et le status est donc Faux.

Voici le code excel qui pour moi me semble similaire a ma requete de
test


sous access!

Set rs = .GetRecordset("SELECT * from Bilan_Commande;")

J'utilise ADODB.Recordset.


Merci de votre aide !

David.