Excel et Word

Y compris Power BI, Power Query et toute autre question en lien avec Excel
s
sebien0077
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 18 septembre 2014
Version d'Excel : 2013 FR

Message par sebien0077 » 26 juin 2016, 01:21

J'ai trouvé!
Il suffit de vider la variable, voir toute :
Private Sub EvtsDoc_Close()
    'désactive les événements du document actif
    Set EvtsDoc = Nothing
    ThisWorkbook.Activate
    MsgBox "Document Word avant fermeture"
    End
End Sub
s
sebien0077
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 18 septembre 2014
Version d'Excel : 2013 FR

Message par sebien0077 » 26 juin 2016, 10:07

Bonjour,

j'ai encore besoin d'aide. La macro actuelle me permet de garder le contrôle sur un seul document à la fois.
Comment faire si je veux en ouvrir 5 ou 10 différents, et garder le contrôle sur chacun d'entre eux?

je pense qu'il faudrait que je modifie ici, afin d'avoir une liste qui puisse d'incrémenter automatiquement, mais je maîtrise mal les listes...
Private Sub EvtsWord_WindowActivate(ByVal Doc As Word.Document, ByVal Wn As Word.Window)
    'active les événements du document actif de l'instance word correspondante
    Set EvtsDoc = GetObject(Doc.Path & "\" & Doc.Name).Application.ActiveDocument
End Sub
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'481
Appréciations reçues : 209
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 26 juin 2016, 13:50

Bravo, c'est bien ça, il faut effectivement réinitialiser la variable mais il faut le faire au départ sinon elle ne sera plus activée pour les documents suivants. Comme ceci
Dim wd As Word.Application
Dim wdt As New MyWord
Sub ouvrir_doc(nom_doc)
    Dim nom_fichier As String
    
    'initialise les événements de l'application Word
     Set wdt.EvtsWord = Nothing
    'création ou récupération instance application Word
     On Error Resume Next
    Set wd = GetObject(, "Word.application")
    If Err.Number <> 0 Then Set wd = CreateObject("Word.Application")
    Err.Clear
    'active les événements de l'application Word
     Set wdt.EvtsWord = wd.Application

    'ouverture fichier Word
     wd.Documents.Open Filename:=nom_doc
    wd.Visible = True

End Sub
Par ailleurs, j'ai simplifié le module de classe MyWord car en fait, nul besoin des événements Document
Option Explicit
Public WithEvents EvtsWord As Word.Application
Private Sub EvtsWord_DocumentOpen(ByVal Doc As Word.Document)
    
    MsgBox "Document Word avant ouverture"

End Sub
Private Sub EvtsWord_DocumentBeforeClose(ByVal Doc As Word.Document, Cancel As Boolean)
    
    MsgBox "Document Word avant fermeture"

End Sub
Correction d'une erreur dans le module "Votre macro" au niveau de la variable relative aux éléments sélectionnés

**************** ajouter référence Microsoft Scripting Runtime *******************
Sub Votre_macro()

    Dim fso As New FileSystemObject
    Dim dossier As Folder
    Dim fichier As File
    Dim fd As Object
    Dim nom_dossier, ext_fichier As String
    Dim selection As Boolean
    Dim élément As Variant
   
    'ouverture fichier Documents unique
     nom_dossier = "D:\Docs"
    Set dossier = fso.GetFolder(nom_dossier)
    For Each fichier In dossier.Files
        ext_fichier = fso.GetExtensionName(fichier.Path)
        If ext_fichier = "docx" Then Exit For
    Next
    If ext_fichier = "docx" And dossier.Files.Count = 1 Then
        Call ouvrir_doc(fichier.Path)
        Exit Sub
    End If
    
    'affichage fichiers à sélectionner
     Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .InitialFileName = nom_dossier
        .Filters.Add "Documents", "*.docx", 1
        .Title = "Sélectionner fichier(s) Documents"
        .AllowMultiSelect = True
        .InitialView = msoFileDialogViewDetails
        .ButtonName = "Sélection fichier(s) Documents"
        .Show
    End With
    
    'ouverture fichiers sélectionnés
     sélection = False
    For Each élément In fd.SelectedItems
        sélection = True
        Call ouvrir_doc(élément)
    Next
    If Not sélection Then
        MsgBox "Aucune sélection effectuée"
    End If


End Sub

s
sebien0077
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 18 septembre 2014
Version d'Excel : 2013 FR

Message par sebien0077 » 26 juin 2016, 22:22

Merci beaucoup pour ton aide.
j'avais en effet corrigé ta macro :)

J'ai encore besoin de toi. Par hasard, tu ne saurais pas comment a partir de ma macro sous exce, arriver à afficher une boite de dialogue dans le doc word.
En gros, je réussi maintenant à catcher la sauvegarde, je fais mes affaires, et je veux lui afficher une boite de dialogue "Sauvegarde effectué" dans le word.
Actuellement la boite de dialogue s'affiche dans Excel. et pour que l'utilisateur le voit, je dois mettre word en arrière plan... j'aurais préférer mettre excel en premier plan. si tu as une astuce pour ça aussi je suis preneur.
Option Explicit
Public WithEvents EvtsWord As Word.Application

Private Sub EvtsWord_DocumentBeforeSave(ByVal Doc As Word.Document, SaveAsUI As Boolean, Cancel As Boolean)
    Doc.Words.Application.WindowState = wdWindowStateMinimize
    Dim newName As String
    Dim PartiARemplacer() As String
    
    PartiARemplacer = Split(Doc.Name, "_")
    newName = Left(Doc.FullName, (Len(Doc.FullName) - Len(PartiARemplacer(UBound(PartiARemplacer))))) & Format(Now, "YYYYMMDD-hhmm")
    Doc.SaveAs2 Filename:=newName, FileFormat:=wdFormatDocumentDefault
    MsgBox "Document sauvegardé sous le nom : " & Doc.Name
End Sub
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'481
Appréciations reçues : 209
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 27 juin 2016, 19:58

Bonjour,

j'ajouterai ces 2 instructions
    MsgBox "Document sauvegardé sous le nom : " & Doc.Name
    ActiveWindow.WindowState = xlNormal
    Cancel = True
Le "cancel= true" enlève la boite de dialogue apparaissant en cas d'"enregistrer sous"
s
sebien0077
Jeune membre
Jeune membre
Messages : 19
Inscrit le : 18 septembre 2014
Version d'Excel : 2013 FR

Message par sebien0077 » 28 juin 2016, 09:46

Le coté "cancel" ne fait rien chez moi, la fenêtre s'affiche qd meme si je fais enregistrer sous.
Sinon, ta solution est un bon palliatif, mais je préférerais afficher la popup dans word ;)
Avatar du membre
thev
Membre impliqué
Membre impliqué
Messages : 2'481
Appréciations reçues : 209
Inscrit le : 13 juin 2016
Version d'Excel : 2019 FR 64 bits

Message par thev » 28 juin 2016, 10:35

Cancel = True fonctionne parfaitement chez moi et nous avons a priori la même version d'Excel.

Essaie de le placer en première instruction
Private Sub EvtsWord_DocumentBeforeSave(ByVal Doc As Word.Document, SaveAsUI As Boolean, Cancel As Boolean)
    
    Cancel = True
    Doc.Application.WindowState = wdWindowStateMinimize
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message