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

Il semblerait qu’une petite explication sur ce bloc de code s’impose :
 
  • 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

Prenez quelques secondes pour

nous évaluer !, nous encourager avec un don !, partager ce contenu !
[kkratings]