Bonjour,
j'ai un problème que je n'arrive pas à résoudre avec la fonction NTILE en SQL dans Excel-VBA. Comme mon problème est un peu compliqué, j'ai créé un exemple très simple afin de reproduire l'erreur sur laquelle je bute. Si vous arrivez à régler ce problème simplifié, je saurai ensuite l'adapter à mon problème plus compliqué.
J'ai créé la base (pour l'exemple) suivante :
Nom Note
Sophie 5
Florent 17
Marie 19
Marc 10
Arthur 12
Valérie 15
Thomas 18
Aurore 14
David 8
Solène 20
Cette base est stockée dans la plage nommée Base2 du Classeur1.xlsm. Dans le Classeur2.xlsm, j'essaye de récupérer cette base dans un recordSet avec en plus le décile de chaque individu en fonction de sa note. Je souhaite donc utiliser la fonction NTILE. Je ne suis pas sûr de bien comprendre le fonctionnement de cette fonction. J'ai produit le code suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| Sub test()
Dim Connexion As ADODB.Connection
Dim monRecordSet As ADODB.Recordset
Dim tableau() As Variant
Set Connexion = New ADODB.Connection
With Connexion
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& ThisWorkbook.Path + "\Classeur1.xlsm" & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With
Set monRecordSet = Connexion.Execute("SELECT Nom, Note, NTILE(10) OVER(PARTITION BY Nom ORDER BY Note DESC) AS Quartile FROM Base2")
tableau = monRecordSet.GetRows
Debug.Print UBound(tableau(), 1)
Debug.Print UBound(tableau(), 2)
monRecordSet.Requery
Range("A1").CopyFromRecordset monRecordSet
Connexion.Close
Set Connexion = Nothing
End Sub |
Le programme bug sur la ligne en gras. J'ai le message d'erreur suivant :
Erreur d'exécution '-2147217900 (80040e14)':
Erreur de syntaxe (opérateur absent) dans l'expression "NTILE(10) OVER(PARTITION BY Nom ORDER BY Note DESC)"
D'où vient le problème ? La fonction NTILE est elle disponible en SQL dans VBA ou ai-je mal rédigé le code ? Je vous joins les deux fichiers (à mettre dans le même répertoire) pour que vous puissiez faire le test.
Je vous remercie de votre aide.
Partager