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 :

Interrompre une macro - Exécution en boucle avec boîte de dialogue


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut Interrompre une macro - Exécution en boucle avec boîte de dialogue
    Bonjour à toutes et à tous,

    J'ai lancé une macro qui tourne maintenant en boucle avec des boîtes de dialogue simples qui se succèdent.

    Peut-être à cause de ces boîtes de dialogue, les raccourcis Ctrl+Pause/Break ou Esc ne fonctionnent pas.

    Y aurait-il une autre solution qu'éteindre brusquement l'ordinateur?

    Cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Il me semble que Ctrl-Pause devrait arrêter le tout à moins qu'il n'y ait d'autres programmes ou actions impliqués autres qu'Excel qui roulent, comme une requête ADODB (ou DAO) ou quelque chose comme ça.
    Ou encore qu'Excel soit en mode de calcul.
    Tu pourrais essayer d'intégrer un ou des DoEvents placés judicieusement dans ton code...

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Si les contrôles et le DoEvents proposés par parmi n'ont pas suffit tu pourrais faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ' dans module Standard
    Public b_stop As Boolean
    Public b_debog As Boolean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ' test dans la boucle à mettre où tu veux reprendre en pas à pas
    Sub test()
        b_debog = True
        Do
            UserForm1.Show
            '...
            If b_stop Then Stop: b_stop = False
           '...
        Loop
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'dans un des userform pénibles
    Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        If b_debog Then b_stop = True
    End Sub
    Un double-clic dans l'UF met un Stop
    eric

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je rappelle que les boîtes de dialogue sont en principe modales.
    Je vois donc mal comment effectuer un click ou un double-click sur le userform.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    avec le mulot ;-)
    Le double-clic doit avoir lieu sur l'UF, c'est son événement qui est utilisé : Private Sub UserForm_DblClick()
    Fichiers attachés Fichiers attachés

  6. #6
    Membre confirmé
    Homme Profil pro
    Finance d'entreprise
    Inscrit en
    Juin 2016
    Messages
    184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Finance d'entreprise
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 184
    Par défaut
    Je vous remercie beaucoup pour vos réponses, même si j'avoue que j'ai un peu du mal à suivre. Je suis un débutant.

    Voici le passage délictueux:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Dim cl1 As Workbook  
            Dim cl2 As Workbook    
            Dim cl3 As Workbook     
            Dim clx As Variant      
            Dim d1 As Worksheet   
            Dim d2 As Worksheet    
            Dim d3 As Worksheet    
            Dim dx As Variant
            Dim ca As Variant
     
            clx = Array(cl1, cl2, cl3)
            dx = Array(d1, d2, d3)
            ca = Array(10, 20, 30, 40, 49, 50, 51, 52)
     
    For i = 1 To 3
     
            clx(i).Activate
        dx(i).Activate
        Range("B5").Activate
        'Oui, je sais, beaucoup d'Activate, c'est la honte, mais d'expérience, il y a des risques de bogues sans.
        'Je préfère en mettre trop au début et les enlever après en vérifiant s'ils sont nécessaires.
     
        Do While v < 5
        'L'idée, est de compter le nombre de cellules vides et de s'arrêter à 5, la colonne de données étant alors finie.
        'D'habitude, je cherche le rang de la dernière cellule non-vide, mais là, j'ai fait différemment.
     
        For j = 1 To UBound(ca)
        'J'aurais aimé placer ça sous Select Case, mais ça retournait une erreur de compilation. J'ai donc essayé comme ça
        'pour voir ce que ça donnait et c'est là que ça a planté.
     
            Select Case Left(ActiveCell.Value, 3)
     
            Case Is = ca(j) & " "
     
                MsgBox "TEXT1"
     
            Case Is = "   "
            'dans le cas où la cellule est vide, n'est-ce pas?
     
                ActiveCell.Offset(1).Activate
            v = v + 1
     
            Case Else
     
                MsgBox "text2"
     
            End Select
     
        Next
     
        Loop
     
    Next
    Citation Envoyé par parmi Voir le message
    Il me semble que Ctrl-Pause devrait arrêter le tout à moins qu'il n'y ait d'autres programmes ou actions impliqués autres qu'Excel qui roulent, comme une requête ADODB (ou DAO) ou quelque chose comme ça.
    Ou encore qu'Excel soit en mode de calcul.
    À mon sens, mon code n'implique pas d'autre application qu'Excel.
    Et je t'assure, si! si! Ctrl-Pause n'arrête pas la macro; ou alors c'est le clavier qui déboîte

    Citation Envoyé par parmi Voir le message
    Tu pourrais essayer d'intégrer un ou des DoEvents placés judicieusement dans ton code...
    Il s'agit de "rendre la main au système", c'est ça? Au-delà d'Excel, ma compréhension s'amenuise très vite

    Citation Envoyé par eriiic Voir le message
    Si les contrôles et le DoEvents proposés par parmi n'ont pas suffit tu pourrais faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ' dans module Standard
    Public b_stop As Boolean
    Public b_debog As Boolean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ' test dans la boucle à mettre où tu veux reprendre en pas à pas
    Sub test()
        b_debog = True
        Do
            UserForm1.Show
            '...
            If b_stop Then Stop: b_stop = False
           '...
        Loop
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'dans un des userform pénibles
    Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        If b_debog Then b_stop = True
    End Sub
    Un double-clic dans l'UF met un Stop
    eric
    Je ne comprends pas les parties en orange. Ne devrait-il pas y avoir un = True/False après une variable booléenne dans une condition?
    La notion de UserForm m'est aussi étrangère, mais c'est lié aux boîtes de dialogue, c'est ça?

    Citation Envoyé par unparia Voir le message
    Je rappelle que les boîtes de dialogue sont en principe modales.
    Je vois donc mal comment effectuer un click ou un double-click sur le userform.
    Modales? Enfin, peut-être que c'est juste pas mon niveau.

    Citation Envoyé par eriiic Voir le message
    avec le mulot ;-)
    Le double-clic doit avoir lieu sur l'UF, c'est son événement qui est utilisé : Private Sub UserForm_DblClick()
    Oui, en effet, le chinois est une très jolie langue.

    En ce qui concerne mon code, toutes les suggestions sont bienvenues (soyez toute de même cléments concernant les Activate).

    Et pour le risque de boucle infinie, un pas à pas au lieu d'une exécution ne devrait-il pas suffire?

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/11/2010, 07h34
  2. Problème avec boîte de dialogue
    Par mécano41 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/02/2008, 16h55
  3. Problème avec boîte de dialogue
    Par zorely dans le forum VBA Access
    Réponses: 1
    Dernier message: 06/02/2008, 12h55
  4. Boîte de dialogue avec checkbox
    Par Bouguennec dans le forum Delphi
    Réponses: 2
    Dernier message: 16/12/2006, 19h14
  5. boîte de dialogue avec image de fond + texte
    Par Eugénie dans le forum MFC
    Réponses: 13
    Dernier message: 31/08/2004, 13h32

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