Remplissage planning Excel via access
Bonjour,
J' ai réussi a remplir mon planning Excel via Access mais le problème est que le temps de remplissage est long.
Auriez vous une solution pour améliorer le code ?
Merci.
Set base = DBEngine.OpenDatabase(chemin_bdd)
enr.MoveFirst
Dim Cel As Range
Dim NumPerso As Integer
Dim DatePerso As Date
Dim Comm As String
For Each Cel In Range("J8:AY9")
NumPerso = Sheets("PLANNING").Cells(Cel.Row, 53).Value
DatePerso = Sheets("PLANNING").Cells(5, Cel.Column).Value
Set enr = base.OpenRecordset("SELECT DISTINCT * FROM Tbl_PERMANENCE WHERE DATE_MOTIF BETWEEN #" & Format(DatePerso, "mm/dd/yyyy") & "# AND #" & Format(DatePerso, "mm/dd/yyyy") & "# ORDER BY DATE_MOTIF ASC", dbOpenDynaset)
If enr.Fields("N°_PERSONNEL").Value = NumPerso Then
Cel.Value = enr.Fields("MOTIF").Value
Comm = enr.Fields("COMMENTAIRE").Value
If Comm <> "" Then
Cel.AddComment
Cel.Comment.Text Text:=Comm
Comm = ""
End If
End If
Next
Set base = Nothing
Set enr = NothingBonjour,
En effet, rien qu'à la lecture du code ça sent le moisi!
En effet, accéder à la base à chaque cellule de la plage indiquée n'est pas pour aller vite.
Pour accélérer ce code voici ce que je ferai :
1/ UNE seule requête vers Access bien sentie pour récupérer l'ensemble des données requise vers un tableau (T1 par exemple)
2/ Placer la plage dans une variable tableau (T2 par exemple)
3/ Et ensuite boucler sur les lignes de T2 en bouclant sur T1 pour compléter ce qu'il faut là où il faut
4/ Optimisation subsidiaire, pour accélérer la requête Sql :
* un GROUP BY est un poil plus rapide que le DISTINCT
* sélectionner uniquement les champs pertinents (plutôt que le SELECT *) ça gagne aussi qq millisecondes
* au final la requête pourrait être du genre :
SELECT `N°_PERSONNEL`,`Motif`,`Commentaire` FROM [Tbl_PERMANENCE]
WHERE condition_machin
GROUP BY `N°_PERSONNEL`,`Motif`,`Commentaire`
Pierre