Publipostage

Tokki Messages postés 18 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 8 juin 2011 - 6 juin 2011 à 11:05
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 6 juin 2011 à 13:26
Bonjour tout le monde :)

J'ai une petite question a vous poser,

J'ai un classeur excel avec une feuille qui contient nom, prénom, adresse,... de stagiaires.
J'ai besoin de faire un publipostage en liant ce fichier a un fichier word.
Donc j'ai créé un petit programme qui me permet en cliquant sur un bouton d'ouvrir le fichier word.

'Préparation de la convocation
Private Sub cmdConvoc_Click()
Dim appWrd As Word.Application
Dim DocWord As Word.Document
Dim résult
ActiveWorkbook.Save
Set appWrd = Nothing
Set appWrd = CreateObject("Word.Application")
appWrd.Visible = True
appWrd.ChangeFileOpenDirectory "s:\Formation\Kevin"
With appWrd.Dialogs(wdDialogFileOpen)
    '.Name = "Document fixe.doc"
    résult = .Show
End With
If résult = -1 Then
Set DocWord = appWrd.ActiveDocument
MsgBox DocWord
End If
Set appWrd = Nothing
Set DocWord = Nothing

End Sub


Mon problème c'est que quand ca ouvre le fichier word qui a déjà le publipostage de fait(plus qu'a fusionner pour imprimer) ca lance également le fichier excel qui est relié or se fichier est déja ouvert pusque c'est celui ou se trouve le bouton.

Je voulais savoir si y'avais possibilité d'ouvrir le fichier word sans ouvrir excel :s

Si vous avez une solution a me proposer :)
Merci d'avance

2 réponses

SebSemos Messages postés 57 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 13 juin 2011 1
6 juin 2011 à 11:52
Salut, pour te donner une piste voila comment je fait en vb 2010

        Dim hwd1 As IntPtr
        hwd1 = FindWindow(vbNullString, "Réglage_des_Spots.doc - Microsoft Word")'On cherche la fenêtre dont on connait le nom
        If hwd1.Equals(IntPtr.Zero) = False Then 'Si le fichier est déjà ouvert
            Exit Sub 'on ne fait rien
        End If
' suite du code, si la fenêtre n'est pas ouverte
End sub

Il te reste plus qu'a adapter en VBA. ;)

_______________________
Imports System.Thinking
'La vie Roxxx un max à qui s'en donne la peine
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juin 2011 à 13:26
Salut

Le problème de Tokki, c'est que, en ouvrant le fichier Word, celui-ci est déjà associé au fichier Excel.
Hélas, cette action se déroule pendant l'ouverture du Word, c'est à dire en dehors de Excel.
Il faudrait donc regarder dans Word comment se fait l'ouverture du fichier Excel et faire une recherche (avec GetObject) pour vérifier si le fichier Excel est déjà ouvert, auquel cas, il faudrait utiliser la référence générée par ce GetObject plutôt que le Open qui doit être fait actuellement.

Sinon, voilà un exemple de recherche mais pour des documents Word, tu pourras l'adapter facilement :
Partie déclarations :
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Code :
Public Function IsDocumentAlreadyOpen(sFileName As String) As Boolean
    ' Renvoie True si un autre fichier Word portant le même nom est déjà ouvert
    Dim oDoc    As Document
    Dim sTemp   As String
    Dim lHandle As Long
    
    IsDocumentAlreadyOpen = False   ' Par défaut
    
    ' Cas où le fichier est ouvert par notre instance de Word
    For Each oDoc In Application.Documents
        If StrComp(oDoc.Name, sFileName, vbTextCompare) = 0 Then
            IsDocumentAlreadyOpen = True
            Exit For
        End If
    Next
    
    ' Recherche d'éventuelles autres instances de Word
    sTemp = sFileName & " - Microsoft Word"
    lHandle = FindWindow(vbNullString, sTemp)
    If lHandle <> 0 Then IsDocumentAlreadyOpen = True
    
    ' Si on est sorti de ces tests sans avoir rencontré le nom de notre future fichier,
    ' c'est que tout va bien, on laisse IsDocumentAlreadyOpen à False
End Function

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous