Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/05/2011, 11h05   #1
Futur Membre du Club
 
Grégory MARTIN
Inscription : mars 2010
Messages : 72
Détails du profil
Informations personnelles :
Nom : Grégory MARTIN

Informations forums :
Inscription : mars 2010
Messages : 72
Points : 17
Points : 17
Par défaut Modification d'un document par VBA et instances multiples de Word

Bonjour,

J'aimerais savoir s'il est possible en VBA d'insérer à l'endroit où se trouverait le curseur dans Document1 si Document1 était actif tout en travaillant dans Document2. Document2 serait modifié manuellement ou par programmation en parallèle aux modifications s'effectuant dans Document1.

Choses que je voudrais insérer par VBA dans Document1 :
tableaux, texte (avec modification de mise en forme), images, fichiers word, etc.

Donc je voudrais l'équivalent de Selection.TypeText
ou Selection.InlineShapes.AddPicture
ou Selection.InlineShapes.AddOLEObject
Pour insérer dans Document1 en ayant Document2 ouvert aussi en travaillant manuellement ou par programmation dans Document2.

Merci
sunlover est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 14h16   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 322
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 322
Points : 29 223
Points : 29 223
Salut,

Il n'y a qu'un seul objet selection et il se trouve dans le document actif.

Si le document actif change, l'objet selection change.

Cependant, si on sélectionne du texte dans le doc 1 que l'on bascule dans le doc 2, le texte du doc 1 reste sélectionné et lorsque l'on revient au doc 1 , la sélection està nouveau active et le texte est toujours contenu dans la selection.

Pour exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
Sub TestOli002()
Dim oDoc1 As Document
Dim oDoc2 As Document
 
Set oDoc1 = ActiveDocument
Set oDoc2 = Documents.Add
oDoc1.Activate
Selection.TypeText "texte du document 1"
Selection.HomeKey unit:=wdStory, Extend:=wdExtend
 
oDoc2.Activate
Selection.TypeText "texte du document 2"
oDoc1.Activate
Debug.Print Selection.Range.Text
 
 
End Sub
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 18h10   #3
Futur Membre du Club
 
Grégory MARTIN
Inscription : mars 2010
Messages : 72
Détails du profil
Informations personnelles :
Nom : Grégory MARTIN

Informations forums :
Inscription : mars 2010
Messages : 72
Points : 17
Points : 17
Mon projet doit alterner ajout en fin de document / ajout à un endroit précis.
Il n'est donc pas possible de le faire sans perturber le travail de l'utilisateur dans un autre document ?
sunlover est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 20h37   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 322
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 322
Points : 29 223
Points : 29 223
Salut,

J'avais pas lu cette particularité dans le premier message !

Il suffit d'ouvrir une instance de Word pour modifier un document.

Mais si tu pouvais être plus clair et plus complet, ce serait pas plus mal.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 10h41   #5
Futur Membre du Club
 
Grégory MARTIN
Inscription : mars 2010
Messages : 72
Détails du profil
Informations personnelles :
Nom : Grégory MARTIN

Informations forums :
Inscription : mars 2010
Messages : 72
Points : 17
Points : 17
Citation:
Envoyé par Heureux-oli Voir le message
Salut,

Mais si tu pouvais être plus clair et plus complet, ce serait pas plus mal.
Contexte : L'utilisateur veut pouvoir travailler dans word sans être perturbé par une macro qu'il a lancée pour générer automatiquement un document.

C'est dans ce document que, parfois je dois ajouter du texte à la suite, parfois à un endroit précis, par exemple dans un tableau word que je viens de créer par
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
doc.Characters.Last.Select
Selection.Collapse wdCollapseEnd
doc.Tables.Add Selection.Range, 1, 1
doc.Tables(1).Cell(1,1).Select
Selection.TypeText "Hello"
doc.Characters.Last.Select
Selection.Collapse wdCollapseEnd
Selection.InsertParagraphAfter
Selection.TypeText "Hello à la fin du doc"
Selection.Collapse wdCollapseEnd
Selection.InsertParagraphAfter
Selection.Collapse wdCollapseEnd
Set tabl = doc.Tables.Add Selection.Range, 2, 2
tabl.Cell(1,2).Select
Selection.TypeText "2ème tableau"
doc.Characters.Last.Select
'Insertion à la fin du document
Ma question est donc est-il possible de modifier doc, de la même manière que le code ci-dessus le ferait, sans que doc soit actif, car l'utilisateur travaille dans document 2. C'est donc document 2 qui est actif. Il faut que le code ci-dessus agisse sur doc et laisse mon document 2 tranquille et qu'il reste actif pour qu'on puisse quand même continuer à écrire dedans.
Dans le projet, c'est une boucle donc il faudrait qu'on puisse quand même travailler dans doc 2 sans avoir à attendre la fin de la macro.

