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 :

[E-03] Before Close conditionnel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Par défaut [E-03] Before Close conditionnel
    Je travaille dans un fichier Excel 2003.
    J'avais mis dans ThisWoorbook une macro BeforeClose qui devait recopier avant fermeture les valeurs de certaines cellules de l'une des feuilles appelée Barème, dans d'autres cellules de la même feuille.

    Ca marchait parfaitement.
    Malheureusement mon projet s'est complexifié, et dans une des Sub, il ouvre un autre fichier, y travaille et le ferme.

    Et là, BeforeClose plante car il fonctionne sur tous les fichiers à fermer, et le second n'a pas de feuille Barème. d'où, à la fermeture du second fichier : plantage = n'appartient pas à la sélection.

    Est-il possible de dire dans le BeforeClose d'agir sur la feuille Barème si elle existe ? Existe-t-il une synthaxe de ce type ?

    Meric de vos réponses

  2. #2
    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
    Bonsoir

    Il existe bien un événement d'application Private Sub App_WorkbookBeforeClose qui joue sur chaque classeur qui va être fermé, mais il nécessite un objet Application valide.

    L'événement BeforeClose est un événement de classeur, donc il n'agit que sur le classeur qui le gère. A mon avis, ton problème est ailleurs. Pourrais-tu donner un bout de code?
    "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...
    ---------------

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Par défaut Réponse
    J'avais utilisé Private Sub Workbook_BeforeClose et non Private Sub App_WorkbookBeforeClose Peut-être est ça l'erreur ?
    J'avais écrit dans This Workbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
            Call copiferm
    End Sub
    et dans un module
    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
    Sub copiferm()
     
    ActiveWorkbook.Unprotect Password:="truc06"
    Sheets("Barème").Visible = True
    Sheets("Barème").Select
    ActiveSheet.Unprotect Password:="truc06"
            Range("Z11:AA20").Select
            Selection.Copy
            Range("H6:I15").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
            Application.CutCopyMode = False 
    ActiveSheet.Protect Password:="truc06", DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveSheet.Visible = False
    ActiveWorkbook.Protect Password:="truc06", Structure:=True, Windows:=False      
    End Sub
    Et en cours d'éxécution la macro s'arrête sur l'instruction Sheets("Barème").Select Erreur = n'appartient pas à la sélection.
    Ce que je vois à l'écran est une feuille d'un fichier créé, modifié et fermé par une autre macro du même projet, et qui ne comporte effectivement pas de feuille appelée Barème.
    Vois-tu ce qui cloche ?

  4. #4
    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
    Tu avais utilisé le bon événement. C'est la procédure appelée par la suite qui pose problème, car ThisWorkbook <> ActiveWorkbook!!

    Si tu veux, via l'événement BeforeClose, travailler dans le classeur qui va être fermé, je te conseille de travailler à l'intérieur de la procédure événementielle, avec ce code, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Me.Unprotect Password:="truc06"
        Sheets("Barème").Unprotect Password:="truc06"
        Range("z11:aa20").Copy
        Range("h6:h15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
        Sheets("Barème").Protect Password:="truc06", DrawingObjects:=True, Contents:=True, Scenarios:=True
        Me.Protect Password:="truc06", Structure:=True, Windows:=False
    End Sub
    Reviens pour plus d'infos ou si j'avais mal compris la question
    "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...
    ---------------

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    J'ajoute une petite précision:
    ThisWorkbook: classeur contenant le code écrit
    ActiveWorkbook: classeur qui a le focus dans Excel

    La plupart du temps, c'est le même classeur, mais ça ne l'est pas toujours.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 39
    Par défaut Question à Decondelite
    Si ce n'est pas le cas, quelle est la parade ?

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

Discussions similaires

  1. [WD-2010] Document before close
    Par JayGr dans le forum VBA Word
    Réponses: 2
    Dernier message: 07/01/2015, 09h31
  2. [PR-2010] Macro VBA pour autopublish before close
    Par outdoordad dans le forum VBA Project
    Réponses: 0
    Dernier message: 07/10/2014, 18h52
  3. [XL-2003] Workbooks_Open before close et workbooks.close
    Par david_atx dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 21/08/2009, 10h07
  4. gérer le before close en fichier js extern
    Par avogadro dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/09/2007, 07h51
  5. [C#]Save changes before closing
    Par BoOom dans le forum Windows Forms
    Réponses: 9
    Dernier message: 07/04/2006, 14h47

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