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

Macros et VBA Excel Discussion :

[VBA-E]Communication inter-formulaires et code de retour


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 33
    Par défaut [VBA-E]Communication inter-formulaires et code de retour
    Bonjour tout le monde,

    Je me pose une question qui à mon avis est toute simple pour les habitués du vba. Moi ça ne me paraît pas clair !

    Je prends un exemple volontairement tout bête pour vous poser mon problème :
    J'ai un formulaire A sous VBA (en excel) qui possède un contrôle ListBox. Lorsqu'on dble-click sur un élément de cette ListBox, un nouveau formulaire B s'ouvre pour effectuer des actions sur l'élément concerné. Une fois tous les traitements effectués, je valide le formulaire B, le ferme (avec un .hide) et je retourne sur le formulaire A. Ma question est de savoir depuis A ce qu'il s'est passé sur B ? Pour simplifier encore, j'ai un bouton "Valider" et un autre "Annuler" sur mon formulaire B et je voudrais depuis A savoir lequel des deux a été pressé. Je ne pense pas que ce soit surhumain et que VBA doit permettre cela mais j'ai eu tellement de déception avec VBA que maintenant je ne m'avance plus !

    Naturellement, j'ai cherché pour la communication interformulaires en VBA mais nada ! Je suis pas du genre ramier alors une simple piste me suffira. Mais par pitié juste une idée, je desèspère ! Faut-il que je tape du coté des API et des handle des fenêtres pour cela ? Pour moi la réponse est non puisque le handle ne sert qu'à manipuler une fenêtre mais connaitre les différents états qu'elle a...

    D'avance merci,

    @+

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 557
    Par défaut
    Laisse tomber les API ou je ne sais quoi

    Déclare toi une variables globales "Public" en boolean ou integer, comme tu veux, mais dans tes modules de traitement

    Ainsi, lors du click sur Valider, tu mets ta variable à true et à false si annuler

    Ensuite, quand tu es de retour sur ton formulaire A, tu testes la valeur de cete variable

    SI cela marfhe pas, il te reste la solution d'affecter une valeur dans une celllule de ta feuille et de la lire pour savoir si c'est valider ou annuler qui a été cliqué

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 33
    Par défaut
    Merci pout cette réponse.

    Tu éclaires mon problème. Je n'ai pas encore testé mais cette technique doit marcher puisque je l'utilise déjà en partie pour transmettre des variables du formulaire A au formulaire B. Je me sens d'ailleurs un peu con de ne pas y avoir penser plus tôt !! En fait je crois qu'il fallait un avis extérieur pour me conforter dans l'idée. Je te remercie !

    Voici déjà le code en place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Set Me.Formulaire_Regularisation = New FormRegul
     
    Me.Formulaire_Regularisation.dtp_date_anomalie = FormatDateTime(FeuilleHoraires.LaFeuille.Cells(Index, 1), vbShortDate)
    Me.Formulaire_Regularisation.lb_horaires_journee.ColumnCount = 3
    Set TableauHoraires = FeuilleHoraires.GetHoraires("Jour", Me.Formulaire_Regularisation.dtp_date_anomalie.value)
    Me.Formulaire_Regularisation.lb_horaires_journee.List = FeuilleHoraires.HorairesAnomalie.GetTableau()
    Me.Formulaire_Regularisation.Show
    MsgBox Me.Formulaire_Regularisation.f_AvantApres
    MsgBox Me.Formulaire_Regularisation.f_Presence
    MsgBox Me.Formulaire_Regularisation.Nouvelle_Heure
    Me.FeuilleHoraires.NoterEvenement Me.Formulaire_Regularisation.Nouvelle_Heure, "REDFACE", "ABSENT", Nom, 65
    Comme vous pouvez le constater, je passe déjà au formulaire B depuis le A la valeur du DateTimePicker (dtp_date_anomalie) en initilisant directement le controle à la création du formulaire. Je récupère des valeurs de ce formulaire (affichées dans des MsgBox) après le "Me.Formulaire_Regularisation.Show".
    Déjà peux tu me donner la confirmation (ou l'infirmation !) que la programmation suivante est propre ou bien y a t il des solutions plus recommandées ?
    De la même manière tu me conseilles de déclarer une variable Boolean dans le formulaire B (Formulaire_Regularisation), y affecter une valeur et la récupérer dans le formulaire A avec "Me.Formulaire_Regularisation.b_variable_booleenne.value" ?

    Une dernière question d'un autre ordre : qu'est ce qui est le mieux pour les formulaires : .Show ou .Activate et pour la fermeture .Hide ou .Unload ??

    Merci pour ta 1ère réponse helios77, gspr que tu pourras (ou qqun d'autre) m'avancer sur cette deuxième interrogation !

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 557
    Par défaut
    En ce qui concerne al propreté ducode, il semble OK

    Pour la variable, c'est pas tellement au niveau du formulaire que je la mettrais...Je la mettrais plutôt dans un module de telle sorte que cette variable soit neutre pour lesformulaires et que tu puisses éventuellement l'utiliser dans une procédure
    faut essayer de regrouper les variables là ou c'est le plus logique
    Si une variable peut servir à plusieurs forulaires, je pense qu'il vaut mieux la mettre ailleurs que dans les formulaires, sinon le jour ou tu la cherches, tu ne sauras plus dans quel formulaire tu l'as mise

    Moi personnellement, je n'utilise que .Show et .Unload
    Le .Hide ne fait que cahcer ton formulaire ==> tu conomises pas la place mémoire alros quel .unload le décharge et donc tu gagnes de la place mémoire

    Par contre, si tu récupèrse des données d'un formulaire vers l'autre etque tu le unload, tes données risquent de ne plus être accesible ==> utilité de centraliser les données dans un module à part

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 33
    Par défaut
    Ok merci pour le chargement-déchargement des formulaires, c'est déjà une question réglée. Je pense effectivement que le Unload est plus propre au niveau de la mémoire mais je suis aussi d'accord avec toi et je risque d'avoir des données perdues. Dans mes formulaires avec transmission de données je continuerai d'utiliser le .Hide.

    Par contre j'ai encore une question concernant la solution que tu me donnes pour le stockage justement de ces variables : qu'entends tu par module de traitement à part ? Il faut que je crée un module (une classe ou juste un module ?) dans lequel je ne vais mettre que des variables. Et ensuite, à l'utilisation, j'affecte et je lis ces variables en appelant systématiquement le module ? Du genre MonModule.MaVariableGlobale = ... ??

    Encore merci !

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 557
    Par défaut
    On pourrait imaginer que les traitements que tu mets derrièrs tes boutons soient regroupés dans un simple module
    Dans ce même module, tu pourrais y mettres tes variables, les alimenter et les utiliser via un truc du genre Module.Variabel =

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

Discussions similaires

  1. Créer un sous formulaire par code VBA
    Par Cabos dans le forum IHM
    Réponses: 7
    Dernier message: 07/06/2011, 14h18
  2. Ouvrir document Word à partir d'un formulaire Access(code VBA)
    Par protocoleigrp dans le forum VBA Access
    Réponses: 1
    Dernier message: 15/06/2009, 16h22
  3. Code VBA pour communication avec un port série dans EXCEL
    Par Fbroom dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2008, 10h14
  4. [VBA-A] Code vba pour inclure un formulaire Acces
    Par MadSquirrel dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/04/2006, 18h19
  5. [VBA-E]ajouter un textbox sur un formulaire par code?
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 22/03/2006, 09h33

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