Bonjour,
voici mon projet : j'ai d'un coté une base Access. J'ai de l'autre coté des fichiers excel. Dans ces fichiers excel, je fais remplir des prévisions aux commerciaux, quand ils sauvent leurs prévisions, ça génère une version hebdomadaire des prévisions dans la bases Access. Je reviens chercher dans excel en fin de procédure le total prévu, l'heure de remontée que je stocke dans le fichier excel (c'est là où j'ai un bug)
En DAO, je n'avais pas de problème. Avec Excel 365 dont certains postes sont en 64 bits, je peux oublier le DAO.
donc Je travaille depuis pas mal de temps pour passer de DAO à ADO.
Je rencontre des difficultés nouvelles. Par exemple, je fais un select simple depuis excel dans ma base pour écrire dans le fichier excel :
Le symptôme : je n'ai aucun recordset retourné dans excel 2007 ...sauf si je mets un point d'arrêt et que je passe en mode pas à pas. D'ailleurs, si je prends le sql généré et que je le teste dans Access, j'ai au moins un enregistrement.
En version 2013 sur mon poste (qui n'est pas sur le Terminal serveur contrairement à Excel 2007), je n'ai aucun problème.
Peut-être un peu trop vite mais j'ai évacué le problème de SQL puisque dans certaines conditions cela fonctionne.
J'ai plus douté de la manière dont je me connecte, des références ADO, de la manière dont je crée le recordset.
Avez-vous une idée de ce qui se passe ?
Merci par avance.
poulpor
voici mon projet : j'ai d'un coté une base Access. J'ai de l'autre coté des fichiers excel. Dans ces fichiers excel, je fais remplir des prévisions aux commerciaux, quand ils sauvent leurs prévisions, ça génère une version hebdomadaire des prévisions dans la bases Access. Je reviens chercher dans excel en fin de procédure le total prévu, l'heure de remontée que je stocke dans le fichier excel (c'est là où j'ai un bug)
En DAO, je n'avais pas de problème. Avec Excel 365 dont certains postes sont en 64 bits, je peux oublier le DAO.
donc Je travaille depuis pas mal de temps pour passer de DAO à ADO.
Je rencontre des difficultés nouvelles. Par exemple, je fais un select simple depuis excel dans ma base pour écrire dans le fichier excel :
Code:
Function MyUpdatingManagement(MYSELLERID)
Dim Mysql As String 'chaine sql
Dim fso As Object 'objet Local
Dim Response As Variant ' boite de dialogue
Dim ToProtectUPDT As Boolean ' Fichier à protéger en fin de code ?
INTERNAL.MyPath
...
ActiveWorkbook.Sheets("UPDATING REPORT").Select
Dim BaseSource As ADODB.Connection
Set BaseSource = New ADODB.Connection
BaseSource.Mode = adModeReadWrite
Dim strConn As String
If BaseSource.State = adStateClosed Then
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Mdbsource & ";Persist Security Info=False;"
BaseSource.ConnectionString = strConn
BaseSource.Open
End If
Mysql = "SELECT T_FORECASTS.FCST_IDRELEASE, T_FORECASTS.FCST_IDSELLER, T_FORECASTS.FCST_DATE, Sum([UNWEIGHTED]*[EXPECTANCY]) AS SumWeighted, Sum(T_FCSTDATA.UNWEIGHTED) AS SumUNWEIGHTED"
Mysql = Mysql & " " & "FROM T_FORECASTS INNER JOIN T_FCSTDATA ON T_FORECASTS.ID_FORECASTS = T_FCSTDATA.FCST_IDFORECASTS"
Mysql = Mysql & " " & "GROUP BY T_FORECASTS.FCST_IDRELEASE, T_FORECASTS.FCST_IDSELLER, T_FORECASTS.FCST_DATE"
Mysql = Mysql & " " & "HAVING T_FORECASTS.FCST_IDSELLER=" & MYSELLERID & " ORDER BY T_FORECASTS.FCST_IDRELEASE;"
'Debug.Print Mysql
'Stop
Dim MySelection2 As ADODB.Recordset
Set MySelection2 = New ADODB.Recordset
MySelection2.Open Mysql, BaseSource, adOpenDynamic, adLockOptimistic
If MySelection2.RecordCount <> 0 Then
While Not MySelection2.EOF
Sheets("UPDATING REPORT").Cells(MySelection2("FCST_IDRELEASE") - 126, 5).Value = MySelection2("FCST_DATE")
Sheets("UPDATING REPORT").Cells(MySelection2("FCST_IDRELEASE") - 126, 6).Value = MySelection2("SumUNWEIGHTED")
Sheets("UPDATING REPORT").Cells(MySelection2("FCST_IDRELEASE") - 126, 7).Value = MySelection2("SumWeighted")
MySelection2.MoveNext
Wend
MySelection2.Close
Set MySelection2 = Nothing
End If
If ToProtectUPDT = True Then Sheets("UPDATING REPORT").Protect (MyPassword)
Application.Calculation = xlCalculationAutomatic
End Function
Le symptôme : je n'ai aucun recordset retourné dans excel 2007 ...sauf si je mets un point d'arrêt et que je passe en mode pas à pas. D'ailleurs, si je prends le sql généré et que je le teste dans Access, j'ai au moins un enregistrement.
En version 2013 sur mon poste (qui n'est pas sur le Terminal serveur contrairement à Excel 2007), je n'ai aucun problème.
Peut-être un peu trop vite mais j'ai évacué le problème de SQL puisque dans certaines conditions cela fonctionne.
J'ai plus douté de la manière dont je me connecte, des références ADO, de la manière dont je crée le recordset.
Avez-vous une idée de ce qui se passe ?
Merci par avance.
poulpor