Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Fermer Word depuis Excel

Fab117

XLDnaute Impliqué
Hello,
Depuis ma macro Excel, j'ai trouvé comment démarrer Word :
VB:
Sub ActivationWord()
Dim MyAppID, ReturnValue

MyAppID = Shell("C:\Program Files (x86)\...chemin d'accès ...\WINWORD.EXE", 1)
AppActivate MyAppID

End Sub

Est-ce que quelqu'un connaitrait le code permettant de fermer Word (sans sauvegarde) ?

Merci d'avance

Fab
 

job75

XLDnaute Barbatruc
Bonjour Fab117, le forum,

Voyez cette autre macro :
VB:
Sub ActivationWord2()
Dim Wapp As Object, doc As Object
On Error Resume Next 'si Word n'est pas ouvert
Set Wapp = GetObject(, "Word.Application")
If Wapp Is Nothing Then Set Wapp = CreateObject("Word.Application")
Wapp.Visible = True
Wapp.Activate
'---"
Application.Wait Now + 5 / 86400 'attente 5 secondes pour tester
For Each doc In Wapp.documents: doc.Saved = True: Next 'pas d'enregistrement demandé
Wapp.Quit 'ferme Word
End Sub
Edit : Wapp.Activate mieux que AppActivate "Word"

A+
 
Dernière édition:

Fab117

XLDnaute Impliqué
Hello,
Un grand merci à vous 2 pour l'intérêt que vous avez porté à ma question.
J'ai repris une partie de chacun de vous qui me permet presque de faire ce que je souhaiterais.
J'ai une boucle avec un compteur.
Toutes les 5 itérations, il doit ouvrir Word et écrire un texte que je lui donnerai.
Ca marche très bien la première fois (lorsqu'il est à 5 itérations), mais plus après (10, 15, 20 itérations).
A priori, il n'arrive plus à ré-ouvrir Word (j'ai mis un contrôle via une MsgBox et il lit bien le code lorsqu'il est à 10, 15, … itérations :

VB:
Sub Test3()
Dim Wsh As Object, Reponse As Integer
Set Wsh = CreateObject("WScript.Shell")


duree = Range("A2") ' Durée entre 2 itérations
' Sécurité si l'utilisateur programme un temps trop court entre 2 itérations
If duree < 3 Then
    MsgBox ("Durée min 3 secondes")
    Exit Sub
End If

Range("A14") = 0
NbDeCycle = 0

Do Until Condition
Reponse = Wsh.popup("Voulez vous sortir ?", duree, "Confirmation", vbYesNo + vbDefaultButton2)

Select Case Reponse
    Case -1                 'Pas de réponse => toutes les 5 itérations ouvre Word
        'pas de réponse
        NbDeCycle = NbDeCycle + 1
        Range("A14") = NbDeCycle

        'Ouverture de word si multiple de 5
        If NbDeCycle Mod 5 = 0 Then
            Dim Wapp As Object, doc As Object
            On Error Resume Next 'si Word n'est pas ouvert
            Set Wapp = GetObject(, "Word.Application")
            If Wapp Is Nothing Then Set Wapp = CreateObject("Word.Application")
            Wapp.Visible = True
            Wapp.Activate
              ' ____________
              With Wapp
                .Documents.Add
                With .ActiveDocument
                  With .ActiveWindow.Selection
                    .TypeText "Test fonctionnement sur Word" & vbLf & vbLf
                    .TypeText "Ligne 2" & vbLf
                    .TypeText "Ligne 3" & vbLf
                    .TypeText "Ligne 4" & vbLf
                    .TypeText "Ligne 5" & vbLf
                  End With
                End With
                .Visible = -1: .Activate
              End With
              ' ____________
            '---"
            Application.Wait Now + 5 / 86400 'attente 5 secondes pour tester
            For Each doc In Wapp.Documents: doc.Saved = True: Next 'pas d'enregistrement demandé
            Wapp.Quit 'ferme Word
        'MsgBox ("Test. Nb de cycles " & NbDeCycle)
        End If
          
    Case 6                  'Réponse oui
        Exit Sub ' pour l'instant
    
    Case 7                  'Réponse Non
        Exit Sub ' pour l'instant

End Select

Loop
End Sub

Verriez-vous ce qui bloque la ré-ouverture de word ?

Merci et bon week-end

Fab
 

Discussions similaires

Réponses
14
Affichages
655
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…