OVH Cloud OVH Cloud

VB et Word

7 réponses
Avatar
Youky
Bonjour,
J'ouvre un fichier Word avec mon code mais avant de l'ouvrir je voudrais
tester si ce fichier est déja ouvert
pour ne pas avoir "en lecture seule" ou "notifier" et comment pouvoir
l'activer si il est en barre des taches.
A savoir que je dois naviguer entre plusieurs fichiers Word
j'ai entendu parler du handle mais je sais pas interprêter.
voici un bout de code

Dim AppWrd As Word.Application
Dim DocWrd As Word.Document
Set AppWrd = New Word.Application
Set DocWrd = AppWrd.Documents.Open("C:\Tests\toto.doc")
Merci et bonne soirée à tous

7 réponses

Avatar
papou
Bonjour
Dim AppWrd As Object
Dim DocWrd As String
On Error Resume Next
Set AppWrd = GetObject(, "Word.Application")
If Err <> 0 Then _
Set AppWrd = CreateObject("Word.Application")
AppWrd.Visible = True
On Error GoTo 0
DocWrd = "C:TestsDoc1.doc"
On Error Resume Next
AppWrd.Windows("Doc1.doc").Activate
If Err <> 0 Then AppWrd.Documents.Open (DocWrd)
On Error GoTo 0
AppActivate AppWrd

Cordialement
Pascal

"Youky" a écrit dans le message de news:

Bonjour,
J'ouvre un fichier Word avec mon code mais avant de l'ouvrir je voudrais
tester si ce fichier est déja ouvert
pour ne pas avoir "en lecture seule" ou "notifier" et comment pouvoir
l'activer si il est en barre des taches.
A savoir que je dois naviguer entre plusieurs fichiers Word
j'ai entendu parler du handle mais je sais pas interprêter.
voici un bout de code

Dim AppWrd As Word.Application
Dim DocWrd As Word.Document
Set AppWrd = New Word.Application
Set DocWrd = AppWrd.Documents.Open("C:Teststoto.doc")
Merci et bonne soirée à tous




Avatar
Youky
Merci Papou,
Souvent j'ai plaisir à te lire sur Excel pout tirer qlq astuces.
J'ai testé ton code et je vais en erreur en derniere ligne,
le fichier ici Doc1.doc deja ouvert n'est pas non plus selectionné
J'ai Office2000 et VB5
Encore merci
Bruno
"papou" <cestpasbon@çanonplus44.fr> a écrit dans le message news:
#
Bonjour
Dim AppWrd As Object
Dim DocWrd As String
On Error Resume Next
Set AppWrd = GetObject(, "Word.Application")
If Err <> 0 Then _
Set AppWrd = CreateObject("Word.Application")
AppWrd.Visible = True
On Error GoTo 0
DocWrd = "C:TestsDoc1.doc"
On Error Resume Next
AppWrd.Windows("Doc1.doc").Activate
If Err <> 0 Then AppWrd.Documents.Open (DocWrd)
On Error GoTo 0
AppActivate AppWrd

Cordialement
Pascal

"Youky" a écrit dans le message de news:

> Bonjour,
> J'ouvre un fichier Word avec mon code mais avant de l'ouvrir je voudrais
> tester si ce fichier est déja ouvert
> pour ne pas avoir "en lecture seule" ou "notifier" et comment pouvoir
> l'activer si il est en barre des taches.
> A savoir que je dois naviguer entre plusieurs fichiers Word
> j'ai entendu parler du handle mais je sais pas interprêter.
> voici un bout de code
>
> Dim AppWrd As Word.Application
> Dim DocWrd As Word.Document
> Set AppWrd = New Word.Application
> Set DocWrd = AppWrd.Documents.Open("C:Teststoto.doc")
> Merci et bonne soirée à tous
>
>




Avatar
papou
Bonjour
Modifie comme ceci :
Private Sub Command1_Click()
Dim AppWrd As Object
Dim DocWrd As String
Dim WrdOuvert As Boolean
On Error Resume Next
Set AppWrd = GetObject(, "Word.Application")
'Word non ouvert
If Err <> 0 Then
Set AppWrd = CreateObject("Word.Application")
On Error GoTo 0
WrdOuvert = False
AppWrd.Visible = True
End If
DocWrd = "C:TestsDoc1.doc"
If Not WrdOuvert Then
'Word non ouvert > ouverture fichier
AppWrd.Documents.Open (DocWrd)
Else
On Error Resume Next
'Word ouvert > tenter d'activer le doc
AppWrd.Windows("Doc1.doc").Activate
End If
If Err <> 0 Then
'erreur d'activation > on ouvre le doc
AppWrd.Documents.Open (DocWrd)
On Error GoTo 0
End If
AppActivate AppWrd
End Sub


