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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.