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
	
	| 12
 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