Cordialement
Pascal

"Youky" a écrit dans le message de news:
%
Merci Papou,
Souvent j'ai plaisir à te lire sur Excel pout tirer qlq astuces.
J'ai testé ton code et je vais en erreur en derniere ligne,
le fichier ici Doc1.doc deja ouvert n'est pas non plus selectionné
J'ai Office2000 et VB5
Encore merci
Bruno
"papou" <cestpasbon@çanonplus44.fr> a écrit dans le message news:
#
Bonjour
Dim AppWrd As Object
Dim DocWrd As String
On Error Resume Next
Set AppWrd = GetObject(, "Word.Application")
If Err <> 0 Then _
Set AppWrd = CreateObject("Word.Application")
AppWrd.Visible = True
On Error GoTo 0
DocWrd = "C:TestsDoc1.doc"
On Error Resume Next
AppWrd.Windows("Doc1.doc").Activate
If Err <> 0 Then AppWrd.Documents.Open (DocWrd)
On Error GoTo 0
AppActivate AppWrd

Cordialement
Pascal

"Youky" a écrit dans le message de news:

> Bonjour,
> J'ouvre un fichier Word avec mon code mais avant de l'ouvrir je
> voudrais
> tester si ce fichier est déja ouvert
> pour ne pas avoir "en lecture seule" ou "notifier" et comment pouvoir
> l'activer si il est en barre des taches.
> A savoir que je dois naviguer entre plusieurs fichiers Word
> j'ai entendu parler du handle mais je sais pas interprêter.
> voici un bout de code
>
> Dim AppWrd As Word.Application
> Dim DocWrd As Word.Document
> Set AppWrd = New Word.Application
> Set DocWrd = AppWrd.Documents.Open("C:Teststoto.doc")
> Merci et bonne soirée à tous
>
>








Avatar
Youky
Merci Papou,
Mes tests n'ont pas été rapide et j'ai toujours la même erreur en derniere
ligne
AppWrd.Windows("Doc1.doc").Activate 'n'active pas mon .doc et j'ai tout
essayé
Si je trouve le bon code pour cette ligne je serai presque au bout.
Bruno

"papou" <cestpasbon@çanonplus44.fr> a écrit dans le message news:
OWHNbP$
Bonjour
Modifie comme ceci :
Private Sub Command1_Click()
Dim AppWrd As Object
Dim DocWrd As String
Dim WrdOuvert As Boolean
On Error Resume Next
Set AppWrd = GetObject(, "Word.Application")
'Word non ouvert
If Err <> 0 Then
Set AppWrd = CreateObject("Word.Application")
On Error GoTo 0
WrdOuvert = False
AppWrd.Visible = True
End If
DocWrd = "C:TestsDoc1.doc"
If Not WrdOuvert Then
'Word non ouvert > ouverture fichier
AppWrd.Documents.Open (DocWrd)
Else
On Error Resume Next
'Word ouvert > tenter d'activer le doc
> End If
If Err <> 0 Then
'erreur d'activation > on ouvre le doc
AppWrd.Documents.Open (DocWrd)
On Error GoTo 0
End If
AppActivate AppWrd
End Sub


Cordialement
Pascal

"Youky" a écrit dans le message de news:
%
> Merci Papou,
> Souvent j'ai plaisir à te lire sur Excel pout tirer qlq astuces.
> J'ai testé ton code et je vais en erreur en derniere ligne,
> le fichier ici Doc1.doc deja ouvert n'est pas non plus selectionné
> J'ai Office2000 et VB5
> Encore merci
> Bruno
> "papou" <cestpasbon@çanonplus44.fr> a écrit dans le message news:
> #
>> Bonjour
>> Dim AppWrd As Object
>> Dim DocWrd As String
>> On Error Resume Next
>> Set AppWrd = GetObject(, "Word.Application")
>> If Err <> 0 Then _
>> Set AppWrd = CreateObject("Word.Application")
>> AppWrd.Visible = True
>> On Error GoTo 0
>> DocWrd = "C:TestsDoc1.doc"
>> On Error Resume Next
>> AppWrd.Windows("Doc1.doc").Activate
>> If Err <> 0 Then AppWrd.Documents.Open (DocWrd)
>> On Error GoTo 0
>> AppActivate AppWrd
>>
>> Cordialement
>> Pascal
>>
>> "Youky" a écrit dans le message de


news:
>>
>> > Bonjour,
>> > J'ouvre un fichier Word avec mon code mais avant de l'ouvrir je
>> > voudrais
>> > tester si ce fichier est déja ouvert
>> > pour ne pas avoir "en lecture seule" ou "notifier" et comment pouvoir
>> > l'activer si il est en barre des taches.
>> > A savoir que je dois naviguer entre plusieurs fichiers Word
>> > j'ai entendu parler du handle mais je sais pas interprêter.
>> > voici un bout de code
>> >
>> > Dim AppWrd As Word.Application
>> > Dim DocWrd As Word.Document
>> > Set AppWrd = New Word.Application
>> > Set DocWrd = AppWrd.Documents.Open("C:Teststoto.doc")
>> > Merci et bonne soirée à tous
>> >
>> >
>>
>>
>
>




Avatar
papou
Bonjour Bruno
Il n'y a pas de raison, essaie :
AppActivate "Microsoft Word"
Cordialement
Pascal

"Youky" a écrit dans le message de news:

Merci Papou,
Mes tests n'ont pas été rapide et j'ai toujours la même erreur en derniere
ligne
AppWrd.Windows("Doc1.doc").Activate 'n'active pas mon .doc et j'ai tout
essayé
Si je trouve le bon code pour cette ligne je serai presque au bout.
Bruno

"papou" <cestpasbon@çanonplus44.fr> a écrit dans le message news:
OWHNbP$
Bonjour
Modifie comme ceci :
Private Sub Command1_Click()
Dim AppWrd As Object
Dim DocWrd As String
Dim WrdOuvert As Boolean
On Error Resume Next
Set AppWrd = GetObject(, "Word.Application")
'Word non ouvert
If Err <> 0 Then
Set AppWrd = CreateObject("Word.Application")
On Error GoTo 0
WrdOuvert = False
AppWrd.Visible = True
End If
DocWrd = "C:TestsDoc1.doc"
If Not WrdOuvert Then
'Word non ouvert > ouverture fichier
AppWrd.Documents.Open (DocWrd)
Else
On Error Resume Next
'Word ouvert > tenter d'activer le doc
> End If
If Err <> 0 Then
'erreur d'activation > on ouvre le doc
AppWrd.Documents.Open (DocWrd)
On Error GoTo 0
End If
AppActivate AppWrd
End Sub


Cordialement
Pascal

"Youky" a écrit dans le message de news:
%
> Merci Papou,
> Souvent j'ai plaisir à te lire sur Excel pout tirer qlq astuces.
> J'ai testé ton code et je vais en erreur en derniere ligne,
> le fichier ici Doc1.doc deja ouvert n'est pas non plus selectionné
> J'ai Office2000 et VB5
> Encore merci
> Bruno
> "papou" <cestpasbon@çanonplus44.fr> a écrit dans le message news:
> #
>> Bonjour
>> Dim AppWrd As Object
>> Dim DocWrd As String
>> On Error Resume Next
>> Set AppWrd = GetObject(, "Word.Application")
>> If Err <> 0 Then _
>> Set AppWrd = CreateObject("Word.Application")
>> AppWrd.Visible = True
>> On Error GoTo 0
>> DocWrd = "C:TestsDoc1.doc"
>> On Error Resume Next
>> AppWrd.Windows("Doc1.doc").Activate
>> If Err <> 0 Then AppWrd.Documents.Open (DocWrd)
>> On Error GoTo 0
>> AppActivate AppWrd
>>
>> Cordialement
>> Pascal
>>
>> "Youky" a écrit dans le message de


news:
>>
>> > Bonjour,
>> > J'ouvre un fichier Word avec mon code mais avant de l'ouvrir je
>> > voudrais
>> > tester si ce fichier est déja ouvert
>> > pour ne pas avoir "en lecture seule" ou "notifier" et comment
>> > pouvoir
>> > l'activer si il est en barre des taches.
>> > A savoir que je dois naviguer entre plusieurs fichiers Word
>> > j'ai entendu parler du handle mais je sais pas interprêter.
>> > voici un bout de code
>> >
>> > Dim AppWrd As Word.Application
>> > Dim DocWrd As Word.Document
>> > Set AppWrd = New Word.Application
>> > Set DocWrd = AppWrd.Documents.Open("C:Teststoto.doc")
>> > Merci et bonne soirée à tous
>> >
>> >
>>
>>
>
>








Avatar
papou
Re
En complément, ajoute ces deux lignes en tête de ton code :
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" _
(ByVal hwnd As Long) As Long

Puis modifie (après le dernier End If dans ton code) comme ceci :
Dim WinWnd&
WinWnd = FindWindow(vbNullString, AppWrd.Caption)
SetForegroundWindow (WinWnd)
AppActivate AppWrd

Cordialement
Pascal


"Youky" a écrit dans le message de news:

Merci Papou,
Mes tests n'ont pas été rapide et j'ai toujours la même erreur en derniere
ligne
AppWrd.Windows("Doc1.doc").Activate 'n'active pas mon .doc et j'ai tout
essayé
Si je trouve le bon code pour cette ligne je serai presque au bout.
Bruno

"papou" <cestpasbon@çanonplus44.fr> a écrit dans le message news:
OWHNbP$
Bonjour
Modifie comme ceci :
Private Sub Command1_Click()
Dim AppWrd As Object
Dim DocWrd As String
Dim WrdOuvert As Boolean
On Error Resume Next
Set AppWrd = GetObject(, "Word.Application")
'Word non ouvert
If Err <> 0 Then
Set AppWrd = CreateObject("Word.Application")
On Error GoTo 0
WrdOuvert = False
AppWrd.Visible = True
End If
DocWrd = "C:TestsDoc1.doc"
If Not WrdOuvert Then
'Word non ouvert > ouverture fichier
AppWrd.Documents.Open (DocWrd)
Else
On Error Resume Next
'Word ouvert > tenter d'activer le doc
> End If
If Err <> 0 Then
'erreur d'activation > on ouvre le doc
AppWrd.Documents.Open (DocWrd)
On Error GoTo 0
End If
AppActivate AppWrd
End Sub


Cordialement
Pascal

"Youky" a écrit dans le message de news:
%
> Merci Papou,
> Souvent j'ai plaisir à te lire sur Excel pout tirer qlq astuces.
> J'ai testé ton code et je vais en erreur en derniere ligne,
> le fichier ici Doc1.doc deja ouvert n'est pas non plus selectionné
> J'ai Office2000 et VB5
> Encore merci
> Bruno
> "papou" <cestpasbon@çanonplus44.fr> a écrit dans le message news:
> #
>> Bonjour
>> Dim AppWrd As Object
>> Dim DocWrd As String
>> On Error Resume Next
>> Set AppWrd = GetObject(, "Word.Application")
>> If Err <> 0 Then _
>> Set AppWrd = CreateObject("Word.Application")
>> AppWrd.Visible = True
>> On Error GoTo 0
>> DocWrd = "C:TestsDoc1.doc"
>> On Error Resume Next
>> AppWrd.Windows("Doc1.doc").Activate
>> If Err <> 0 Then AppWrd.Documents.Open (DocWrd)
>> On Error GoTo 0
>> AppActivate AppWrd
>>
>> Cordialement
>> Pascal
>>
>> "Youky" a écrit dans le message de


news:
>>
>> > Bonjour,
>> > J'ouvre un fichier Word avec mon code mais avant de l'ouvrir je
>> > voudrais
>> > tester si ce fichier est déja ouvert
>> > pour ne pas avoir "en lecture seule" ou "notifier" et comment
>> > pouvoir
>> > l'activer si il est en barre des taches.
>> > A savoir que je dois naviguer entre plusieurs fichiers Word
>> > j'ai entendu parler du handle mais je sais pas interprêter.
>> > voici un bout de code
>> >
>> > Dim AppWrd As Word.Application
>> > Dim DocWrd As Word.Document
>> > Set AppWrd = New Word.Application
>> > Set DocWrd = AppWrd.Documents.Open("C:Teststoto.doc")
>> > Merci et bonne soirée à tous
>> >
>> >
>>
>>
>
>








Avatar
Youky
Merci tu m'as tiré une épine du pied,
cela fonctionne comme je veux, j'ai fait une toute petite modif à te
signaler en bas
AppActivate AppWrd ....j'ai remplacé par ....AppActivate "Doc1"
ou AppActivate VariableNomDoc sans le chemin ni l'extention
J'utilise ta derniere version
Encore Merci Papou
Bruno
"papou" <cestpasbon@çanonplus44.fr> a écrit dans le message news:

