IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Appel d'une procédure dans Access avec plus de 30 arguments [AC-2016]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut Appel d'une procédure dans Access avec plus de 30 arguments
    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!

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    une astuce que j'utilise pour m'affranchir du nombre d'argument en entree (dans une limite raisonnable ) est de concatener l'ensemble de mes valeurs avec un caractere de separation (j'utilise habituellement |)
    et de faire ensuite le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim Temp As Variant
    Temp=Split(monParametreConcatene,"|")
    dans le reste du code.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Habile !
    Je retiens l'astuce !!

    J'ai continué à chercher de mon côté aussi. J'ai remarqué que je n'avais pas enregistré mon fichier Excel sous un format prenant en charge les macros ... et maintenant mon code marche (lorsque j'utilise un Array en argument)
    Je ne sais pas si mon problème venait vraiment de là, puisque j'avais d'autres procédures qui marchaient ... mais maintenant, ça marche, donc je suis contente

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2005] appel d'une procédure dans un trigger
    Par astur2000 dans le forum Développement
    Réponses: 4
    Dernier message: 12/09/2009, 11h18
  2. Appel d'une procédure dans une autre procédure
    Par logo98 dans le forum Langage
    Réponses: 7
    Dernier message: 20/05/2009, 13h50
  3. Appel d'une procédure dans une jsp
    Par yasinfo dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/12/2008, 17h32
  4. Creation d'une table dans ACCESS avec le composant TADOTABLE ?
    Par QAYS dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/10/2008, 17h39
  5. Appel d'une procédure dans une boucle
    Par Microturnip dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/06/2008, 03h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo