OVH Cloud OVH Cloud

Appeler une Function Excel depuis Access

2 réponses
Avatar
gege
Bonjour,

J'aimerais depuis Access ouvrir un fichier Excel, et lancer une
fonction dans laquelle il y a un argument, avec un code tel que :

Dim objExcel As Object
Dim objWorkbook As Object
Dim strParams As String

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("aa.xls")

strParams = "gg"

objExcel.Visible = True
objExcel.Run "importFilteredData(" & ?????????????? & ")"

L'idée étant que je ne sais pas quoi mettre pour remplacer les ??????? et
faire passer la string strParams. Idéalement, j'aimerais même passer un
tableau de strings ..

thx !
Gégé

2 réponses

Avatar
PMO
Bonjour,

Je m'inspire de votre code pour trouver cette piste.

1) J'ai fabriqué la procédure "importFilteredData" dans un classeur Excel
"aa.xls".
Il faudra donc l'y intégrer.

'******************
Sub importFilteredData(var As Variant)
Dim i&
For i& = LBound(var) To UBound(var)
MsgBox var(i&)
Next i&
End Sub
'******************
Elle se contente d'afficher les valeurs d'un tableau. Notez que l'argument
est un variant (qui pourra contenir un tableau)

2) Dans Access intégrez le code suivant issu du votre mais avec des
modifications.
'******************
Sub CallMacroExcel()
Dim objExcel As Object
Dim objWorkbook As Object
Dim myTab() 'Tableau dynamique de variant
Dim i&
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("c:aa.xls")
'---- On charge le tableau avec 10 éléments (par ex) ----
ReDim myTab(1 To 10)
For i& = 1 To 10
myTab(i&) = "Message " & i& & ""
Next i&
'---- On passe la main à Excel ----
objExcel.Visible = True
objExcel.Run "importFilteredData", myTab
'---- Fermeture Excel ----
On Error Resume Next
objWorkbook.Close savechanges:úlse
objExcel.Quit
Set objWorkbook = Nothing
'°°° Gestionnaire des tâches WINDOW °°°
Set objExcel = Nothing 'Ferme le processus Excel
End Sub
'******************
On utilise un tableau de variant "MyTab" plutôt qu'un paramètre String.
Dans le cas où il n'y aurait qu'un seul paramètre à passer redimensionnez
le tableau de 1 à 1 (Redim MyTab(1 To 1)) et changez la limite de la boucle
(For i&= 1 To 1).
Si vous lancez, à partir d'Access, la procédure "CallMacroExcel" vous
devriez obtenir ce que vous recherchiez.
Il n'y a plus qu'à adapter le code Excel et le code Access à votre usage.

Est-ce que cela fonctionne chez vous ?

Cordialement.

PMO
Patrick Morange


Bonjour,

J'aimerais depuis Access ouvrir un fichier Excel, et lancer une
fonction dans laquelle il y a un argument, avec un code tel que :

Dim objExcel As Object
Dim objWorkbook As Object
Dim strParams As String

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("aa.xls")

strParams = "gg"

objExcel.Visible = True
objExcel.Run "importFilteredData(" & ?????????????? & ")"

L'idée étant que je ne sais pas quoi mettre pour remplacer les ??????? et
faire passer la string strParams. Idéalement, j'aimerais même passer un
tableau de strings ..

thx !
Gégé



Avatar
valentin
Bonsoir,
Dans un formulaire Access j'ai 3 zones de texte
qui contiennent respectivement les valeurs ( taux ,
nb de mois et montant ) qui seront passées à une
fonction qui se trouve dans un classeur Excel ; il
s'agit de la fonction FV que j'ai transformé en MeRapporte
avec les paramètres saisis dans Access.

Code ( dans Access ) :

Private Sub cmdExcel_Click()
Dim xlApp As New Excel.Application
Dim xlClass As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim Tx As Single
Dim Ech As Single
Dim Mont As Single
Dim Reponse As Single
Set xlClass = xlApp.Workbooks.Open("c:preparation_coursmercredi.xls")
xlApp.Visible = True
Tx = txtTaux
Ech = txtEcheance
Mont = txtMontant
'Reponse = xlClass.Module1.MeRapporte(Tx, Ech, Mont)
Reponse = xlApp.Run("MeRapporte", Tx, Ech, Mont)
MsgBox Reponse
xlApp.Quit
Set xlApp = Nothing
Set xlClass = Nothing
Set xlSheet = Nothing

End Sub

Attention , dans Access ne pas oublier d'inscrire la librairie
Microsoft Excel Library 9.0 ( ou autre version )


La fonction dans mon classeur Excel est la suivante :

Public Function MeRapporte(Taux As Single, Echeance As Single, Montant As
Single) As Single
MeRapporte = FV(Taux / 1200, Echeance, -Montant)
End Function

Bon courage
Valentin



"gege" a écrit dans le message de
news:
Bonjour,

J'aimerais depuis Access ouvrir un fichier Excel, et lancer une
fonction dans laquelle il y a un argument, avec un code tel que :

Dim objExcel As Object
Dim objWorkbook As Object
Dim strParams As String

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open("aa.xls")

strParams = "gg"

objExcel.Visible = True
objExcel.Run "importFilteredData(" & ?????????????? & ")"

L'idée étant que je ne sais pas quoi mettre pour remplacer les ??????? et
faire passer la string strParams. Idéalement, j'aimerais même passer un
tableau de strings ..

thx !
Gégé