Re
En complément, ajoute ces deux lignes en tête de ton code :
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" _
(ByVal hwnd As Long) As Long

Puis modifie (après le dernier End If dans ton code) comme ceci :
Dim WinWnd&
WinWnd = FindWindow(vbNullString, AppWrd.Caption)
SetForegroundWindow (WinWnd)
AppActivate AppWrd

Cordialement
Pascal


"Youky" a écrit dans le message de news:

> Merci Papou,
> Mes tests n'ont pas été rapide et j'ai toujours la même erreur en


derniere
> ligne
> AppWrd.Windows("Doc1.doc").Activate 'n'active pas mon .doc et j'ai tout
> essayé
> Si je trouve le bon code pour cette ligne je serai presque au bout.
> Bruno
>
> "papou" <cestpasbon@çanonplus44.fr> a écrit dans le message news:
> OWHNbP$
>> Bonjour
>> Modifie comme ceci :
>> Private Sub Command1_Click()
>> Dim AppWrd As Object
>> Dim DocWrd As String
>> Dim WrdOuvert As Boolean
>> On Error Resume Next
>> Set AppWrd = GetObject(, "Word.Application")
>> 'Word non ouvert
>> If Err <> 0 Then
>> Set AppWrd = CreateObject("Word.Application")
>> On Error GoTo 0
>> WrdOuvert = False
>> AppWrd.Visible = True
>> End If
>> DocWrd = "C:TestsDoc1.doc"
>> If Not WrdOuvert Then
>> 'Word non ouvert > ouverture fichier
>> AppWrd.Documents.Open (DocWrd)
>> Else
>> On Error Resume Next
>> 'Word ouvert > tenter d'activer le doc
>> > End If
>> If Err <> 0 Then
>> 'erreur d'activation > on ouvre le doc
>> AppWrd.Documents.Open (DocWrd)
>> On Error GoTo 0
>> End If
>> AppActivate AppWrd
>> End Sub
>>
>>
>> Cordialement
>> Pascal
>>
>> "Youky" a écrit dans le message de


news:
>> %
>> > Merci Papou,
>> > Souvent j'ai plaisir à te lire sur Excel pout tirer qlq astuces.
>> > J'ai testé ton code et je vais en erreur en derniere ligne,
>> > le fichier ici Doc1.doc deja ouvert n'est pas non plus selectionné
>> > J'ai Office2000 et VB5
>> > Encore merci
>> > Bruno
>> > "papou" <cestpasbon@çanonplus44.fr> a écrit dans le message news:
>> > #
>> >> Bonjour
>> >> Dim AppWrd As Object
>> >> Dim DocWrd As String
>> >> On Error Resume Next
>> >> Set AppWrd = GetObject(, "Word.Application")
>> >> If Err <> 0 Then _
>> >> Set AppWrd = CreateObject("Word.Application")
>> >> AppWrd.Visible = True
>> >> On Error GoTo 0
>> >> DocWrd = "C:TestsDoc1.doc"
>> >> On Error Resume Next
>> >> AppWrd.Windows("Doc1.doc").Activate
>> >> If Err <> 0 Then AppWrd.Documents.Open (DocWrd)
>> >> On Error GoTo 0
>> >> AppActivate AppWrd
>> >>
>> >> Cordialement
>> >> Pascal
>> >>
>> >> "Youky" a écrit dans le message de
> news:
>> >>
>> >> > Bonjour,
>> >> > J'ouvre un fichier Word avec mon code mais avant de l'ouvrir je
>> >> > voudrais
>> >> > tester si ce fichier est déja ouvert
>> >> > pour ne pas avoir "en lecture seule" ou "notifier" et comment
>> >> > pouvoir
>> >> > l'activer si il est en barre des taches.
>> >> > A savoir que je dois naviguer entre plusieurs fichiers Word
>> >> > j'ai entendu parler du handle mais je sais pas interprêter.
>> >> > voici un bout de code
>> >> >
>> >> > Dim AppWrd As Word.Application
>> >> > Dim DocWrd As Word.Document
>> >> > Set AppWrd = New Word.Application
>> >> > Set DocWrd = AppWrd.Documents.Open("C:Teststoto.doc")
>> >> > Merci et bonne soirée à tous
>> >> >
>> >> >
>> >>
>> >>
>> >
>> >
>>
>>
>
>