[ACCESS] Exectuer Macro Excel dans Access

Bonjour,
je dois a partir d'un BDD, extraire a la demande (bouton) des requetes sur fichier excel.
L'extraction ne pose pas de problème.

Mon objectif est que je puisse lancer une Macro excel située dans un SUB d'access sur la feuille excel nouvellement créé.

et la gros problème.
la reprogrammation pour piloter excel depuis access pose probleme notament pour la définition des longueurs... width ne passe pas ...

donc merci pour une solution éventuelle.
j'ai bien essayé de lancer une commande comme : xlApp.Run ("c:\.....\Bureau\BDD.mdb!MacroExcel") mais je suis rejeté car la base est ouverte... et surtout il est pas évident que le code sera interprété sur le format excel.

L'objectif étant de limiter au maximum les dépendances avec d'autre fichiers excel qui contiendrait éventuellement le code pour optimiser le suivi et la viabilité.

Merci.
Configuration: Windows XP
Internet Explorer 6.0

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour

    Au préalable, il faut cocher la référence "Microsoft Excel X.y library" dans outils-références de l'éditeur VB

    à partir d'une sub access

    Dim appliXL As Excel.Application
    Dim classeur As Excel.Workbook

    ' Par exemplr: On veut ouvrir le classeur concerné
    Set appliXL = CreateObject("Excel.Application")
    par exemple:
    Set classeur= xlApp.Workbooks.Open("chemin+nom du classeur concerné")
    ton code
    set classeur=nothing
    appliXL.Quit
    set appliXL=nothing

    nota: certains antivrus trouvent suspect l'instruction "Quit"... Passer outre
    1. merci michel,
      La librairie est cochée par le programme en amont qui vérifie si la librairie est active et a défaut elle l'active.

      voici mon code, il ne pose pas de probleme. il marche mal pour une raison indéterminée.

      Private Sub Extraction_DEI_Projet_Click()
      Call ReferenceActive("Excel")

      'fonction de vérification de l'existence de la bibliotheque excel

      If Not ReferenceActive("Excel") Then ActiverReference "Excel.exe"
      Dim AccApp As Access.Application
      Dim ref As Reference
      Set ref = References!Access
      Dim ref2 As Reference
      Set ref2 = References!Excel
      Dim DayJour As Integer
      Dim MonthJour As Integer
      Dim YearJour As Integer
      Dim heureJour As Integer
      Dim MinuteJour As Integer
      Dim Dateinstant As Date
      Dateinstant = Now()
      HeureJour = Hour(Dateinstant)
      MinuteJour = Minute(Dateinstant)
      DayJour = Day(Dateinstant)
      MonthJour = Month(Dateinstant)

      Dim XlApp As Excel.Application
      Dim XlSheet As Excel.Worksheet
      Dim XlBook As Excel.Workbook
      Set XlApp = CreateObject("Excel.Application")

      XlApp.SheetsInNewWorkbook = 1

      Dim tempo As Integer
      tempo = heureJour & MinuteJour

      DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "Extraction_Projet", "..\DeskTop\Extraction DEI" & DayJour & MonthJour & tempo & ".xls"
      XlApp.Visible = True
      Set XlBook = XlApp.Workbooks.Open("..\DeskTop\Extraction DEI" & DayJour & MonthJour & tempo & ".xls")
      XlBook.Worksheets(1).Visible = True
      XlBook.Worksheets(1).Select

      XlBook.Worksheets(1).Cells.Select
      XlBook.Worksheets(1).Columns.AutoFit
      XlBook.Worksheets(1).Columns("B:B").Select

      With Selection.Font
      .Name = "arial"
      End With

      ' attention cette partie fonctionne de maniere aléatoire. une fois il passe une fois il dit que la selection n'est pas définie...

      Set XlSheet = XlBook.Worksheets(1)

      XlSheet.Columns("B:B").Select
      'Set Selection = XlSheet.Columns(0, 2).Select
      Set test = XlSheet.Columns
      With test.Width = 45
      End With

      XlSheet.Cells(1, 1).Select

      XlSheet.Columns("C:C").Select
      'Set Selection = XlSheet.Columns("C:C").Select
      Selection.ColumnWidth = 50
      With Selection
      .HorizontalAlignment = xlGeneral
      .VerticalAlignment = xlBottom
      .WrapText = True
      .Orientation = 0
      .AddIndent = False
      .IndentLevel = 0
      .ShrinkToFit = False
      .ReadingOrder = xlContext
      .MergeCells = False
      End With
      ' attention cette partie fonctionne de maniere aléatoire. une fois il passe une fois il dit que la selection n'est pas définie...

      End Sub