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 :

[VBA-E2003] Empecher quitter feuille ou fichier ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut [VBA-E2003] Empecher quitter feuille ou fichier ?
    Arf, c encore moi avec toutes mes questions désolé.

    Je voudrais savoir comment emecher de changer de feuille tant que la case A1 par exemple n'est pas egale a 100. Idem pour fermer le fichier.

    Pour la feuille le seul evenement que j ai trouvé qui pourrait coller c Desactivate, mais celui ci se produit une foi qu on l'a quitté. Donc pas bon.

    Et pour la fermeture du fichier, j ai pensé a Before_close pour le workbook, mais je ne c pas comment empecher la fermeture. Je peux lui faire afficher un message mais pas stoper la fermeture.

    Merci de m eclairer.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par Tu
    Arf, c encore moi avec toutes mes questions désolé
    Ne sois pas désolé, on adore se creuser les méninges
    Et comme d'autres, je suis curieux d'apprendre, alors je vais voir si ce que tu dis est vrai

    A+

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    un code à mettre dans "thisworkbook"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
     If ThisWorkbook.Sheets(1).Range("A1") <> 100 Then
        Cancel = True
        MsgBox "Sortie impossible ", vbCritical
     End If
    End Sub

  4. #4
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Si tu as trouvé où donner du code à la fermeture : le coup du Sepeur Camembert (un vieil ami) : réouverture si condition pas remplie !

  5. #5
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    lol j adore ce genre de solution :
    réouverture si condition pas remplie Laughing !
    ^^ c bien vicieux ^^

    Mais effectivement le test sur le booleen est parfait. (A vrai dire j ai fait mon boulet car automatiquement quand on crée cette sub il nous cré la variable booleene CANCEL, j aurais la voir désolé. )

    Par contre, pour la feuille, je ne c pas comment faire mis a part le coup de si pas egal a 100 je la reselectionne.

    J ai pas compris ta solution ouskel'n'or

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Slumpy
    Par contre, pour la feuille, je ne c pas comment faire mis a part le coup de si pas egal a 100 je la reselectionne.
    ? et cela ne te va pas ...? ... du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Deactivate()
    If ThisWorkbook.Sheets(1).Range("A1") <> 100 Then
     
        MsgBox "Sortie impossible ", vbCritical
        ThisWorkbook.Sheets(1).Activate
     End If
     
    End Sub
    à placer dans la feuille concernée...

  7. #7
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    ? et cela ne te va pas ...? ... du genre :

    Code:
    Private Sub Worksheet_Deactivate()
    If ThisWorkbook.Sheets(1).Range("A1") <> 100 Then

    MsgBox "Sortie impossible ", vbCritical
    ThisWorkbook.Sheets(1).Activate
    End If

    End Sub
    SI si, je chipote la. C'est juste que visuellement et pedagogiquement c'est pas top, car on quite la feuille, donc on en voit une autre, on a le message d'erreur sur cette deuxieme feuille, et l'on revient sur la feuille ou est l erreur. C'etait juste pour savoir si l'on peut eviter ce va et vient.

    Ha merde, je realise un truc la, suffit d intervertir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MsgBox "Sortie impossible ", vbCritical
        ThisWorkbook.Sheets(1).Activate
    surement

    [EDIT : Ha non ca ne marche pas d intervertir car du coup on est plus entrain de quitter puisqu on la reactive ]

    ouskel'n'or, dans ton code ce que je comprends pas c ca :

  8. #8
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Ha oki, cette variable est donc le nom de la feuille que l on quitte ^^.C bon a savoir ca, merci.

    Pas d idee pour eviter de voir apparaitre la deuxieme feuille ?

  9. #9
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Essaie avec application.screenupdating = false à la première ligne de la sub
    Tu remets à true à la dernière ligne

    Pas testé mais tu veux bien le faire pour nous Wink

    A+

    Testé, pour moi c'est ok

    Code:
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    Application.ScreenUpdating = False
    If ThisWorkbook.Sheets(1).Range("A1") <> 100 Then
    NomFeuilOùRester = "Feuil1" 'uniquement pour indiquer le nom de la feuille si nécessaire
    Worksheets(NomFeuilOùRester).Select
    End If
    Application.ScreenUpdating = True
    End Sub

    Arf, je viens de tester et ca ne marche pas chez moi. Enfin c'est tjs pareil quoi, ca me change de feuille avant de m'afficher le message d'erreur

  10. #10
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Roo je suis vraiement un boulet, je comprends pas ce que tu me racontes a propos du nom de la feuille

    Mon code (que j ai bien mis dans Workbook est exactement ca :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    Application.ScreenUpdating = False
    If ThisWorkbook.Sheets(SHEET_WorkingStation).Range("AC2") <> 100 Then
            MsgBox "Attention 100 % ? ", vbCritical
            ' NomFeuilOùRester = "Feuil1" 'uniquement pour indiquer le nom de la feuille si nécessaire
             ThisWorkbook.Sheets(SHEET_WorkingStation).Select
        End If
        Application.ScreenUpdating = True
    End Sub
    Avec ca j ai le message sur la deuxieme feuille avant de revenir automatiquement sur la feuille Working Station. (D ailleurs me faut cliquer 2 fois sur ok pour revenir sur la feuille bizarre.
    EDIT : Ha oui j ai deux fois le message car je quitte ma feuille Working station, et qu apres je quitte du coup la nouvelle feuille

    (Ptite question en plus, quelle est la difference entre .select et .activate ?)

  11. #11
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Bijour,

    merci pour ta patience et ton aide ouskel'n'or.

    Effectivement, si je fais comme tu dis , je n ai plus qu un seul message.

    Je comprends ton code excepté pour ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ok = SHEET_WorkingStation = Sh.name
    c'est equivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if Sh.name = SHEET_WorkingStation then ok = true
    C'est ca ?

    Par contre, tjs pareil il me quitte la feuille pour m'afficher le message puis reviens sur la feuille quand on a cliqué sur la MsgBox.
    N'y aurait il pas un moyen d'eviter ca ?
    Par exemple en bloquant l'evenement _Desactivate tant que AC2<>100 ?


    Pour mon autre question sur activate et select ct pour avoir la confirmation que j avais bien compris qu'il n y avait pas de difference pour les worksheet 8) . Merci

  12. #12
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par ouskel'n'or
    Je réponds à ton autre question : La différence entre select et activate
    Pour Worksheet, aucun différence.
    Pas totalement vrai.

    On peut sélectionner plusieurs Feuilles et en activer une.

    Par exemple, c'est ce qu'on fait quand on veut modifier toutes les cellules [A1] de toutes les feuilles en une seule opération.

  13. #13
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par Slumpy
    Ha merde, je realise un truc la, suffit d intervertir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MsgBox "Sortie impossible ", vbCritical
        ThisWorkbook.Sheets(1).Activate
    surement

    [EDIT : Ha non ca ne marche pas d intervertir car du coup on est plus entrain de quitter puisqu on la reactive ]
    .... pourquoi dit tu que l'intervertion ne marche pas ?

  14. #14
    Membre régulier
    Inscrit en
    Mars 2006
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 342
    Points : 107
    Points
    107
    Par défaut
    Ouullaaa, je dois commencer a fatiguer moi ...

    Merci bcp c'est parfait

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

Discussions similaires

  1. [VBA-E] empecher femrture excel et feuille
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/01/2007, 10h16
  2. [VBA-Excel]Empecher l'insertion d'une feuille par le clic droit
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 17/09/2006, 11h10
  3. [VBA - E2003] Ecrire dans une feuille deplacement ?
    Par Slumpy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/04/2006, 19h19
  4. [VBA-E2003] COmment fixer quelle feuille va s'ouvrir
    Par Slumpy dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/04/2006, 13h25
  5. [VBA] exportation vers une feuille précise d'un fichier xls
    Par Christophe93250 dans le forum Access
    Réponses: 2
    Dernier message: 10/01/2006, 15h36

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