Tokki
Messages postés18Date d'inscriptionlundi 14 mars 2011StatutMembreDernière intervention 8 juin 2011
-
6 juin 2011 à 11:05
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 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
SebSemos
Messages postés57Date d'inscriptionmardi 24 mai 2011StatutMembreDernière intervention13 juin 20111 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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)