Piloter efficacement Excel depuis Access
Modèles prêt à l'emploi, Projets Excel-VBA complets
De part ces limites, MS Access nous amène à confier un certain nombre de tâches à Excel. Piloter un fichier Excel depuis Access vous permettra de gagner beaucoup de temps pour les retraitements lourds et les calculs sur données, mais aussi pour l’envoi d’emails personnalisables à l’infini.
Effectivement, imaginez profiter des avantages d’Excel directement depuis Access et sans même en avertir l’utilisateur si vous le voulez.
D'abord, pourquoi piloter Excel depuis Acces ?
C’est donc pour vous amener à réaliser ce type d’automatisation, que nous verrons ici comment piloter efficacement Excel depuis Access.
Cette article s’adresse aux personnes ayant besoin d’externaliser des tâches Access vers Excel pour gagner en efficacité, ou aux personnes préférant utiliser VBA au sein de leur classeur Excel et simplement appeler leurs macros depuis un bouton dans Access par exemple.
Permettre à Access de manipuler Excel
D’abord pour bien commencer, il impératif d’activer au sein d’Access la librairie : Microsoft Excel Object Library. De cette façon, Access pourra manipuler l’objet Excel et vous éviterez les erreurs “Objets requis”.
Avertir les utilisateurs qu'un code utilisant Excel s'exécute
Ensuite pour donner un aspect professionnel à votre code, il est important d’avertir l’utilisateur sur ce qu’il est en train se passer une fois qu’il a cliqué sur le bouton lançant votre code.
Je vous invite donc à reprendre la Méthode 1 de l’article Afficher Temporairement Un Message En VBA pour nous permettre d’avertir l’utilisateur qu’un code utilisant Excel s’exécute sur son poste.
Par ailleurs vous retrouverez dans le code intégral, juste après la déclaration des variables, le code suivant pour afficher notre avertissement, pendant 5 secondes, et ce sans mettre en pause le déroulement de notre code.
CreateObject("WScript.Shell").Run "mshta.exe vbscript:close(CreateObject" _ & "(""WScript.Shell"").Popup(""Une connexion avec Excel est en cours"",5,""Merci de patienter ""))"
Faire trouver à Access le fichier Excel que vous voulez pilotez
A présent nous allons passer à la première vraie partie du code : trouver le fichier Excel que vous souhaitons piloter. Mais pour faire plus efficace nous allons également présenter ici comment régler le problème n°1 qui arrive quand on cherche un fichier Excel : ne rien trouver…
On Error GoTo FichierNonTrouvé 'En cas d'erreur c'est forcément que le fichier en question n'a pas été trouvé 'Définition du Fichier, mettre ici le chemin complet leFichierExcel = "C:\Users\Numamax\Desktop\Exemple.xlsm" Set xExcelApp = CreateObject("Excel.Application") Set leClasseur = xExcelApp.Workbooks.Open(leFichierExcel) 'ouverture du classeur Excel On Error GoTo FermetureUrgence 'A partir d'ici vu qu'on a ouvert un classeur, en cas de problème il faut le fermer et libérer la mémoire 'On mettra ici la suite du code si tout fonctionne bien FermetureUrgence: leClasseur.CLOSE Set xExcelRange = Nothing Set laFeuille = Nothing Set leClasseur = Nothing Set xExcelApp = Nothing MsgBox "Quelques choses s'est mal passé lors de l'exécution du code au sein du fichier Excel", vbCritical, "Erreur lors de l'exécution du code" Exit Sub FichierNonTrouvé: MsgBox "Le fichier Excel en question n'a pas été trouvé à l'emplacement suivant : " & leFichierExcel, vbCritical, "Erreur lors de l'ouvertue du fichier Excel" Exit Sub
- Dans premier temps (juste avant la recherche du fichier Excel) on amène l’utilisateur en cas d’erreur vers “FichierNonTrouvé” afin qu’il comprenne que ce qui n’a pas marché se trouve dans le chemin de son fichier Excel.
- Puis une fois le fichier trouvé par Access et son ouverture en cours, on change la gestion des erreurs en amenant l’utilisateur cette fois vers “FermetureUrgence”.Etant donné qu’à partir de ce point le fichier est ouvert, en cas d’erreur, il faut maintenant le fermer et libérer la mémoire. De plus un message plus complet informe l’utilisateur sur le moment auquel le code à cesser de fonctionner.
Enfin lancer une macro contenu dans le fichier Excel
Pour conclure, après quelques actions de sélection à titre d’exemple, on laisse place au plus important : notre appel à une macro contenu dans le fichier Excel.
Ainsi l’appel xExcelApp.Run “nomdevotremacro” lancera la macro appelé de la même manière dans votre classeur. Vous retrouvez ainsi au sein d’Access, toutes les possibilités d’automatisation Excel.
Une fois que le code contenu dans votre macro s’achève, on revient dans le VBA Access pour sauvegarder, fermer et vider la mémoire utilisée pour notre automatisation.
Set laFeuille = leClasseur.Sheets(1) 'on prend choisit un onglet (ici le premier) laFeuille.Activate 'on le selectionne Set xExcelRange = laFeuille.Range("A1") xExcelRange.Activate 'On selectionne A1 par exemple xExcelApp.Run "codeVBAdansmoduleFeuilleExcel" ' On execute le code VBA suivant 'Fermeture du fichier Excel et liberation de la mémoire leClasseur.Saved = True leClasseur.CLOSE Set xExcelRange = Nothing Set laFeuille = Nothing Set leClasseur = Nothing Set xExcelApp = Nothing MsgBox "La macro contenu dans le fichier Excel s'est exécuter, puis le fichier s'est fermé" Exit Sub ' fin du code pour ne pas aller plus loin, vers la gestion des erreurs...
Bonus : L'intégralité du code pour piloter efficacement Excel depuis votre Access
Sub PiloterEfficacementExcelDepuisAccess() 'Penser à activer la librairie : Microsoft Excel Object Library Dim leFichierExcel As String Dim xExcelApp As excel.Application Dim leClasseur As excel.Workbook Dim laFeuille As excel.Worksheet Dim xExcelRange As excel.Range 'On définit une selection CreateObject("WScript.Shell").Run "mshta.exe vbscript:close(CreateObject" _ & "(""WScript.Shell"").Popup(""Une connexion avec Excel est en cours"",5,""Merci de patienter ""))" On Error GoTo FichierNonTrouvé 'En cas d'erreur c'est forcément que le fichier en question n'a pas été trouvé 'Définition du Fichier, mettre ici le chemin complet leFichierExcel = "C:\Users\Numamax\Desktop\Exemple.xlsm" Set xExcelApp = CreateObject("Excel.Application") Set leClasseur = xExcelApp.Workbooks.Open(leFichierExcel) 'ouverture du classeur Excel On Error GoTo FermetureUrgence 'A partir d'ici vu qu'on a ouvert un classeur, en cas de problème il faut le fermer et libérer la mémoire 'Non Obligatoire Excel Visible = true Set laFeuille = leClasseur.Sheets(1) 'on prend choisit un onglet (ici le premier) laFeuille.Activate 'on le selectionne Set xExcelRange = laFeuille.Range("A1") xExcelRange.Activate 'On séléctionne A1 par exemple xExcelApp.Run "codeVBAdansmoduleFeuilleExcel" ' On exécute le code VBA suivant 'Non Obligatoire Excel Visible = false leClasseur.Saved = True leClasseur.CLOSE Set xExcelRange = Nothing Set laFeuille = Nothing Set leClasseur = Nothing Set xExcelApp = Nothing MsgBox "La macro contenu dans le fichier Excel s'est exécuter, puis le fichier s'est fermé" Exit Sub ' fin du code pour ne pas aller plus loin, vers la gestion des erreurs... FermetureUrgence: leClasseur.CLOSE Set xExcelRange = Nothing Set laFeuille = Nothing Set leClasseur = Nothing Set xExcelApp = Nothing MsgBox "Quelques choses s'est mal passé lors de l'exécution du code au sein du fichier Excel", vbCritical, "Erreur lors de l'exécution du code" Exit Sub FichierNonTrouvé: MsgBox "Le fichier Excel en question n'a pas été trouvé à l'emplacement suivant : " & leFichierExcel, vbCritical, "Erreur lors de l'ouvertue du fichier Excel" Exit Sub End Sub