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 :

Fermer un classeur Excel par vbs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Stagiaire vba
    Inscrit en
    Mai 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Stagiaire vba

    Informations forums :
    Inscription : Mai 2020
    Messages : 27
    Par défaut Fermer un classeur Excel par vbs
    Bonjour,

    J'aimerai savoir si il y a un moyen de fermer par vbs un classeur Excel en particulier, par son nom par exemple.
    J'ai un gros projet lancé par un fichier vbs qui lorsqu'une erreur intervient, laisse mon classeur en arrière plan.

    A priori, aucunes erreurs ne devrait apparaître puisqu'elles sont redirigées et écrites dans un rapport, mais si jamais une erreur apparaît lors de l'utilisation de outlook, là je ne peux pas l'attraper et mon processus se stop, laissant le classeur en fond.

    C'est pourquoi je voudrait fermer toute instance de mon classeur si il en existe avant de le réouvrir pour exécuter mes procédures, sans fermer l'application Excel.

    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Stagiaire vba
    Inscrit en
    Mai 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Stagiaire vba

    Informations forums :
    Inscription : Mai 2020
    Messages : 27
    Par défaut
    J'ai déjà essayé quelque chose de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim AppExcel
    Set AppExcel = CreateObject("Excel.Application")
     
    AppExcel.Workbooks("ListeClient.xlsm").Close true
    mais j'ai une erreur disant
    Indice en dehors de la plage
    Lors du close

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Airahn Voir le message
    J'ai déjà essayé quelque chose de la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim AppExcel
    Set AppExcel = CreateObject("Excel.Application")
     
    AppExcel.Workbooks("ListeClient.xlsm").Close true
    mais j'ai une erreur disant Lors du close
    Il est possible que la nouvelle cession d'Excel que tu crées dans cette macro ne voit pas les documents ouverts par la cession déjà ouverte.
    Essaye ça (sans mettre le CreateObject) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Excel.Workbooks("ListeClient.xlsm").Close true
    Pour que ça fonctionne, il faut que la bibliothèque d'objects Excel soit chargée.

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Ou, peut-être, utiliser une variable pour le classeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim AppExcel, oWbk 
     
    Set AppExcel = CreateObject("Excel.Application")
    Set oWbk = AppExcel.Workbooks.Open("C:\Chemin complet\Fichier.xlsx")
    AppExcel.Visible = True
     
    oWbk.Close
    Set oWbk = Nothing

  5. #5
    Membre averti
    Homme Profil pro
    Stagiaire vba
    Inscrit en
    Mai 2020
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Stagiaire vba

    Informations forums :
    Inscription : Mai 2020
    Messages : 27
    Par défaut
    Menhir:

    Hum excuse moi, que veux tu dire par
    il faut que la bibliothèque d'objects Excel soit chargée.

    Pijaku:

    Le problème c'est que je ne veux pas ouvrir puis fermer un classeur, ça je le fais déjà, mais fermer une instance existante de mon classeur qui serait en tache de fond

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Airahn Voir le message
    Hum excuse moi, que veux tu dire par
    il faut que la bibliothèque d'objects Excel soit chargée.
    Je ne connais pas VBS mais dans VBA, lorsqu'on veut manipuler des objets d'autres applications, il faut indiquer dans les références les bibliothèques d'objet de ces applications.
    Je suppose que dans VBS, il doit y avoir un équivalent.

    Cela dit, si tu manipules déjà des objets Excel dans d'autres modules, c'est que sa bibliothèque est chargée.

  7. #7
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Oui.
    Ecrire AppExcel.Workbooks("ListeClient.xlsm").Close true sous-entends que ton classeur a été ouvert dans l'instance Excel AppExcel.
    Or ce n'est pas le cas...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("Classeur1.xlsm").Close

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Bonjour,
    Accessoirement ça pourrait être ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set AppExcel = GetObject(,"Excel.Application")
     
    AppExcel.Workbooks("ListeClient.xlsm").Close
    Mais le problème, je pense, vient d'une mauvaise gestion des erreurs dans ton VBS!

  9. #9
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Hello,

    Perso je ferais ainsi
    Je viens de tester de mon côté, je parviens à fermer un classeur excel actif, via le code ci-dessous.

    À voir maintient comment récupérer ton erreur pour appeler ce script.

    Source : https://www.tek-tips.com/viewthread.cfm?qid=1535467
    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
     
     
    strName = "test.xls"
    strPath = "C:\" 'attention à bien finir le path par \
    strFilePath = strPath & strName
    wscript.echo "Name and path of Excel file to find and close: " & strFilePath
     
    Set objExcel = GetObject(strFilePath).Application 'Use this syntax for multiple instances of Excel.
     
    If (not objExcel.ActiveWorkbook is nothing) then
        wscript.echo "ActiveWorkbook is: " & objExcel.ActiveWorkbook.Name
            If objExcel.ActiveWorkbook.name = strName then
                wscript.echo "Closing Workbook " & strName 
                objExcel.ActiveWorkbook.Saved = True
                objExcel.ActiveWorkbook.Close        
            End if
        Else
            wscript.echo "Open Workbook " & strName & " Not Found"
    End if
     
    set objExcel=nothing
    'https://www.tek-tips.com/viewthread.cfm?qid=1535467

  10. #10
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Sans oublier de citer ces sources : https://www.tek-tips.com/viewthread.cfm?qid=1535467

  11. #11
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour Franck,

    Je n'ai jms dit que le code venais de moi, et ne savais que d'autre sources que ce forum pouvait être indiquée
    Correction faite dans mon post précédent.

Discussions similaires

  1. VBA - agregger 1 classeur excel par ligne
    Par cassedu dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/10/2009, 11h48
  2. Fermer un classeur Excel à la fin d'une macro
    Par alex830001 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/06/2008, 19h29
  3. [OLE Excel] Fermer un classeur Excel
    Par Shuret dans le forum C++
    Réponses: 1
    Dernier message: 26/05/2008, 10h09
  4. Fermer le classeur Excel BD pour la fusion word
    Par sailor lvcv dans le forum VBA Word
    Réponses: 4
    Dernier message: 28/03/2007, 16h29
  5. Fermer les classeurs excel sauf celui actif
    Par Balian1412 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/10/2006, 10h35

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