Bonjour,
Je suis sur un projet alliant le VBA dans Excel et Access. Je ne sais pas très bien s'il faut que je commence cette discussion sur le forum Excel ou le forum Access
Contexte:
J'ai un fichier Excel qui est ma base de donnée initiale. A côté, j'ai un fichier Access copie de ma BDD Excel. Je dois créer un programme qui permette de mettre à jour le fichier Access quand le fichier Excel est modifié. Je précise que je suis obligée de partir depuis mon fichier Excel pour mettre à jour le fichier Access (je ne peux PAS faire de mon fichier Access le "masterfile"), ce sont les contraintes du projet qui l'impose.
Mon problème se situe dans le cas où j'ajoute une ligne au fichier Excel.
Voilà ce que j'ai fait :
J'utilise ici un exemple pour illustrer. La table est constituée des champs suivant : id | Nom | Prénom | Age
- Dans Access: j'ai une fonction NewEntry qui ajoute un enregistrement à ma table. Je l'ai testé directement sur Access, ça marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Function newEntry(newId As String, newNom As String, newPrenom As String, newAge As String) Dim db As Database Set db = CurrentDb Dim rs As Recordset Set rs = db.OpenRecordset("Table1") rs.AddNew rs!id = newId rs!nom = newNom rs!prenom = newPrenom rs!age = newAge rs.Update rs.Bookmark = rs.LastModified End Function- Dans Excel: j'ai une procédure qui appelle cette dernière fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Sub test() 'Run function from Access to add entry to Access-table Dim acApp As New Access.Application Set acApp = New Access.Application acApp.OpenCurrentDatabase ("H:\Documents\09. Ink jet\Essai.accdb") acApp.Run "NewEntry", 7, "Hugo", "Victor", 50 acApp.Quit Set acApp = Nothing End Sub
Si vous testez cela, vous verrez que ça marche. Mon problème, alors?
Problème:
Ceci est un exemple, dans le véritable fichier que j'utilise, j'ai exactement le même type d'architecture, seulement ma table compte 58 champs.
Lorsque je fait un teste de la fonction sur Access, pas de problème, ça marche. Cependant, lorsque je veux lancer ma procédure sur Excel, j'obtiens le message d'erreur suivant: Appel de fonction illégal.
Je pensais que ça viendrait peut-être du fait qu'il y a trop d'arguments dans ma fonction (j'ai cru comprendre qu'on ne pouvait avoir que jusqu'à 30 arguments). Du coup, j'ai changé mon code, même procedures mais en prenant comme argument un Array. Cependant, j'ai le même message d'erreur
Question:
Pensez-vous que ça vient, en effet, du nombre d'arguments? Les Array sont-ils aussi limités en nombre d'éléments? Comment puis-je contourner la limite de 30 arguments?
Merci!
Partager