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

IHM Discussion :

Vba excel workbook worksheet fermeture excel


Sujet :

IHM

  1. #1
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 76
    Points : 55
    Points
    55
    Par défaut Vba excel workbook worksheet fermeture excel
    Bonjour à tous

    Je cherche la solution pour fermé excel après suppression de worksheets.

    Avec le code ci-après, j'ouvre un fichier excel, je supprime tous les onglets sauf un et ajoute une ligne entete en la fixant. Je le ferme et j'essaye de le sauvegarder et de quitter excel

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Sub FormatExtraitSap()
    On Error Resume Next
        Dim filePath As String
        Dim AppExcel As Object 'Excel.Application
        Dim Classeur As Object 'Excel.Workbook
        Dim ws As Excel.Worksheet
        Dim r As Range
     
        'important d'avoir le nom du fichier !!
        filePath = CurrentProject.Path & "\MonRep\MonFichier.xlsx"
        'lier vers l'înstance excel existante
        Set AppExcel = GetObject(, "Excel.Application")
     
        If Err.Number <> 0 Then
            'Ne peut pas avoir une instance d'excel, donc création d'une nouvelle
            Err.Clear
            On Error GoTo FormatExtraitSap_Error
            Set AppExcel = CreateObject("EXCEL.APPLICATION")
        Else
            On Error GoTo FormatExtraitSap_Error
        End If
     
        'ouverture du fichier précis donné par le chemin filePath
        Set Classeur = AppExcel.Workbooks.Open(filePath)
     
        'MsgBox AppExcel.Worksheets.Count
     
        AppExcel.DisplayAlerts = False
        For Each ws In Classeur.Worksheets
            If ws.Name <> "RawData" Then ws.Delete
        Next
        AppExcel.DisplayAlerts = True
     
        'renommage des entêtes
        AppExcel.Range("A1") = "strNumOrdreSap"
        AppExcel.Range("B1") = "strNomOrdreSap"
        AppExcel.Range("C1") = "lngV0Sap"
        AppExcel.Range("D1") = "lngV1Sap"
        AppExcel.Range("E1") = "lngReelN"
        AppExcel.Range("F1") = "lngReelCumule"
        AppExcel.Range("G1") = "lngEngagementN"
        AppExcel.Range("H1") = "lngEngagementCumule"
        AppExcel.Range("A2").Select
            With AppExcel.ActiveWindow
                .FreezePanes = False
                .ScrollRow = 1
                .ScrollColumn = 1
                .FreezePanes = True
                .ScrollRow = r.Row
            End With
        ActiveWindow.FreezePanes = True
     
        'AppExcel.Workbooks(filePath).Close SaveChanges:=True
        'Classeur.Close saveChanges:=True
        Classeur.SaveAs CurrentProject.Path & "\MonRep\" & "Test" & Format(Date, "ddmmyyyy") & ".xlsx"
        AppExcel.Quit
     
       ' xls.Workbooks(filePath).Close True
        'xls.workbooks.Close filePath true
        Set ws = Nothing
        Set Classeur = Nothing
        Set AppExcel = Nothing
    FormatExtraitSap_Error:
        If Err.Number = 9 Then
            'Worksheet pas trouvé
            MsgBox "Worksheet pas trouvé dans le WorkBook", vbCritical
            Exit Sub
        End If
    End Sub
    Mais excel ne quitte pas et donc mon fichier est toujours occupé. Je ne peux l'utiliser ailleurs dans mon projet mais pas le déplacer.
    Merci pour votre aide
    @++

  2. #2
    Membre éclairé
    Avatar de Didier L
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2004
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 503
    Points : 806
    Points
    806
    Par défaut
    Bonjour,

    Le problème avec la syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AppExcel.Workbooks(filePath).Close SaveChanges:=True
    C'est qu'a la place du filepath complet, il ne faut mettre que le nom du fichier (celui qui apparaît dans la barre titre d'excel).
    Mais selon la configuration des poste, parfois il faut mettre le ".xlsx" et parfois pas

    Pour ma part j'aurais pensé aussi que cette syntaxe marche ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Classeur.Close saveChanges:=True
    Le SaveAs enregistre et/ou fait une copie mais ne ferme pas le fichier Excel!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Classeur.SaveAs CurrentProject.Path & "\MonRep\" & "Test" & Format(Date, "ddmmyyyy") & ".xlsx"
    En revanche pour quitter l'application j'utilise la syntaxe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AppExcel.Application.Quit
    Mais normalement les deux fonctionnent très bien.

    En revanche je conseillerai vivement de conserver la déclaration suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim AppExcel As Excel.Application
    Et préfère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set AppExcel = CreateObject("Excel.Application")
    à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set AppExcel = GetObject(, "Excel.Application")
    Bon courage
    @+


    Pensez au tag

  3. #3
    Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Septembre 2013
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 76
    Points : 55
    Points
    55
    Par défaut
    Merci pour ta réponse.

    Ci-dessous du code qui fonctionne pour ceux qui seraient sur le même problème ;-)

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    Sub FormatExtraitSap()
    On Error Resume Next
        Dim filePath As String
        Dim AppExcel As Object 'Excel.Application
        Dim Classeur As Object 'Excel.Workbook
        Dim ws As Excel.Worksheet
        Dim r As Range
        'important d'avoir le nom du fichier !!
        filePath = CurrentProject.Path & "\MonRep\MonFichier.xls"
        'lier vers l'înstance excel existante
        Set AppExcel = GetObject(, "Excel.Application")
     
        If Err.Number <> 0 Then
            'Ne peut pas avoir une instance d'excel, donc création d'une nouvelle
            Err.Clear
            On Error GoTo FormatExtraitSap_Error
            Set AppExcel = CreateObject("EXCEL.APPLICATION")
        Else
            On Error GoTo FormatExtraitSap_Error
        End If
     
        'ouverture du fichier précis donné par le chemin filePath
        Set Classeur = AppExcel.Workbooks.Open(filePath)
        'désactiver les messages d'alerte d'Excel
        AppExcel.DisplayAlerts = False
     
        'sauver le classeur avec son nouveau nom et son extension xls (=fileFormat)
        Classeur.SaveAs FileName:=CurrentProject.Path & "\MonRep\\MonRep\MonFichier.xlsx", FileFormat:=xlOpenXMLWorkbook
        'Classeur.SaveAs FileName:=filePath, FileFormat:=xlOpenXMLWorkbook
        'réactiver les messages d'alerte d'excel
        AppExcel.DisplayAlerts = True
        'fermeture du classeur utilisé et sauvegarde
        Classeur.Close SaveChanges:=True
        'affectation du chemin du fichier
        filePath = CurrentProject.Path & "\MonRep\MonFichier.xlsx"
        'ouverture du fichier
        Set Classeur = AppExcel.Workbooks.Open(filePath)
        'boucle pour supprimer tous les onglets sauf celui qui est important = MonOnglet
        'désactiver les messages d'alerte d'Excel
        AppExcel.DisplayAlerts = False
        For Each ws In Classeur.Worksheets
            If ws.Name <> "MonOnglet" Then ws.Delete
        Next
        'activer les messages d'alerte d'Excel
        AppExcel.DisplayAlerts = True
     
        'renommage des entêtes
        AppExcel.Range("A1") = "Range1"
        AppExcel.Range("B1") = "Range2"
        AppExcel.Range("C1") = "Range3"
        AppExcel.Range("D1") = "Range4"
        AppExcel.Range("E1") = "Range5"
        AppExcel.Range("F1") = "Range6"
        AppExcel.Range("G1") = "Range7"
        AppExcel.Range("H1") = "Range8"
        'désactiver les messages d'alerte d'Excel
        AppExcel.DisplayAlerts = False
        Classeur.SaveAs FileName:=filePath, FileFormat:=xlOpenXMLWorkbook
        Classeur.Close SaveChanges:=True
        'activer les messages d'alerte d'Excel
        AppExcel.DisplayAlerts = True
        'quitter excel
        AppExcel.Quit
        'libérer les objects
        Set ws = Nothing
        Set Classeur = Nothing
        Set AppExcel = Nothing
    FormatExtraitSap_Error:
        If Err.Number = 9 Then
            'Worksheet pas trouvé
            MsgBox "Worksheet pas trouvé dans le WorkBook", vbCritical
            Exit Sub
        End If
    End Sub
    @+++

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

Discussions similaires

  1. [VBA] Boucler sur la méthode Workbooks.Open plante Excel
    Par juliusmarat dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/09/2014, 17h39
  2. Problème fermeture excel via vba
    Par dav787 dans le forum Général VBA
    Réponses: 1
    Dernier message: 14/03/2013, 17h17
  3. excel workbook.worksheets(1) qui ne change pas
    Par MalkoLinge dans le forum Windows Forms
    Réponses: 0
    Dernier message: 11/08/2010, 14h24
  4. [VBA-Excel] Execution à la fermeture
    Par ShaVo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/08/2006, 18h08
  5. [VBA-E] Problème fermeture excel
    Par robin des bulles dans le forum Access
    Réponses: 3
    Dernier message: 28/06/2006, 16h14

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