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 :

Gérer les évènements VBA par programmation


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 107
    Points : 53
    Points
    53
    Par défaut Gérer les évènements VBA par programmation
    Bonjour à tous,
    Le sujet étant peu développé dans les FAQ, j'ai quelques lacunes.
    Je veux par programmation écrire du code sur un évènement (quelconque).
    Jusque là pas de problème avec Module, CreateEventProc,InsertLines....... mais ce que voudrais, c'est pouvoir s'avoir si cet évènement existe et surtout pouvoir le supprimer (je n'est rien trouvé sur les FAQ, Forum,Google....)
    Apparemment la fonction Delete n'existe pas avec Module..
    Ce qui serait bien, c'est de pouvoir lire le code pour soit le modifier, soit en ajouter ou supprimer.
    Merci
    A+

  2. #2
    Membre régulier Avatar de Rcanada
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 130
    Points : 123
    Points
    123
    Par défaut
    Je ne comprends pas bien le probleme ...
    Ce que tu veux c'est pouvoir associer du code VBA à un événement ?

    Si c'est bien ça, il te suffit d'afficher les propriétés du contrôle sur lequel l'événement va être déclenché, puis tu vas dans l'onglet "event" ou "évenement", tu choisis l'évenement correspondant, puis tu clic sur les 3 points à droite "..." et tu choisis "Code builder".

    Ensuite, lorsque tu voudras l'éditer ou le modifier, tu fais la même chose qu'au dessus, et lorsque tu cliqueras sur les 3 pts "...", il t'ouvre automatiquement le code au bon endroit.

  3. #3
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Et la méthode DeleteLines ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 107
    Points : 53
    Points
    53
    Par défaut
    Salut,
    Oui mais comment savoir si il y a du code et combien de lignes (je crois que DeleteLines a comme param le numéro de ligne....
    Merci

  5. #5
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Est-ce que tu pourrais expliquer clairement, pour quelqu'un qui n'est pas avec toi, sur ta machine ou dans ta tête, ce que tu veux faire ?
    Parce que les indications que tu donnes indiques une manipulation dynamique du code.
    Me trompe-je ?
    Si non, quel rapport avec les évènements dont tu parles ?

    Le principe des évènements est simple :
    Soit tu utilises une classe existante, et tu utilises les évènements existants
    Soit tu crées ta propre classe et tu y mets tes propres évènements.
    (Public Event) que tu déclenches toi-même (Raiseevent)

    Ca, c'est la base.
    maintenant, je vois que tu veux faire un CreateEventProc... mais, dans quel but ? objectif ? ...

    Merci

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 107
    Points : 53
    Points
    53
    Par défaut
    Salut,
    Je vais essayer d'être clair...
    Je suis en train d'écrire un générateur de menu pour access97.
    Donc l'utilisateur crée la fenêtre, le texte et l'icone du menu.
    Ensuite sur l'évènement MouseMove (par exemple) on place du code (par exemple : sur souris déplacée alors change fond).
    Mon problème est que chaque fois que l'utilisateur fait une modif sur son menu, je réécris la fenêtre, donc je dois savoir si, sur le controle de la fenêtre, il existe du code sur l'évènement MouseMove, le déruire, et le réécrire...
    J'espère avoir été clair car l'application est peut complexe.
    Merci

  7. #7
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    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
     
    Function GetProc(ProcName As String, ByRef StartLine As Long, ByRef CountLine As Long) As String
        'Besoin d 'ajouter la bibliothèque VBA extensibility
        With Application.VBE.ActiveVBProject.VBComponents("Module2").CodeModule
            StartLine = .ProcStartLine(ProcName, vbext_pk_Proc)
            CountLine = .ProcCountLines(ProcName, vbext_pk_Proc)
            GetProc = .Lines(StartLine, CountLine)
        End With
    End Function
    Sub GoSearch()
        Dim n1 As Long, n2 As Long
        Debug.Print GetProc("x2", n1, n2)
        Debug.Print "La procédure commence ligne : " & n1
        Debug.Print "La procédure fait " & n2 & " lignes"
    End Sub
    Ca t'aide ?

    Désolé, j'ai pas mis de commentaire, j'ai pondu ça vite fait :s

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 107
    Points : 53
    Points
    53
    Par défaut
    Merci, sur le principe cela à l'air super, puisqu'après je peux passer un DeleteLines à partir du numéro de la 1ère ligne.
    Mais problème, Access97 ne reconnait pas VBE de Application.VBE
    Il faut peut-être rajouter une référence ?
    Sinon l'adapter pour Access97.... à quoi correspond VBE ?
    A+

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 107
    Points : 53
    Points
    53
    Par défaut
    Juste pour te dire que j'ai ajouté la référence MicroSoft VisualBasic VB6 Extensibility (c'est la seule que j'ai sur la bécanne) avant de tester.
    Merci

  10. #10
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Je n'ai pas 97 sous la main pour tenter un test.
    Mais, si tu fais {F2} et que tu scanne la bibliothèque VBIDE, tu dois bien voir l'objet VBE !
    non ?

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 107
    Points : 53
    Points
    53
    Par défaut
    C'est exact, dans la biblio j'ai bien VBE avec toute ces propriétés.
    Mais le débogueur me plante toujours sur Application.VBE
    J'ai fermé et relancé l'appli mais toujours pareil.
    Pour info j'ai placé la fonction dans un module "procgene" qui me sert pour toutes les fonctions et procédures utilisables dans mes applis.
    Pour l'instant je ne vois pas......
    A+

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 107
    Points : 53
    Points
    53
    Par défaut
    Bonjour,
    Après moultes recherches infructueuses, j'ai pris un portable, installé XP puis le pack Office 97 complet, donc le portable n'a que XP et PackOffice97.
    J'ai lancé mon appli, puis dans Référence j'ai mis "Microsoft Visual Basic for Application Extensibility".
    Avec F2 je vois bien VBE et ses propriétés.
    Je lance le débogueur qui plante sur VBE (Application.VBE.......)
    Manquerait-il une référence ou une déclaration ????
    Là je suis bloqué, je ne vois pas
    Merci

  13. #13
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    non non...
    Essaie SANS Application.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 107
    Points : 53
    Points
    53
    Par défaut
    Salut,
    je viens de le faire, mais je bloque toujours sur VBE.
    Pour infos j'ai fait une recherche dans la base s'il n'existait un VBE en variable, on sait jamais, mais rien...
    La référence est un fichier VBEEXT1.OLB situé dans Program Files\Fichiers Communs\Microsoft Shared\VBA.
    Il n'existait pas dans System32 alors je l'ai copié, mais....rien...
    J'y perds le peu de latin que j'avais.
    A+ Merci

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 107
    Points : 53
    Points
    53
    Par défaut
    Salut,
    Après un long week-end studieux, je n'ai toulours pas trouvé la réponse, mais j'ai pu débloquer la situation.
    J'ai un peu modifier la fonction initiale (merci Maxence) pour l'adapter à mon appli. (en sachant que je connais le nom de la fenêtre, du controle et de la proc.
    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
    Public Function GetProc(Nfrm As String, ProcName As String, ByRef StartLine As Long, ByRef CountLine As Long) As Boolean
    Dim modl As Module
    On Error GoTo ErrProc
    Set modl = Forms.Item(Nfrm).Module
    With modl
      StartLine = .ProcStartLine(ProcName, vbext_pk_Proc)
      CountLine = .ProcCountLines(ProcName, vbext_pk_Proc)
      GetProc = True
    End With
    Set modl = Nothing
    Exit Function
    ErrProc:
    'ProcName n'existe pas Err 35
    Set modl = Nothing
    GetProc = False
    End Function
     
    Public Sub DelProc(Nfrm As String, DepLine As Long, NbLine As Long)
    Dim modl As Module
    Set modl = Forms.Item(Nfrm).Module
    modl.DeleteLines DepLine, NbLine
    Set modl = Nothing
    End Sub
    et pour tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If GetProc(Nfrm, NomCtrl & "_MouseMove", DepL, NbL) = True Then
      DelProc Nfrm, DepL, NbL
    End If
    Cela fonctionne pour Access97 et XP
    Est-ce la bonne méthode ?????????
    A+

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

Discussions similaires

  1. Gérer les services W32 par programme
    Par Gugli dans le forum Delphi
    Réponses: 1
    Dernier message: 15/06/2007, 22h45
  2. Gérer les "Options" dans un programme
    Par Nis dans le forum Langage
    Réponses: 2
    Dernier message: 05/05/2007, 15h35
  3. Fermer l'editeur VBA par programmation
    Par bossun dans le forum Général VBA
    Réponses: 1
    Dernier message: 15/02/2007, 14h14
  4. [Débutant][C#] Comment gérer les événements ?
    Par aDamas dans le forum Windows Forms
    Réponses: 11
    Dernier message: 14/12/2005, 00h16
  5. Réponses: 5
    Dernier message: 25/07/2005, 09h29

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