Il peut y avoir des changements de police par VBA que je veux garder donc avec l'objet Range, ça me semble compliqué.
sunlover est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 18h48   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 322
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 322
Points : 29 223
Points : 29 223
Salut,

Essaie ce code ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
Sub Testolivier0012()
Dim wApp As Word.Application
Dim odoc1 As Document
Dim odoc2 As Document
Dim oTbl As Table
 
 
Set odoc1 = ActiveDocument
Set wApp = New Word.Application
Set odoc2 = wApp.Documents.Add
 
 
odoc2.Select
odoc2.Range.Text = "Salut comment vas tu bien ?"
 
Selection.TypeParagraph
Set oTbl = odoc2.Tables.Add(Range:=odoc2.Paragraphs(1).Range, Numrows:=5, numcolumns:=5)
oTbl.Cell(1, 1).Range.Text = "Nouveau texte"
odoc1.Select
Selection.TypeText "Le texte du premier document"
wApp.Visible = True
 
End Sub
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 12h31   #7
Futur Membre du Club
 
Grégory MARTIN
Inscription : mars 2010
Messages : 72
Détails du profil
Informations personnelles :
Nom : Grégory MARTIN

Informations forums :
Inscription : mars 2010
Messages : 72
Points : 17
Points : 17
Merci, mais après avoir testé, je me rends compte que le document ne contient que le tableau et que "Salut comment vas tu bien a été effacé.
J'ai modifié ce code pour que ce ne soit plus le cas. Je l'ai mis dans une boucle pour que l'exécution soit assez longue pour voir si l'utilisateur peut entre temps modifier un autre document.

Tant que la macro s'exécute, l'utilisateur ne peut modifier le document à partir de laquelle celle-ci a été lancée.

Est-il possible de lancer une nouvelle application et lui demander de modifier elle-même odoc2 ? Qu'en est-il si la macro a des arguments ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub Testolivier0012_Modifie()
Dim wApp As Word.Application
Dim odoc1 As Document
Dim odoc2 As Document
Dim oTbl As Table
 
Set odoc1 = ActiveDocument
Set wApp = New Word.Application
Set odoc2 = wApp.Documents.Add()
wApp.Visible = True
Dim s As String
Set odoc2 = Application.Documents.Add()
While i < 39
i = i + 1
odoc2.Characters.Last.Select
wApp.Selection.Collapse wdCollapseStart
Set oTbl = odoc2.Tables.Add(Range:=wApp.Selection.Range, Numrows:=5, numcolumns:=5)
oTbl.Style = "Table Grid"
oTbl.Cell(1, 1).Range.Select
wApp.Selection.TypeText "Nouveau texte"
odoc2.Characters.Last.Select
wApp.Selection.Collapse wdCollapseEnd
wApp.Selection.TypeParagraph
Wend
wApp.Selection.Collapse wdCollapseEnd
Set oTbl = odoc2.Tables.Add(wApp.Selection.Range, 5, 5)
oTbl.Style = "Table Grid"
oTbl.Cell(1, 1).Select
wApp.Selection.TypeText "Hello"
End Sub
sunlover est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 15h09   #8
Futur Membre du Club
 
Grégory MARTIN
Inscription : mars 2010
Messages : 72
Détails du profil
Informations personnelles :
Nom : Grégory MARTIN

Informations forums :
Inscription : mars 2010
Messages : 72
Points : 17
Points : 17
Suis-je bête...
Pour arriver à générer un document sans perturber l'utilisateur,
il suffit que celui-ci lance le document word qui contient la macro avec la commande :

Code :
winword.exe /x MaMacro.docm
Je suppose qu'on ne va jamais enregistrer un document dans C:\Program Files\Microsoft Office\Office14

On peut donc créer un fichier .cmd qui se trouve dans le répertoire où on a stocké MaMacro.docm et qui contient les lignes suivantes:

Code :
1
2
Set a= %cd%\MaMacro.docm
"C:\Program Files\Microsoft Office\Office14\winword.exe" /x %a%
/x force word à ouvrir le document MaMacro.docm dans une nouvelle instance. Ainsi, pas de gêne pour l'utilisateur...
sunlover est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h50.


 
 
 
 
Partenaires

Hébergement Web