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 :

Arrêter une boucle While en cliquant sur le bouton d'un Userform. [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    physico-chimiste
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : physico-chimiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 37
    Points
    37
    Par défaut Arrêter une boucle While en cliquant sur le bouton d'un Userform.
    Bonjour,

    la réponse à cette question doit-être tellement évidente que je ne l'ai trouvée nulle part : est-ce qu'il est possible de changer la valeur d'un booléen dans un module en actionnant un bouton dans un userform ? Si oui comment ?

    Merci d'avance pour votre aide,

    David

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour

    Oui. En la changeant.
    Il faut bien évidemment que cette variable booléenne soit déclarée publique dans le module (module "indépendant" obtenu par insertion -> module et non, bien sûr le module de code du Userform)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Invité
    Invité(e)
    Par défaut Boucle Do While ....Loop
    Bonjour,
    Le problème n'est pas tant en soit , bien que ce soit important, la déclaration de la variable mais l'interception du click!

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    sans préciser ton contexte d'utilisation, c'est facile de te présenter un exemple :

    - dans un module standard, déclarer la variable publique qui permettra d'arrêter la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public bStop As Boolean
    - dans un userform NON MODAL (Userform2 dans l'exemple), placer un commandbutton qui stoppera la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton_ARRET_Click()
    bStop = True
    End Sub
    - dans un autre userform NON MODAL (Userform1 dans l'exemple), placer un textbox qui contrôlera le déroulement de la boucle + un option bouton pour démarrer la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CommandButton1_Click()
    UserForm2.Show False
    bStop = False
    Me.TextBox1.Text = "1"
     
    While Not bStop
        Me.TextBox1.Text = CStr(CLng(Me.TextBox1.Text) + 1)
        DoEvents
    Wend
     
    End Sub

    On remarquera :

    - qu'en démarrant la boucle, on affiche Userform2 qui contient le bouton d'arrêt
    - si on clic sur le bouton d'arrêt de Userform2, on modifie la valeur de bStop qui va stopper la boucle
    - le textbox consiste simplement en un compteur qui s'incrémente à chaque tour de boucle. Ca te permet de voir que la boucle se stoppe quand le chiffre n'évolue plus ... attention c'est un type Long donc au delà de 2 milliards (et des poussières) la macro plantera par dépassement de capacité ... ce n'est qu'un exemple que je présente ici
    - l'instruction DoEvents, c'est elle qui nous permettra de cliquer sur le bouton d'arrêt ... instruction puissante dont je t'invite à en consulter l'aide en ligne


    Ps : j'ai utilisé deux Userform, mais un seul suffit amplement pour tout faire. Etant donné que tu vas tester et découvrir, ça va t'éviter de faire trop de clic sur le userform où la boucle tourne et de la figer .... avec l'idée qu'en fait ça ne fonctionne peut être pas (ce qui est faux)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    physico-chimiste
    Inscrit en
    Avril 2016
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : physico-chimiste

    Informations forums :
    Inscription : Avril 2016
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Désolé pour mon manque de réactivité, j'ai finalement trouvé une autre solution.
    Mais vos explications me seront très utiles pour la suite. Notamment l'exemple de joe.levrai.

    Merci à vous 3,

    David

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 03/03/2015, 11h52
  2. Arrêter une boucle while
    Par nanou2183 dans le forum Macro
    Réponses: 2
    Dernier message: 02/03/2012, 12h01
  3. Arrêter une boucle (while) en cours d'exécution
    Par Cybberdupont dans le forum Langage
    Réponses: 19
    Dernier message: 26/06/2008, 14h24
  4. Réponses: 0
    Dernier message: 21/01/2008, 19h01
  5. déclenchement d'une Fonction Java en cliquant sur un bouton
    Par dracula2000 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 31/03/2006, 11h34

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