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 :

Suivre le cheminement d'un userform actif en non modal


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Suivre le cheminement d'un userform actif en non modal
    Bonjour (re...) à toutes et tous.

    J'ai un soucis de textbox qui reprend une valeur initiale en sortie de procédure qui aurait due la modifier.

    La textbox lors de l'activation du userform prend la date du jour.
    Après quand je clicke sur la textbox je lance le calendrier de patricktoulon (contribuez) et je choisi une date....

    Userform actif modal.
    RAS tout va bien

    Userform actif non modal.
    Le textbox un court instant prend la valeur de la date souhaitée (vérifié grâce à un Me.Repaint juste avant le End Sub du calendrier) puis reprend sa valeur d'origine la date du jour.

    Comment faire pour suivre ce que le code effectue après le end de la procédure du calendrier?????
    J'ai beau faire du pas à pas à partir du moment ou je passe sur le end du calendrier je ne vois pas où est la commande qui fait reprendre cette valeur à ma textbox.
    Je pensais à un moment que la procédure repassait par la commande activate du userform mais non .

    Auriez vous des idées?

    Merci et bonne journée

  2. #2
    Rédacteur/Modérateur

    Salut,

    quel est le code VBA derriere tout cela, car faute de mieux, on ne peut que spéculer




    Donne nous de la matière pour tâcher de trouver une explication au probleme et par conséquent des pistes de solutions
    Cycle de vie d'un bon programme :
    1/ ca fonctionne 2/ ca s'optimise 3/ ca se refactorise

    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016 et Access 2019

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre du Club
    Citation Envoyé par Jean-Philippe André Voir le message





    Donne nous de la matière pour tâcher de trouver une explication au probleme et par conséquent des pistes de solutions
    Merci Jean Philippe la mienne aussi l'est... en panne

    Le classeur est assez complexe je suis en train de le réduire au maximum pour isoler le problème.
    En attendant le fait de passer en non modal cela ne fait que de débloquer ?

  4. #4
    Membre du Club
    Pfff!!!!!
    Bon j'ai compris la grosse différence entre le modal et non modal dans mon cas:
    quand j'éxécute l'userform en non modal dès qu'il sort du userform du calendrier il repasse par le userform activate maintenant j'en suis sûr.....
    Mes précédentes recherchent ne l'avait pas mis en évidence mais là c'est du 100% !

    Est-ce une étape normale? on peut lui dire de passer par ailleurs par hasard?

  5. #5
    Expert confirmé
    Bonjour,

    C'est pour ça qu'il y a deux évènements : Initialize et Activate !
    Activate c'est chaque fois que l'userform est activé.
    Initialize c'est au chargement.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  6. #6
    Membre du Club
    Ayant lu qu'il valait mieux passer directement en activate je n'avais pas cherché plus loin .... comme quoi il y a de tout sur les forums.....

    Merci Patrice (pour ne pas m'avoir dit que je ne m'exprimais pas en français ) et surtout un énorme merci à Jean-Philippe André, qui en me répondant, m'a donné le coup de pouce pour repartir à la recherche de mon erreur et m'a permis de la résoudre et d'avancer.C'est Top.

    Pour ceux qui veulent un peu plus d'explication je vais essayer d'être le plus clair possible en espérant que j'ai compris et que je ne vais pas vous enduire d'erreur:

    Load Userform
    Cette instruction va lancer la procédure indiquée par
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Private Sub UserForm_Initialize()
    de l'userform concerné
    il ne s'affichera pas ,l'utilisateur ne pourra y avoir accès mais on pourra le préparer comme charger des données dans les textbox combobox etc en vue de sa très prochaine utilisation.

    Userform1.Show
    Au moment voulu ceci fera apparaître notre Userform et lancer la procédure indiquée par
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Private Sub UserForm_Activate()


    A savoir qu'à différents moments certaines de vos actions vous referont repasser par
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Private Sub UserForm_Activate()
    .
    Dans mon cas c'était en sortie d'un calendrier affiché sous forme d'un autre userform et du coup me rechargeait mes variables que j'avais déclaré dans l'Activate et pas dans l'Initialize.
    A savoir que dans bien des cas on le s'en aperçoit pas carles userform sont lancé en "modal" et que moi j'ai eu ces soucis dès que j'ai lancé mon userform en "non modal"

    Modal: le classeur est figé on ne peut pas avoir d'action dessus tant que le userform est ouvert
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    UserForm.Show

    Non Modal: on peut sélectionner avoir des actions sur le classeur en ayant l'userform ouvert
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    UserForm.Show 0

    a noter qu'il y a d'autres syntaxes pour ces deux modes.

    Super encore une journée au j'aurai appris quelque chose !

  7. #7
    Expert confirmé
    Citation Envoyé par pokypok Voir le message

    Load Userform
    Cette instruction va lancer la procédure indiquée par
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Private Sub UserForm_Initialize()
    de l'userform concerné
    Effectivement, c'est le chargement qui déclenche Initialize mais attention, il n'y pas que Load,
    La première instruction qui fait référence à l'userform a aussi pour effet de le charger et,
    par conséquent elle déclenche aussi l'initialisation. Par exemple, Userform1.Textbox1.Value = "Test" suffit à charger l'usf.

    C'est une des raisons pour laquelle certains préfèrent utiliser Activate plutôt que Initialize mais il ne faut pas généraliser.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  8. #8
    Membre du Club
    Merci beaucoup pour la précision