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 :

Fermeture d'un fichier word ouvert


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut Fermeture d'un fichier word ouvert
    Bonjour, je me sers d'un fichier excel pour traiter l'ouverture et la fermeture des fichiers sur lesquels je travaille.
    Pour ouvrir mes fichiers, j'utilise:

    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
    Sub LANCEURAUCHOIX() 
     
     
     
    Dim wbSource, wbFichierUsager As Workbook
     
    Dim strFileName As String, intChoice As Integer
     
     
     
     
     
    Set wbFichierUsager = ThisWorkbook
     
    'On va appeler une application de MS Office afin de chercher et d’ouvrir le bon fichier
     
    'Avec la commande qui suit, on indique que nous ne voulons qu’un seul fichier
     
    Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = True
     
    'On affiche l’écran de dialogue de MS Office
     
    intChoice = Application.FileDialog(msoFileDialogOpen).Show
     
    'On s’assure que l’usager a fait un choix
     
    If intChoice <> 0 Then
     
    'On récupère le nom complet du fichier
     
    strFileName = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
     
     
     
    Call EnregistrerAction("OUVERTURE " & strFileName)
     
     
    Shell "explorer.exe " & strFileName
     
     
     
    Set wbSource = ActiveWorkbook
     
    'Sinon, on arrête tout en notifiant l’usager
     
    Else
     
    'S’il n’y a pas de fichier, on quitte sans rien faire
     
    MsgBox "La procédure est annulée car aucun fichier n’a été entré"
     
    Exit Sub
     
    End If
     
     
     
    End Sub
    J'enregistre l'action avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call EnregistrerAction("OUVERTURE " & strFileName)

    Pour fermer les fichiers, je liste les classeurs ouverts pour choisir celui que je veux fermer:

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    Sub Test_Class_Ouvert()
    Dim Classeur As String, ENREGISTRER As String
    For I = 1 To Workbooks.Count
     
    Sheets("Feuil4").Cells(I, 1) = Workbooks(I).Name
     
    Next I
     
     Classeur = InputBox("1 " & Sheets("Feuil4").Cells(1, 1) & vbCr & "2 " & Sheets("Feuil4").Cells(2, 1) & vbCr & "3 " & Sheets("Feuil4").Cells(3, 1) & vbCr & "4 " & Sheets("Feuil4").Cells(4, 1) & vbCr & "5 " & Sheets("Feuil4").Cells(5, 1) & vbCr & "6 " & Sheets("Feuil4").Cells(6, 1) & vbCr & "7 " & Sheets("Feuil4").Cells(7, 1) & vbCr & "8 " & Sheets("Feuil4").Cells(8, 1) & vbCr & "9 " & Sheets("Feuil4").Cells(9, 1) & vbCr & "10 " & Sheets("Feuil4").Cells(10, 1) & vbCr & "11 " & Sheets("Feuil4").Cells(11, 1) & vbCr & "12 " & Sheets("Feuil4").Cells(12, 1) & vbCr & "13 " & Sheets("Feuil4").Cells(13, 1) & vbCr & "14 " & Sheets("Feuil4").Cells(14, 1) & vbCr & "15 " & Sheets("Feuil4").Cells(14, 15), "CLASSEURS")
     
    ENREGISTRER = InputBox("OUI" & vbCr & "NON", "ENREGISTRER?")
     
        If Classeur = 1 Then
        Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A1").Value)
        ENREGISTRER = InputBox("OUI?" & vbCr & "NON", "ENREGISTRER?")
        If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A1").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A1").Value).Close SaveChanges:=False
        End If
        End If
        If Classeur = 2 Then
        Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A2").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A2").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A2").Value).Close SaveChanges:=False
        End If
        End If
        If Classeur = 3 Then
        Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A3").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A3").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A3").Value).Close SaveChanges:=False
        End If
        End If
        If Classeur = 4 Then
        Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A4").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A4").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A4").Value).Close SaveChanges:=False
        End If
        End If
        If Classeur = 5 Then
        Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A5").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A5").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A5").Value).Close SaveChanges:=False
        End If
        End If
        If Classeur = 6 Then
        Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A6").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A6").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A6").Value).Close SaveChanges:=False
        End If
        End If
        If Classeur = 7 Then
        Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A7").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A7").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A7").Value).Close SaveChanges:=False
        End If
        End If
        If Classeur = 8 Then
        Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A8").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A8").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A8").Value).Close SaveChanges:=False
        End If
        End If
        If Classeur = 9 Then
        Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A9").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A9").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A9").Value).Close SaveChanges:=False
        End If
        End If
        If Classeur = 10 Then
        Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A10").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A10").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A10").Value).Close SaveChanges:=False
        End If
        End If
     If Classeur = 11 Then
     Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A11").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A11").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A11").Value).Close SaveChanges:=False
        End If
        End If
     If Classeur = 12 Then
     Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A12").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A12").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A12").Value).Close SaveChanges:=False
        End If
        End If
     If Classeur = 13 Then
     Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A13").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A13").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A13").Value).Close SaveChanges:=False
        End If
        End If
     If Classeur = 14 Then
     Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A14").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A14").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A14").Value).Close SaveChanges:=False
        End If
        End If
     If Classeur = 15 Then
     Call EnregistrerAction("FERMETURE DE CLASSEUR" & Sheets("Feuil4").Range("A15").Value)
    If ENREGISTRER = "OUI" Then
        Workbooks(Sheets("Feuil4").Range("A15").Value).Close SaveChanges:=True
        Else
        Workbooks(Sheets("Feuil4").Range("A15").Value).Close SaveChanges:=False
        End If
        End If
     
    Sheets("Feuil4").Columns(1).ClearContents
     
     
     
     
    End Sub
    Jusque là tout est OK.

    Je travaille sur plusieurs fichiers word en même temps.

    Est-il possible d'opérer de la même façon avec word, peut-être même avec les pdf (sous pdf architec ou pdf creator)?

    Merci beaucoup d'avance

  2. #2
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour,
    Voila un code que j'utilise pour générer un fichier Word à partir de données situées sur 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
    Sub ExportWord()
    'nécéssite d'activer la référence Microsoft Word xx.x Object Library
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim C_O_O As Worksheet
    Dim Path As String
    Dim Template As String
    Dim File_Name As String
    Dim i As Byte
    Set C_O_O = ThisWorkbook.Sheets("Call_Off_Order")
    Path = "C:\chemin du fichier"
    Template = "COO Template.doc"
    File_Name = "COO No" & C_O_O.Range("M3") & "-" & Year(C_O_O.Range("M10"))
    Set WordApp = CreateObject("Word.Application") 'ouvre session word
    Set WordDoc = WordApp.Documents.Open(Path & Template) 'ouvre document Word
    WordApp.Visible = False 'word masqué pendant l'operation
    For i = 1 To 10
    'les signets du document Word sont nommés Signet1 , Signet2 , Signet3
    WordDoc.Bookmarks("Signet" & i).Range.Text = Cells(i + 2, 13).Text
    Next i
     
    WordApp.Visible = True 'affiche le document Word
    WordDoc.PrintOut 'imprimer
    WordDoc.SaveAs Filename:=Path & File_Name
    WordDoc.Close True 'ferme le document word en sauvegardant les données
    WordApp.Quit 'ferme la session Word
    End Sub
    Je pense donc que tu pourras t'en inspirer pour ton cas.
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Je pense qu'en effet ton code va m'être d'une grande aide mais je crois voir que tu cible un document word déterminé et je pense que ma difficulté va être causée par le fait que mes documents ne le sont pas sauf à considérer que ce sont ceux qui sont ouverts.
    Je travaille sur ton code, vois-tu une solution de ton côté qui me permettrait de choisir dans mes documents word celui que je voudrais fermer.

    Ton semble m'intéresser à ce titre. Est-il possible, avec cette procédure, d'inclure un nom de fichier après avoir listé les fichiers ouverts?

    MERCI

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    En bidouillant (je ne m'engage donc que d'une façon limitée sur la structuration de mon code), j'ai trouvé cela:

    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
    Option Explicit
     
     
    Sub liste_docsword()
    Dim Appli As Word.Application
        Dim docword As Word.Document
     
        Dim liste_docs_ouverts As String
    On Error GoTo erreur_liste
     
    ' crée l'objet application Word
    Set Appli = Word.Application
     
     
    Dim I As Integer
    ' examine les documents ouverts
     
     
    For I = 1 To 2
    For Each docword In Appli.Documents
     
    liste_docs_ouverts = docword.Name & ", " & liste_docs_ouverts
     
    Sheets("Feuil1").Cells(I, 1) = liste_docs_ouverts
     
     
    Next docword
     
    Next I
     
    ' fin traitement
    Exit Sub
     
    ' routine erreur
    erreur_liste:
    MsgBox Err.Description
     
    End Sub
    Ce code trouve bien la liste de mes fichiers ouverts mais les lie avec une virgule et le répète, biensûr sur deux lignes successives de mon fichier excel.


    C'est un grand progrès mais, le but serait d'inscrire le nom du premier fichier (peut-être avec le chemin?) sur la première ligne et le nom du deuxième sur la deuxième ligne etc....

    Il me faudrait donc compter le nombre de fichiers word ouvert pour rédiger correctement: et pouvoir séparer le nom de chaque fichier word ouvert.

    Tout cela est-il possible en partant de ce code?

    Cela pourrait me permettre de poursuivre mon code en demandant la fermeture du document word dont le nom est à la ligne n de mon classeur excel.

    MERCI BEAUCOUP

  5. #5
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Rebonjour,
    Dans mon code je sélectionne le fichier que je voudrais ouvrir , dans mon cas c'est un modèle que je renomme ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Path = "C:\chemin du fichier"
    Template = "COO Template.doc"
    Je l'ouvre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set WordDoc = WordApp.Documents.Open(Path & Template) 'ouvre document Word
    Puis je travaille dessus et enfin je l'enregistre sous un autre nom et le ferme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WordDoc.SaveAs Filename:=Path & File_Name
    WordDoc.Close True
    Comme tu as plusieurs documents Word ouvert tu devra sélectionner à l'aide de variables ou de conditions celui que tu veux fermer comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If WordDoc.Name Like "*" & mot_cle & "*" then
    Sinon tu peux aussi faire comme ceci (Source HeureuxOli Dvpz) :
    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
    Sub AffectationDeDocuments()
    Dim objDoc1 As Document
    Dim objDoc2 As Document
     
    Set objDoc1 = Documents.Open ("C:\Temp\MonDoc1.docm")
    Set objDoc2 = Documents.Open ("C:\Temp\MonDoc2.docx")
    ...
    ...
     
     
    With objDoc1
        .Save
        .Close
    End With
    With objDoc2
        .Save
        .Close
    End With
    Set objDoc1 = Nothing
    Set objDoc2 = Nothing
     
    End Sub
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  6. #6
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Et si tu écris simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For I = 1 To 2
    For Each docword In Appli.Documents
     
    liste_docs_ouverts = docword.Name 
     
    Sheets("Feuil1").Cells(I, 1) = liste_docs_ouverts
     
     
    Next docword
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  7. #7
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Pour ton deuxième code, j'ai deux fois le même nom de document qui s'inscrit dans mon classeur.

    Ce qui pose deux problèmes, on perd les autres noms de fichiers ouverts dans l'opération et le est à titre purement descriptif car il faudrait autant de lignes que de fichiers word ouverts pour que le nom de chacun s'inscrive dans une cellule de la première colonne.
    Avec le code que j'ai trouvé, je récupère bien tous les noms.

    Je pense que j'utiliserai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If WordDoc.Name Like "*" & mot_cle & "*" then
    pour fermer avec le mot clé = An.

Discussions similaires

  1. [WD-2003] Liste de TOUS les fichiers Word ouverts
    Par pinchoonet dans le forum VBA Word
    Réponses: 3
    Dernier message: 24/08/2022, 15h28
  2. Déclarer et faire référence à un fichier Word déjà ouvert?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 23/05/2008, 17h03
  3. Savoir si un fichier word est ouvert
    Par enchanté dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/01/2008, 10h54
  4. publipostage Fermeture fichier word
    Par mat_lefebvre dans le forum Access
    Réponses: 2
    Dernier message: 13/09/2006, 11h00
  5. fermeture d'un fichier ouvert avec la fonction shell
    Par julio02200 dans le forum Access
    Réponses: 10
    Dernier message: 19/06/2006, 10h58

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