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 :

Forcer fermeture classeur [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Apprenti Ingénieur MP
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Apprenti Ingénieur MP
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Forcer fermeture classeur
    Bonjour,
    J'ai été chargé de modifier 500 fichiers Excel à la suite, dans des dossiers différents.
    J'ai réussi à ouvrir tous les fichiers d'un dossier, et à les modifier. Le problème est que je ne peux pas les fermer!

    Pour l'ouverture, il fallait forcer la lecture seule (les fichiers sont enregistrés sous, dans un autre dossier) sans mettre à jour les liens, ce qui est bon.
    Mais pour la fermeture, il y a un code VBA qui est executé sur le classeur Excel qui doit être modifié, ce qui fait que je n'arrive pas à le fermer automatiquement:



    Je voulais savoir si il existait un code permettant de quitter un classeur sans rien sauvegarder, et surtout en passant outre ce petit code faisait apparaitre cette fenêtre.

    En vous remerciant,
    SeiaNec

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        'inhibe le déclenchement des macros évènementielles
        Application.EnableEvents = False
        Workbooks("xxx").Close False   'ferme sans enregistrer
        'rétablit le déclenchement des macros évènementielles
        Application.EnableEvents = True

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Apprenti Ingénieur MP
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Apprenti Ingénieur MP
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup ça marche impeccablement bien

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Merci du retour. Pense à marquer la discussion comme "résolue"; ça aide ceux qui cherchent dans les archives.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Apprenti Ingénieur MP
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Apprenti Ingénieur MP
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    Je me permet de revenir sur ce sujet, car il m'a été demandé autre chose: supprimer purement et simplement ces fenetres sur les 500 documents.

    Je suis en train d'essayer avec ton code mais je ne pense pas que ça ira car elle s'applique à l'application, et non au fichier!

    Aurais-tu une idée de comment procéder?

    Cordialement,
    SeiaNec

    edit: Ce qui donne ce code (qui me donne une erreur 400, je ne sais où...)
    Désolé, le code est très brouillon

    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
    Sub inhib_vba()
     
    Dim a As String
     
    'Ouverture de tous les fichiers du dossier, en lecture seule, sans mise à jour des liens
    a = DirOpen()
    ChDir a
    monfichier = Dir("*.*")
     
    While monfichier <> ""
        Workbooks.Open monfichier, UpdateLinks:=False, ReadOnly:=True
        'inhibe le déclenchement des macros évènementielles
        Application.EnableEvents = False
        Application.DisplayAlerts = False
        ActiveWorkbook.Save
        Application.DisplayAlerts = True
        ActiveWorkbook.Close False   'ferme sans enregistrer
        'rétablit le déclenchement des macros évènementielles
        Application.EnableEvents = True
     
        monfichier = Dir()
    Wend
     
    End Sub
     
    Function DirOpen() As String
    ' CHOIX D'UN DOSSIER PAR VBA
     
     
        Dim fd As FileDialog
        Set fd = Application.FileDialog(msoFileDialogFolderPicker)
        Dim vrtSelectedItem As Variant
        With fd
            If .Show = -1 Then
                For Each vrtSelectedItem In .SelectedItems
                    DirOpen = vrtSelectedItem
                Next vrtSelectedItem
            Else
                DirOpen = VbNulllString
            End If
        End With
        Set fd = Nothing
     
    End Function

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Je ne vois pas comment faire pour supprimer ces macros, à moins qu'elles n'aient le même nom, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Si elles pouvaient avoir le même nombre de lignes, ça serait encore mieux... mais pas indispensable.

    Pour le vérifier, elles se trouvent dans le module "ThisWorkbook".

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Apprenti Ingénieur MP
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Apprenti Ingénieur MP
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Techniquement, tous les fichiers sont générés par le même programme VBA à la base, donc ils devraient être identiques (sauf dans les informations présentes sur la feuille) d'un point de vue VBA.

    Ils contiennent ce code dans "ThisWorkbook":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If ThisWorkbook.Name <> "Vierge.xls" Then
    majlup
    End If
    End Sub

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub SupCode()
        With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
            For i = .CountOfLines To 1 Step -1
                .deletelines i
            Next i
        End With
    End Sub
    Tu dois cocher dans les options, Centre de gestion de la confidentialité, Paramètres du centre de gestion de la confidentialité, "Accès approuvé au modèle d'objet du projet VBA".

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Apprenti Ingénieur MP
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Apprenti Ingénieur MP
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci pour la réponse
    J'ai une dernière question qui me pose problème (et après promis j'arrête ^^).

    Je veux simplement sauvegarder le fichier Excel modifié, avant de le quitter.

    Sauf qu'il me dis que le fichier existe déja, et me demande si je veux l'écraser!
    J'ai essayé plusieurs méthodes, trouvées sur le net, et toutes ces méthodes font s'ouvrir une fenêtre "enregistrer sous" (par exemple ActiveWorkbook.Close True ou .Save True...) et je n'arrive pas cette action qui me parait pourtant simple!

    edit: j'ai même essayé la désactivation des alertes, en vain... (je me retrouve avec une erreur 400, alors que quand j'ai testé les autres formules, je n'ai pas cette erreur et tout boucle bien... sauf que évidemment je dois cliquer sur "Oui" à chaque fois...)

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Close True
    Pas de "SaveAs"

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Apprenti Ingénieur MP
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Apprenti Ingénieur MP
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci pour la réponse
    Cependant, j'avais déjà testé ces 2 solutions et elles ne conviennent pas.

    La 1ère renvoie ce message à chaque sauvegarde:


    La 2ème me renvoie ce message:


    Pourtant j'ai bien tapé ce que tu m'as donné juste avant
    Je suis là dessus depuis cet après midi (parmis d'autres affaires), mais je ne pensais pas me prendre autant la tête pour une sauvegarde :/

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Les classeurs sont ouverts en lecture seule ? Essaie de le faire manuellement. Sinon, publie ton code.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Apprenti Ingénieur MP
    Inscrit en
    Octobre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Apprenti Ingénieur MP
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Ah effectivement, j'ai réutilisé mon code initiale qui devait les ouvrir en lecture seule (qui n'est plus nécessaire maintenant) avec la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open monfichier, UpdateLinks:=False, ReadOnly:=True
    J'aurais pu chercher longtemps comment sauvegarder!

    Je test de suite

    edit: ça marche impeccablement bien merci beaucoup!
    J'ai trouvé mon nouveau dieu ^^

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

Discussions similaires

  1. [Toutes versions] [VBA]forcer fermeture d'un classeur.
    Par mattdogg97 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/05/2011, 10h33
  2. [PHP-JS] Forcer fermeture fenêtre php
    Par calitom dans le forum Langage
    Réponses: 4
    Dernier message: 02/07/2010, 22h53
  3. VBa project fantome apres fermeture Classeur
    Par vanima dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/12/2008, 10h04
  4. [Forms 6i & OeBS] F4 : forcer fermeture fenêtre.
    Par macben dans le forum Forms
    Réponses: 1
    Dernier message: 05/02/2008, 16h04
  5. [VBA-E]Problème de sauvegarde et de fermeture classeur
    Par teaRz dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/05/2006, 10h29

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