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 :

Faire une "PAUSE" dans la macro et donner la main à l'utilisateur


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Points : 65
    Points
    65
    Par défaut Faire une "PAUSE" dans la macro et donner la main à l'utilisateur
    Bonjour à tous,

    J'aurais voulu savoir s'il existe la possibilité d' arrêter la macro momentanément et de donner la main à l'utilisateur.

    Qu'il puisse faire des modifications sur le fichier et appuyer sur "play" pour reprendre la macro?

    Ou, suis je contrainte de couper ma macro en plusieurs parties et de leur administré différents boutons.

    J'ai fais des recherches sur le net, on parle de DoEvents et de Inputbox mais les discussions que j'ai vu s'arrête toujours à mi-chemin ou ne réponde pas à mon besoin.

    Est ce que quelqu'un pourrait m'aider?????

    Cordialement.

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Re,à priori il vaudrait mieux scinder et affecter des boutons à ces différentes parties.
    Une grosse procédure se décomposera en de plus petites procédures et fonctions, cela facilitera le debugage et la maintenance

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 130
    Points : 65
    Points
    65
    Par défaut
    Heureusement que tu es là kiki29.
    Merci de ta réponse.

    Cordialement.

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 6
    Points : 6
    Points
    6
    Par défaut InputBox et DoEvents
    Bonjour

    Comme Scinder le code en deux , ne réponds pas toujours au besoin (dans le cas de l'utilisation de boucle par exemple), voici une explication entre InputBox et DoEvents de ce que j'ai compris.. Pour moi ça marche..

    InputBox : Cette fonction stop automatiquement met automatiquement la macro en pause, en attendant la saisie de l'utilisateur. cela répond a un besoin précis, mais est peu adaptable (Nombre de bouton, etc...), l'aide Excel explique très bien comment ça marche

    DoEvents : cette instruction met en pause la Macro et donne la main a n'importe quelle autre application, que ce soit Excel ou non. elle a répondu a mon besoin, a savoir, j'ouvre un Formulaire, et tant que l'utilisateur, n'a pas cliquer sur certain bouton, la macro ne reprend pas...

    La technique : utiliser un événement booléen ("un flag" ?) et une boucle "While" :


    General :

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    'debut de la macro'
     
    Flag = TRUE
    Do While Flag
          DoEvents
    Loop
     
    'suite de la macro'


    il faut que l'action de l'utilisateur modifie la variable FLAG de façon a ce quelle soit égale a FALSE

    Si la variable est déclare en haut du module en dehors d'une procédure, elle sera modifiée par n'importe laquelle fonction de ce module, il suffit alors d'affecter l'action d'un bouton dans le même module et de rajouter dans l'action Flag=FALSE

    Exemple avec un formulaire
    Pour moi, lorsque l'utilisateur clique sur le bouton du formulaire, le formulaire se ferme et donc , la macro sort de la boucle et continue


    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Show NomFormulaire
    Do While NomFormulaire.Visible
        DoEvents
    Loop



    A chacun de trouver une manière de créer un événement booléen en fonction de ses besoin...

    Voila, j’espère que cela pourra en aider certains.

    Si quelqu'un veut des précisions, n’hésiter pas..

    Merci BEAUCOUP a tous les post de ce forum ont pu m'aider.


    PS: désole pour les accents manquants, c'est dur dur avec un clavier QWERTY

    PPS: Il y a aussi bien sur la célèbre technique du coup de boule sur l’unité centrale évoquée sur d'autre forum, qui en effet, met "en pause" la macro....

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Malgré le "Résolu" je me permets de poster un petit exemple. A mettre dans un module standard et à exécuter pour le test (représente ta 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
     
    Public Arret As Boolean
     
    Sub Tempo()
     
        Arret = True
     
        MsgBox "Debut"
     
        [A1].Select
     
        Do
            DoEvents
        Loop Until Arret = False
     
        MsgBox "Fin"
     
    End Sub
    A mettre dans le module de la feuille. La proc poursuivra seulement quand la valeur de A1 aura changée et à condition quelle ne soit pas vide :
    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
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        If Target.Address(0, 0) = "A1" Then
     
            If Target <> "" Then
     
                Arret = False
     
            Else
     
                MsgBox "Veuillez renseigner la cellule A1 !"
     
            End If
     
        End If
     
    End Sub
    Hervé.

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

Discussions similaires

  1. [VB6-Autocad]Faire une recheche de texte dans un fichier Autocad
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 07/09/2006, 15h28
  2. faire une mosaique d'image dans un formulaire
    Par db48752b dans le forum IHM
    Réponses: 17
    Dernier message: 05/09/2006, 13h55
  3. Faire une recherche de texte dans un tableau de variable
    Par alexxx69 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/02/2006, 13h12

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