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 :

Gestion d'évènements sur un form


Sujet :

VBA Access

  1. #1
    Membre éclairé

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Par défaut Gestion d'évènements sur un form
    Bonjour à tous,

    J'ai quelques soucis de gestion d'évènements avec un formulaire.

    Ce formulaire permet d'afficher une donnée via un bouton avec un autre logiciel.
    Ce que je voudrais c'est que lorsque que je reviens vers Access (que l'autre logiciel ait été fermé ou non), le formulaire se mette à jour via un Me.Requery.

    J'ai essayé :
    - gotfocus: rien ne se passe. Comment marche cet évènement dans ce cas? parce que le formuliare doit recevoir le focus dès que je l'ai en 1er plan ou au moins lorsque je clique dessus, non?
    - activate : qui n'agit que lorsque le formulaire se charge
    - click: rien ne se passe

    Je cale là. Ca fait 3 jours que je planche là-dessus, que je bidouille et traficotte et je n'ai toujours pas trouvé de solution.

  2. #2
    Expert confirmé
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Par défaut
    Bonjour,

    Sauf erreur de ma part, il n'y a pas d'événement utilisable dans ce cas.

    La seule piste qui me semble exploitable, c'est de lancer une procédure sur timer au moment ou tu cliques sur ton bouton, procédure qui va vérifier quelle est la fenêtre active et déclencher le requery au moment opportun.

    Je n'ai pas mieux...

    Domi2

  3. #3
    Membre éclairé

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Par défaut

    La seule piste qui me semble exploitable, c'est de lancer une procédure sur timer au moment ou tu cliques sur ton bouton,
    Et si l'utilisateur passe certaines fois 30 secondes, et d'autres 15 minutes?
    procédure qui va vérifier quelle est la fenêtre active et déclencher le requery au moment opportun.
    Si j'ai bien compris, le timer devrait vérifier souvent quelle est la fenêtre active (par quelle procédure???) et si c'est la fenêtre access, lancer la suite. C'est ça?
    Mais si je mets 1 minute, c'est un coup à ce que l'utilisateur attende presque une minute s'il reprend Access au mauvais moment. Si je met 15 secondes, ça va ralentir tous les processus.
    Non?

    Bon sang, ça me sidère qu'il n'y ai pas une procédure adaptée.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Il y'a peut-être une autre solution, ce logiciel qui est ouvert par Access, c'est quoi ?

    Starec

  5. #5
    Membre éclairé

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Par défaut
    C'est un logiciel de cartographie: MapInfo.
    Le langage pour le manipuler est du MapBasic, un équivalent VBA avec des fonctions géographiques..
    Et je suppose que ça ne vous dit pas grand chose...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Miss Ti Voir le message
    Et je suppose que ça ne vous dit pas grand chose...
    Gagné

    Sinon vas faire un tour dans la FAQ Access, en mettant le mot processus comme critère de recherche, cela te donnera cela http://access.developpez.com/faq/ind...cher=processus

    Peut-être que ces solutions pourront t'aider.

    Starec

  7. #7
    Membre éclairé

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Par défaut
    Avant de me lancer dans ces codes compliqués, j'ai une autre piste.

    L'autre logiciel (MapInfo) permet l'ajouter/modification/suppression des données, même si la table est aussi utilisée dans Access. Ces modifications se répercutent dans la table liée Access lorsque que je les enregistre sous MapInfo.

    Access peut-il détecter ces modifications dans les tables? Si un évènement prend ça en compte, je peux baser la suite du code là-dessus. (allez, dis oui! dis oui!)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Mlaheureusement, Access ne peut pas détecter les modifications dans une table, il ne dispose pas de Triggers comme dans un système Oracle.

    Starec

  9. #9
    Membre éclairé

    Inscrit en
    Juin 2006
    Messages
    320
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 320
    Par défaut
    En attendant ta réponse, j'ai fouillé le lien que tu m'as donné.
    Ca ne correspond pas à mes besoins.
    Buhuhu...

    Bon, ben, je vais sûrement opter pour un bouton "Mettre à jour".
    Pas bô.

    Si quelqu'un a une autre proposition...

  10. #10
    Expert confirmé
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Par défaut
    Bonjour,

    J'en reviens à ma première proposition...

    Sur le click du bouton, on lance MapInfo, puis un timer vba d'Arkham46.

    La procédure du timer lance à intervalle régulier la procédure de contrôle de la fenêtre active :

    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
    Option Explicit
     
    '--------------------------------------------------------------------------------------------
    'Déclaration des fonctions pour la récupération du titre de la fenêtre active
    Private Declare Function GetForegroundWindow Lib "USER32" () As Long
    Private Declare Function GetWindowTextLength Lib "USER32" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long
    Private Declare Function GetWindowText Lib "USER32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    '--------------------------------------------------------------------------------------------
     
    Public Sub NomFenetreActive()
     
        On Error Resume Next
     
        NomFenetreActive = GetForegroundWindow
     
        'Récupération de la longueur du titre
        Dim length As Long: length = GetWindowTextLength(NomFenetreActive) + 1
     
        'Réservation d'une chaîne de caractères assez grande
        Dim buffer As String: buffer = Space$(length)
     
        'Récupération du titre
        length = GetWindowText(NomFenetreActive, buffer, length)
     
        'Suppression du caractère \0 final
        buffer = Left$(buffer, length)
     
        'Mon Application" correspond au libellé de la barre de titre
        If buffer = "Mon Application" Then
     
            'L'application est de nouveau la fenêtre active
            'On stoppe le timer
            'On exécute le requery
     
    End Sub
    La procédure pour le nom de la fenêtre active est testée. Le timer d'Arkham fonctionne, bien évidemment.

    Peut-être faudra t'il un Do Events après le lancement de MapInfo et avant de lancer le timer, pour-être sûr que MapInfo est bien chargé.

    Et peut-être reforcer le focus sur le formulaire quand Access redevient la fenêtre active.

    Mais si je mets 1 minute, c'est un coup à ce que l'utilisateur attende presque une minute s'il reprend Access au mauvais moment. Si je met 15 secondes, ça va ralentir tous les processus.
    Non?
    Je commencerais par régler le timer à 500 millisecondes, voire une seconde...

    Cela m'étonnerait que cela soit percetible par l'utilisateur.

    J'espère que cela pourra t'être utile...

    Domi2

Discussions similaires

  1. [XL-2010] Gestion d'évènements sur Checkbox Dynamique
    Par pinhut dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 16/06/2015, 17h52
  2. Gestion des évènements sur documents WORD
    Par kilicool dans le forum C#
    Réponses: 3
    Dernier message: 13/12/2011, 14h22
  3. gestion des évènements sur objets dynamiques
    Par boss_gama dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/03/2009, 11h50
  4. Détection des événements sur un form
    Par Jik70 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/04/2006, 12h49
  5. Gestion des évènements lors d'un clique sur une image.
    Par yoghisan dans le forum Débuter
    Réponses: 7
    Dernier message: 23/06/2005, 19h04

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