Bonjour,

tout d'abord merci par avance aux propositions que vous pourrez faire à ce sujet.

Je suis complètement bloqué du à l'erreur Excel suivante :

[Microsoft][Pilote ODBC Excel] La connexion permettant de visualiser votre feuille de calcul Microsoft Excel liée est perdue

pour ce faire j'ai une feuille Excel nommée DATAPLUS

au lancement du traitement VBA, j'ai une connexion ADODB comme montré ci-dessous


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Set g_o_cnx = New ADODB.Connection
 
    'on crée une connection ADODB sur ce document Excel
    With g_o_cnx
        .Provider = "MSDASQL"
        .ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
            "DBQ=" & ThisWorkbook.FullName & ";ReadOnly=False;HDR=NO;IMEX=1;"
 
        .Open
    End With
La connexion semble fonctionné parfaitement. ?g_o_cnx --> result : Provider=MSDASQL.1;

Puis je défini un premier recordset qui m'avait déjà posé bien du soucis :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
Set l_o_rsDATA = New ADODB.Recordset
l_o_SQLrsDATA = "SELECT DATAP.IDENT, DATAP.LADATE, DATAP.LIBELLE, DATAP.QUANTITE, DATAP.REF From [DATAPLUS$] as DATAP"
l_o_rsDATA .ActiveConnection = g_o_cnx
l_o_rsDATA .CursorLocation = adUseClient
l_o_rsDATA .Open l_o_SQLrsDATA , g_o_cnx, adOpenDynamic, adLockOptimistic
l_o_rsDATA .Sort = "LADATEASC"
Cette "Requete" semble bien fonctionnée.

Puis j'appelle ma fonction DonneesDetail avec en param mon recordset
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
For l_i_num = 1 To l_i_nbTotalNum
      DonneesDetail l_i_num , l_o_rsDATA
    ....
Next l_i_num
Dans cette procédure, j'effectue un filtre sur ce recordset puis créé un NOUVEAU recordset comme ceci

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
p_o_rsDATA.Filter = "IDENT= " & NzLng(l_s_num) 'filtre le recorset en param sur l'identifiant en cours
   If Not p_o_rsDATA.EOF Then
       p_o_rsDATA.MoveFirst
       While Not (p_o_rsDATA.EOF)
             .....
             .....
 
             Set l_o_rsref = New ADODB.Recordset 'on définit notre nouveau recordset
 
             'ci dessous la requete qui ne fonctionne pas
             Set l_o_rsref = g_o_cnx.Execute("SELECT count(*) as nb From [DATAPLUS$] as DATAP WHERE DATAP.IDENT = " & MaVal & " AND MONTH(DATAP.LADATE)= 3 AND YEAR(DATAP.LADATE)= 2017 GROUP BY DATAP.REF")
Lorsque j'essaie d’exécuter cette ligne j'obtiens l'erreur citée plus haut.

A savoir que cette requête fonctionne uniquement sans clause where ni group by.

Merci par avance à tous ceux qui tenteront de m'aider.

Cordialement,

Dorian