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 :

Worksheet "before" Deactivate


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 137
    Par défaut Worksheet "before" Deactivate
    Bonjour,
    je veux faire un test avant de quitter un onglet (vérifier des erreurs). L'utilisateur peut choisir de quitter malgré tout la feuille. J'ai tenté le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Deactivate()
        Dim c As Range
        NomFeuille = ActiveSheet.Name
        Sheets("Présentation").Activate
        For Each c In Range("A5:b50")
            If c.DisplayFormat.Interior.ColorIndex = 3 Then
                Oncontinue = MsgBox("Il semble qu'il y ait une (des) erreur(s) sur la feuille..." & Chr(10) & _
                "Désirez-vous continuer malgré tout ?", vbYesNo + vbExclamation, "Attention")
                Exit For
            End If
        Next
        If Oncontinue = vbYes Then Sheets(NomFeuille).Activate
    End Sub
    Ça fait à peu près ce que je demande sauf que bien évidemment la macro se relance avec Sheets(NomFeuille).Activate

    Comment faire pour la bloquer ?

    Bonne journée et prenez soin de vous

    SB

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 137
    Par défaut Trop bête !
    En fait je fais l'inverse : je sors et j'y retourne si je ne veux pas sortir :
    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
    Private Sub Worksheet_Deactivate()
        Dim c As Range
     
        For Each c In Range("Présentation!A5:b50")
     
            If c.DisplayFormat.Interior.ColorIndex = 3 Then
                Oncontinue = MsgBox("Il semble qu'il y ait une (des) erreur(s) sur la feuille..." & Chr(10) & _
                    "Désirez-vous continuer malgré tout ?", vbYesNo + vbExclamation, "Attention")
                Exit For
            End If
     
        Next
     
        If Oncontinue = vbNo Then Sheets("Présentation").Activate
     
    End Sub
    Merci
    SB

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Perso, je me passerais de l'EXIT qui pour moi est à bannir, et j'utiliserais plutôt DO WHILE pour stopper la boucle dès que la réponse a été fournie.

    DO WHILE <> FOR NEXT. Il convient à mon avis de bien faire la différence entre les deux et de les utiliser bon escient.

    FOR...NEXT dit explicitement le nombre de boucles ou sur quelle collection on boucle (en bouclant sur TOUS les éléments) et dès lors je ne comprends même pas comment les concepteurs du langage ont pu prévoir un EXIT FOR alors que DO WHILE prévoit une condition de sortie et donc prévoir qu'il y a des chances que l'on ne boucle pas sur tous les éléments. Et comme on peut donner la condition de sortie dès l'entrée de la boucle, je ne comprends pas non plus l'utilité de EXIT DO.

    D'une façon générale, je ne comprends pas l'utilité de EXIT (Sub, Function, DO, FOR...) dans une programmation correctement structurée
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 137
    Par défaut
    Suis entièrement d'accord pour Do WHILE, mais pas encore le réflex... et surtout pas suffisamment expert pour commenter le reste...


    Une question quand même comment balayer une plage avec DO WHILE ?
    Question supplémentaire et sans rapport pourquoi SpecialCells(xlLastCell) ne fonctionne pas sur une Feuille protégée ?
    Merci,
    SB

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Voilà comment j'écrirais du code si je souhaitais trouver la première ligne de Art 19 dans un tableau(1) en utilisant plutôt un Do While qu'un For Next avec un Exit. J'aime bien, lorsque je lis du code, comprendre l'intention du programmeur, et l'intention n'est pas la même lorsque l'on utiliser For plutôt que DO...

    Nom : 2021-03-17_113921.png
Affichages : 327
Taille : 126,5 Ko


    (1) Dans ce cas précis, j'utiliserais une autre méthode, c'est juste pour illustrer le propos d'un Do While plutôt qu'un For Next lorsqu'il y a suspicion d'une sortie prématurée de boucle.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 137
    Par défaut
    Ouaip, mais dans mon exemple je suis en 2 dimensions, donc il faudrait imbriquer 2 boucles ou il y aurait une autre solution ?
    SB

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Ma remarque vaut pour l'idée qu'elle défend le fait d'utiliser la bonne syntaxe et donc la bonne boucle. A partir du moment où le test peut être exprimé à l'intérieur de la boucle, il n'y a pas besoin de seconde boucle.

    Ce que je veux dire, c'est que FOR...NEXT induit l'idée qu'on va boucler sur toutes les lignes, tous les éléments de la collection, de X à Y sans sortie prématurée, et que DO exprime, dès l'entrée de jeu, qu'il y a une condition de sortie.

    Après, c'est au cas par cas, mais toujours sans EXIT qui est vraiment à proscrire car il crée deux sorties (de boucle, de procédure, de fonction) et que cela peut générer des plantages de code ou des dysfonctionnements "discrets" que l'on ne remarquera que plus tard...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. ASE [15.0.3/EBF 16551 ESD#] Unclosed quote before+Job scheduler
    Par dngaya dans le forum Adaptive Server Enterprise
    Réponses: 0
    Dernier message: 08/01/2010, 10h24
  2. Quote dans une requete...
    Par Isildur dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/06/2006, 10h57
  3. VARCHAR contenant une quote '
    Par tonyskn dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/05/2003, 19h21
  4. Quotes dans TFilenameEdit (RXLib)
    Par AnnSo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/01/2003, 20h26

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