Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Nouveau Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2011
    Messages
    125
    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 : 125
    Points : 33
    Points
    33

    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 Confirmé Sénior

    Homme Profil pro Philippe
    ex Observeur CGG / Analyste prog.
    Inscrit en
    juin 2006
    Messages
    2 607
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : juin 2006
    Messages : 2 607
    Points : 6 534
    Points
    6 534

    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
    Pensez à Voter, d'avance merci.
    Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
    Autres utilitaires : MZ Tools 3.0 VBA 7Zip et Compacter projets VBA

    Contributions : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator et Téléchargements

  3. #3
    Nouveau Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2011
    Messages
    125
    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 : 125
    Points : 33
    Points
    33

    Par défaut

    Heureusement que tu es là kiki29.
    Merci de ta réponse.

    Cordialement.

  4. #4
    Invité de passage
    Inscrit en
    janvier 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : janvier 2011
    Messages : 6
    Points : 0
    Points
    0

    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 :
    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 :
    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 Confirmé
    Homme Profil pro Hervé Silve
    Inscrit en
    août 2010
    Messages
    1 635
    Détails du profil
    Informations personnelles :
    Nom : Homme Hervé Silve
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 1 635
    Points : 3 964
    Points
    3 964

    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 :
    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 :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •