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 :

[VBA][débutant]passage de paramètre à une fonction d'un module


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 183
    Par défaut [VBA][débutant]passage de paramètre à une fonction d'un module
    Bonjour,


    est-il possible de mettre en paramètre une variable à une fonction se trouvant dans un module.
    j'ai essayé et à l'événement clique
    de mon bouton ça m'affiche une erreur.

    J'ai essayé de mettre la variable en global mais rien ne marche.
    Avez-vous une astuce?

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Salut

    est-il possible de mettre en paramètre une variable à une fonction se trouvant dans un module
    Oui.

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 183
    Par défaut
    Je reformule ma question

    j'ai créé un bouton qppelant une fonction à chaque clique
    ce qui donne:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub createBut(entDonnéeX, entDonnéeY, name, typebut)
    Dim o As Integer
     
        Set ctlBut = CreateControl("frm_tableau", acCommandButton)
        ctlBut.name = name
     
        ctlBut.Width = 1500
        ctlBut.Height = 300
        ctlBut.Top = entDonnéeX
        'ctlBut.Left = 5000
        ctlBut.Left = entDonnéeY
        ctlBut.Caption = typebut
        ctlBut.FontBold = True
     
     
     
     
        If typebut = "VALIDER" Then
             'boutton d'enregistrement sur click
               ctlBut.OnClick = "=enregistrerDatas(nb)"
       Else
     
            'bouton de retour sur click
                ctlBut.OnClick = "=BackForm()"
       End If
     
     
    End Sub

    et la fonction
    enregistrerDatas()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Public Function enregistrerDatas(nb As Integer)
     
           'parcourir les textbox et les enregistrer
           MsgBox nb
     
     
     
        End Function
    lorsque j'entre en dur une valeur, la fonction se passe correctement.
    Par contre lorsque je mets comme paramètre la variable integer "nb" (qui a été déclarée au préalable en global) ça me met en erreur:

    l'expression sur clic d'entrée comme paramètre d ela propriété type événement est à l'origine de l'erreur.L'objet ne contient pas dobjet d'automatisation de l'objet nb

    Je n'arriv pa à résoudre ce pb

    Merci d'avance

  4. #4
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Et quel est le lien entre les 2 fonctions ??
    Ni l'une ni l'autre ne fait appel à l'autre...
    Donc forcément : rien ne se passe sauf une erreur.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 183
    Par défaut
    merci pour ta réponse et ta rapidité kikof!

    Je n'arrive pas à voir ce que je devrais fair pr solutionner le problème.
    Par ailleurs, comment se fait-il qu'en mettant en dur une valeur
    ctlBut.OnClick = "=enregistrerDatas(13)" par exemple
    cela m'affiche correctement le chiffre 13 alrs qu'en passant par une variable nb=2 ça m'affiche une erreur?

    Merci

  6. #6
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ctlBut.OnClick = "=enregistrerDatas(13)"
    Voilà ce qui manquait dans ton code ci-dessus

    Explications :
    Avec la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ctlBut.OnClick = "=enregistrerDatas(13)"
    Tu passes en paramètre 13. Ce qui est juste.
    13 sera affecté à la variable nb de la fonction enregistrerDatas et sera utilisée à l'intérieur de celle-ci (dans ton exemple avec la msgbox)

    D'après ce que je comprends :
    alrs qu'en passant par une variable nb=2 ça m'affiche une erreur
    Tu effectues ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ctlBut.OnClick = "=enregistrerDatas(nb=2)"
    Tu ne peux pas faire une affectation ici.
    Voici les exemples de ce que tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim maVariable As Integer
    maVariable = 15
    ctlBut.OnClick = "=enregistrerDatas(maVariable)"
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ctlBut.OnClick = "=enregistrerDatas(15)"

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 183
    Par défaut
    Merci

    En fait c'est ce que j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Compare Database
     
    Public nb As Integer
    et dans un sub j'ai


    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub createBut(entDonnéeX, entDonnéeY, name, typebut)
    
        Set ctlBut = CreateControl("frm_tableau", acCommandButton)
        ctlBut.name = name
              
        ctlBut.Width = 1500
        ctlBut.Height = 300
        ctlBut.Top = entDonnéeX
        'ctlBut.Left = 5000
        ctlBut.Left = entDonnéeY
        ctlBut.Caption = typebut
        ctlBut.FontBold = True
       
        
        
        
        If typebut = "VALIDER" Then
             'boutton d'enregistrement sur click
               ctlBut.OnClick = "=enregistrerDatas(nb)"
       Else
            
            'bouton de retour sur click
                ctlBut.OnClick = "=BackForm()"
       End If
    
    
    End Sub
    je n'ai pas du tou mis en paramètre ctlBut.OnClick = "=enregistrerDatas(nb=2)"[/...

  8. #8
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Citation Envoyé par celiaaa
    je n'ai pas du tou mis en paramètre ctlBut.OnClick = "=enregistrerDatas(nb=2)"[/...
    Voilà ce qui arrive quand on donne les infos au compte goutte...

    Tu déclares ta variable en public : Ok. Si tu veux.
    Il y a quand même un risque : dès que tu as fini de t'en servir n'oublie pas de vider cette variable sinon tu risques d'avoir des surprises.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
               ctlBut.OnClick = "=enregistrerDatas(nb)"
    nb doit valoir quelque chose avant de la passer en paramètre cf mon 1er exemple.

    Par contre, si tu utilises le terme nb pour définir cette variable, évites d'utiliser aussi nb dans ta fonction.

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 183
    Par défaut
    Merci bcp kikoff.

    j'avais essayé de crer une variable dans le sub même tel que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim i As Integer
        i = 13
     
        If typebut = "VALIDER" Then
             'boutton d'enregistrement sur click
               ctlBut.OnClick = "=enregistrerDatas(i)"
       Else
     
            'bouton de retour sur click
                ctlBut.OnClick = "=BackForm()"
       End If
    tout en gardant la fonction enregistrerDatas(nb) dans le module
    mais ça me faisait la même erreur...
    C'est étrange! alors quen dur ça marche...

  10. #10
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 183
    Par défaut
    J'ai testé la fonction sur un nouveau projet acccess.
    Et ça me fait la même erreur:

    "lexpression sur clic entree comme paramètre de la propriété de type événement est à l'origine d'une erreur .L'objet ne contient pas d'objet d'automatisation i"


    voici le code
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Option Compare Database
     
    Private Sub Détail_Click()
     
    Dim o As Integer
    o = nb
     
    DoCmd.OpenForm "formulaire2", acDesign, , , , acHidden
     
        Set ctlBut = CreateControl("formulaire2", acCommandButton)
        ctlBut.Name = Name
     
        ctlBut.Width = 1500
        ctlBut.Height = 300
        ctlBut.Top = entDonnéeX
        'ctlBut.Left = 5000
        ctlBut.Left = entDonnéeY
        ctlBut.Caption = typebut
        ctlBut.FontBold = True
     
     
        Dim i As Integer
        i = 13
     
        If typebut = "VALIDER" Then
             'boutton d'enregistrement sur click
                 ctlBut.OnClick = "=BackForm()"
       Else
     
            'bouton de retour sur click
     
                ctlBut.OnClick = "=enregistrerDatas(i)"
       End If
     
    End Sub
    et la fonction se trouvant dans un module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Compare Database
     
    Public Function enregistrerDatas(nb As Integer)
    MsgBox (nb)
     
     
    End Function
    Quelqu'un a une idée? ou une autre façon de passer un paramètre à une fonction ou jene sais quoi?

    Merci ^d'avance

  11. #11
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    bjr,

    ben si il faut sortir la variable de la chaîne de caractères pour l'évaluer non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ctlBut.OnClick = "=enregistrerDatas(" & i & ")"

  12. #12
    Expert confirmé
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Par défaut
    Citation Envoyé par Arkham46
    bjr,

    ben si il faut sortir la variable de la chaîne de caractères pour l'évaluer non?
    Oh que oui. Je vais aller prendre des vacances tiens. Ca fait longtemps.

  13. #13
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 183
    Par défaut
    Merci à tous les 2

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/08/2007, 17h07
  2. passage de paramètre à une fonction passée en paramètre
    Par bambou dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/08/2007, 11h39
  3. Passage de paramètre à une fonction dans un G_CALLBACK
    Par Dimitri_87 dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 15/09/2006, 12h04
  4. [PL/SQL] : Passage de paramètres à une fonction
    Par dcollart dans le forum Oracle
    Réponses: 5
    Dernier message: 13/07/2006, 11h17
  5. [VBA-E]passage de parametre à une fonction
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 02/02/2006, 18h51

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