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 :

Problème avec la fonction CreateEventProc


Sujet :

VBA Access

  1. #1
    Membre expérimenté Avatar de psykodumarteau
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Par défaut Problème avec la fonction CreateEventProc
    Bonjour,

    J'ai un nouveau problème avec mon appli Access. Je crée un formulaire par du code VBA et je veux mettre du code sur l'évènement "ouverture". Voici mon 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
     
    DoCmd.OpenForm "BRDC_VIERGE", acNormal, , , , acHidden
    DoCmd.CopyObject , nomformcible, acForm, "BRDC_VIERGE"
    DoCmd.Close acForm, "BRDC_VIERGE", acSaveNo
     
    'attribu la requete dynamique au formulaire dynamique
    DoCmd.OpenForm nomformcible, acDesign, , , acFormReadOnly
    Set newform = Forms.Item(nomformcible)
    newform.RecordSource = nomreqcible2
     
    'Créer un module d'événement pour le nouveau formulaire
    newform.HasModule = True
    Set mdlevent = newform.Module
     
    lgnreturn = mdlevent.CreateEventProc("Open", newform.Name)'erreur d'exécution 57017 : gestionnaire d'évènements non valide 
    MsgBox CodeOuvertureNewForm
    'mdlevent.InsertLines lgnreturn+1, CodeOuvertureNewForm
    Lorsque j'exécute ce code, j'obtiens l'erreur 57017 (gestionnaire d'évènements non valide) sur la ligne "lgnreturn = mdlevent.CreateEventProc("Open", newform.Name)". J'ai essayé de remplacer "Open" par "OnOpen", "Ouverture" et "sur ouverture", le problème persiste.

    Le code est-il bon? Si oui, comment appelle-t-on l'évènement "sur ouverture" d'un formulaire et où peut-on trouver un listing des évènements pour la fonction CreateEventProc

  2. #2
    Membre expérimenté Avatar de psykodumarteau
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Par défaut
    Bonjour,

    je n'ai pas réussi à faire marche ma commande mdlevent.CreateEventProc. alors en cherchant sur le Web, j'ai trouver une solution qui consisterai à créer un module de classe.

    Mon probleme est maintenant de créer un module de classe pour des formulaires particuliers. A ma connaissance il n'existe pas de notion d'héritage dans VBA. Alors ma première question est : Existe-t-il la notion d'héritage dans VBA? et ma seconde : Si non, quels sont les moyens pour détourner ce manque?

    Si non par curiosité j'aimerai quand même savoir comment on fait pour faire marcher la commande mdlevent.CreateEventProc avec les évènements des formulaires.

    Cordialement

  3. #3
    Membre expérimenté Avatar de psykodumarteau
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 184
    Par défaut
    j'ai enfin réussi à résoudre mon problème. En fait pour mettre un évènement sur l'ouverture d'un formulaire, il n'y a pas besoin d'utiliser la méthode CreateEventProc. Il suffit juste d'écrire la fonction "form_open" dans le module du formulaire. Voici mon 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
     
    'ouvre le formulaire model, le copie et le referme
    DoCmd.OpenForm "BRDC_VIERGE", acNormal, , , , acHidden
    DoCmd.CopyObject , nomformcible, acForm, "BRDC_VIERGE"
    DoCmd.Close acForm, "BRDC_VIERGE", acSaveNo
     
     
    'attribu la requete dynamique au formulaire dynamique
    DoCmd.OpenForm nomformcible, acDesign, , , acFormReadOnly
    'Forms.Item(nomformcible).RecordSource = nomreqcible2
    Set newform = Forms.Item(nomformcible)
    newform.RecordSource = nomreqcible2
     
    'Créer un module d'événement pour le nouveau formulaire
    newform.HasModule = True
    Set mdlevent = newform.Module
     
     
    'lgnreturn = mdlevent.CreateEventProc("Click", newform.BtnDetails.Name)
    'MsgBox CodeOuvertureNewForm
    mdlevent.InsertLines 4, CodeOuvertureNewForm
    et la déclaration de la constante CodeOuvertureNewForm

    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
     
    Public Const CodeOuvertureNewForm As String = "Private Sub Form_Open(Cancel As Integer)" & vbCrLf & _
                                                  " Dim rcs As DAO.Recordset" & vbCrLf & _
                                                  " Set rcs = Me.Recordset" & vbCrLf & _
                                                  " Me.TxtTYPE.ControlSource = rcs.Fields(""CODE_LIG"").Name" & vbCrLf & _
                                                  " Me.TxtCLIENT.ControlSource = rcs.Fields(""CLIENT"").Name" & vbCrLf & _
                                                  " Me.TxtREFERENCE.ControlSource = rcs.Fields(""REFERENCE"").Name" & vbCrLf & _
                                                  " Me.TxtDESIGNATION.ControlSource = rcs.Fields(""DESIGNATION"").Name" & vbCrLf & _
                                                  " Me.TxtARTICLE.ControlSource = rcs.Fields(""ARTICLE"").Name" & vbCrLf & _
                                                  " Me.TxtDATE.ControlSource = rcs.Fields(""DATE"").Name" & vbCrLf & _
                                                  " Me.TxtQTE_BESOIN.ControlSource = rcs.Fields(""QTE_BES"").Name" & vbCrLf & _
                                                  " Me.TxtQTE_RESSOURCE.ControlSource = rcs.Fields(""QTE_RES"").Name" & vbCrLf & _
                                                  " Me.TxtCODE.ControlSource = rcs.Fields(""CODE_ORIGINE"").Name" & vbCrLf & _
                                                  " Me.TxtORIGINE.ControlSource = rcs.Fields(""ORIGINE"").Name" & vbCrLf & _
                                                  " Me.TxtREF_ORIGINE.ControlSource = rcs.Fields(""REF_ORIG"").Name" & vbCrLf & _
                                                  " Me.TxtART_ORIG.ControlSource = rcs.Fields(""ART_ORIG"").Name" & vbCrLf & _
                                                  " Me.TxtDATE_LANC.ControlSource = rcs.Fields(""DATE_LANCEMENT_PREV"").Name" & vbCrLf & _
                                                  " Set rcs = Nothing" & vbCrLf & _
                                                  "end sub"
    Si ça peut servir à quelqu'un.

    Cordialement

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

Discussions similaires

  1. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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