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 :

problème lors de la fermeture du classeur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut problème lors de la fermeture du classeur
    Rebonjour,

    J'ai un soucis pour fermer mon classeur. J'ai trouvé un code et j'essaye en vain depuis 5 jours de le mettre en marche.

    J'ai des pistes pour résoudre mais je n'y arrive pas.

    Mon code me permet de fermer mon classeur excel par le biais d'un bouton.
    On doit avant de fermer le fichier, cacher en xlveryhidden toutes les feuilles sauf la feuille "starting notice" et ensuite enregistrer.

    Problème c'est que rien ne s'enregistre et mes feuilles restent affichées.
    J'ai une macro hidesheets ('permet de gerer l'etat visible des feuilles'), qui se trouvent après "ThisWorkbook.Close".

    Lorsque je mets "hidesheets" avant "ThisWorkbook.Close" ça marche.
    Lorsque je mets "hidesheets" après "ThisWorkbook.Close" ça marche pas.

    Alors je suspect le "ThisWorkbook.Close".

    code qui permet de gérer le bouton pour sortir du fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Rectangle1_QuandClic()
        ClosingThisFile
    End Sub
    code qui fermer le classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub ClosingThisFile()
        MyFileIsOpen = False
        ThisWorkbook.Close
    End Sub
    code sur l'evenement Workbook_BeforeClose
    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
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
            'une partie de ce qui suit ne sert qu'a gerer le passage IsAddin = True de ce fichier si
            'l'utilisateur veut sauver avant de fermer
            'Pour cela on vas substituer au message d'excel notre propre message ce qui
            'permet de gerer le cas du bouton cancel
     
     
            If MyFileIsOpen = True Then Exit Sub
            Dim Reponse As VbMsgBoxResult
            If ThisWorkbook.Saved = True Then
                'retour a la normale
                Defaut
                'on vide la classe
                Call XlAppli.EmptyClass
            Else
                Cancel = True
                'ici notre message perso:
                On Error Resume Next
                Reponse = MsgBox("Voulez-vous sauver les modifications effectuées dans '" & ActiveWorkbook.Name & "' ? ", vbExclamation + vbYesNoCancel)
                Select Case Reponse
                    Case vbYes 'l'utilisateur veut sauver avant de fermer le fichier
                        HideSheets
                        Application.EnableEvents = False 'pour eviter de passer par l'evenement Workbook_BeforeSave
                        ThisWorkbook.IsAddin = True
                        ThisWorkbook.Save
                        ThisWorkbook.Saved = True
                        Application.EnableEvents = True
                        Application.DisplayAlerts = True
                        Application.ScreenUpdating = True
                        Cancel = False
                    Case vbNo 'l'utilisateur ne veut pas sauver. Pour cela:
                        'retour a la normale
                        Defaut
                        'on vide la classe
                        Call XlAppli.EmptyClass
                        'on laisse croire excel que le fichier a été sauvé
                        ThisWorkbook.Saved = True
                        'on autorise la fermeture
                        Cancel = False
                End Select
            ' si cancel rien ne ce passe
            End If
    End Sub

    Code pour masquer feuilles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub HideSheets()
        'Cache toute les feuilles a l'exception de la feuille starting notice
        'j'ai laissé cette option qui fonctionne si ce fichier n'est pas enregistré avec
        'l'option IsAddin a vrai. Dans le cas contraire cela ne sert a rien
        Dim MySheet As Worksheet
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        If Sheets("starting notice").Visible = xlVeryHidden Then Sheets("starting notice").Visible = True
        For Each MySheet In ThisWorkbook.Worksheets
            If Not MySheet.Name = "starting notice" Then
                MySheet.Visible = xlVeryHidden
            End If
        Next
    End SubEnd Sub
    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par adrienoob Voir le message
    Lorsque je mets "hidesheets" avant "ThisWorkbook.Close" ça marche.
    Lorsque je mets "hidesheets" après "ThisWorkbook.Close" ça marche pas.
    Bin oui forcément, plus rien ne pourrait s'exécuter après ThisWorkbook.Close" puisque le classeur est fermé...

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Yes un modérateur


    Ben quand je met la macro en pas à pas elle passe bien par toutes les étapes.

    elle passe d'abord par Sub Rectangle1_QuandClic() puis par Sub ClosingThisFile() et ensuite Private Sub Workbook_BeforeClose(Cancel As Boolean).

    Donc elle passe bien par Workbook_BeforeClose(Cancel As Boolean) donc par l'action "hidesheets".

    Sinon tu serais comment je peux me débrouiller pour que je ferme mon fichier en gérant moi même la fermeture avec la gestion de l'enregistrement?

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    A première vue, je ne vois rien de particulier dans ton code qui ferait en sorte que ça ne fonctionne pas. Par contre je ne comprend pas le but, tu cherches à obtenir quoi ? Que l'utilisateur ne peut pas fermer le classeur sans l'enregistrer ?

  5. #5
    Membre habitué
    Inscrit en
    Octobre 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 10
    Par défaut
    Bonjour,

    Ben en fait je cherche à gérer la sécurité de mon classeur.

    Je veux que lorsque mon classeur est ouvert avec les macro activé je ne puisse pas rentrer dans le code VBA et gerer la sortie de l'application.
    Puis je veux que quand l'utilisateur ouvre le fichier avec les macros désactivées qu'il n'ai accès à rien.

    C'est possible

  6. #6
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par adrienoob Voir le message
    Je veux que lorsque mon classeur est ouvert avec les macro activé je ne puisse pas rentrer dans le code VBA
    Pour ça il suffit de mettre un code de protection à ton projet VBA tout en gardant à l'esprit qu'aucune sécurité n'est incontournable.

    Citation Envoyé par adrienoob Voir le message
    Puis je veux que quand l'utilisateur ouvre le fichier avec les macros désactivées qu'il n'ai accès à rien.
    Là tu es sur la bonne piste
    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 Workbook_BeforeClose(Cancel As Boolean)
    Dim i As Integer
    Sheets("starting notice").Visible = True
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "starting notice" Then Sheets(i).Visible = xlVeryHidden
    Next
    ThisWorkbook.Save
    End Sub
     
    Private Sub Workbook_Open()
    Dim i As Integer
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "starting notice" Then Sheets(i).Visible = True
    Next
    Sheets("starting notice").Visible = xlVeryHidden
    End Sub
    Le problème est que tu es obligé de sauvegarder le fichier à sa fermeture pour garder les feuilles masquées lors de la réouverture avec les macros désactivées ce qui peut être gênant dans le cas où par exemple tu constates que tu as fait une boulette et que tu veux fermer le classeur sans enregistrer les modifications.

Discussions similaires

  1. Problème lors de la fermeture de Windows media player
    Par acacia dans le forum Windows XP
    Réponses: 4
    Dernier message: 01/07/2009, 15h27
  2. Problème lors de la fermeture automatique d'excel
    Par tasse2the dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/04/2009, 07h22
  3. Problème lors de la fermeture du programme
    Par popo dans le forum Langage
    Réponses: 5
    Dernier message: 27/10/2008, 13h09
  4. Problème lors de l'enregistrement du classeur
    Par moilou2 dans le forum Excel
    Réponses: 3
    Dernier message: 07/10/2008, 14h14
  5. Problème lors de la fermeture de mon MsRdpClient
    Par seb.49 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/01/2008, 08h47

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