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 22/06/2006, 10h01   #1
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
Par défaut [VBA-W]Insertion de fichier

Bonjour,
Je recherche une macro word qui me permettrait d'insérer des fichiers word les uns après les autres.
Je suis totalement débutant dans ce domaine et je galère beaucoup
Il faudrait que cette macro insére des fichiers sans avoir à les mentionner.
Elle insérerait le fichier 1.doc puis 2.doc etc..
Pourriez vous m'aider?
Merci
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 11h44   #2
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
Non ce sont des fichiers qui existent.
Il connais l'ordre d'insertion :
1.doc puis 2.doc, etc jusqu'a ce que n.doc soit introuvable.
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2006, 16h08   #3
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
J'ai trouvé le morceau de code qui permet d'insérer un fichier mais je ne sais pas comment faire dans mon script, une boucle qui insére ces fichiers...
J'ai vraiment besoin qu'on m'aide.
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2006, 08h51   #4
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
Voila le bout de code qui me permet de faire un saut de page :
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 MaMainsaut
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 
rem ----------------------------------------------------------------------
dim args1(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Kind"
args1(0).Value = 3
args1(1).Name = "TemplateName"
args1(1).Value = ""
args1(2).Name = "PageNumber"
args1(2).Value = 0
 
dispatcher.executeDispatch(document, ".uno:InsertBreak", "", 0, args1())
 
 
end sub
puis celui qui me permet d'insérer un fichier :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
sub MaMain
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 
rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Name"
args1(0).Value = "file:///C:/wamp/www/stage/src/tmp/a/implantation.rtf"
args1(1).Name = "Filter"
args1(1).Value = "Rich Text Format"
 
dispatcher.executeDispatch(document, ".uno:InsertDoc", "", 0, args1())
 
 
end sub
J'ai pu trouver ceci en faisant un enregistrement de macro.

Mais comment mixer les deux pour résoudre mon probleme?
(Je ne connais pas le VB)
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 08h45   #5
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
dsl pour le up mais j'ai besoin d'aide.
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 09h00   #6
Rédacteur
 
Homme michel Tanguy
Inscription : août 2005
Messages : 3 317
Détails du profil
Informations personnelles :
Nom : Homme michel Tanguy
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : août 2005
Messages : 3 317
Points : 10 706
Points : 10 706
bonjour

Code :
1
2
Je recherche une macro word qui me permettrait 
d'insérer des fichiers word les uns après les autres.
la macro que tu affiches dans ton message du 23/06 est plutot issue d'Open Office ...


peux tu repréciser ce que tu souhaites exactement


bonne journée
michel
SilkyRoad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 09h36   #7
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
Eh bien voila :
J'ai développez une application qui permet à une entreprise de générer des rapports.
L'application génére des fichiers RTF qui correspondent aux "chapitres" des rapports.
Mais mon patron aimerait qu'il n'y ait qu'un fichier de généré. Il trouve embetant le fait d'ouvrir le 1er fichier rtf puis de faire Insertion -> Fichier pour tous les autres fichiers qui ont été généré.
J'ai donc pensé à une macro qui executerait cette tache automatiquement.
Il y aurait dans un répertoire les fichiers 1.rtf, 2.rtf, 3.rtf, etc
La macro, elle, insérerait alors ces fichiers les uns apres les autres (avec un saut de page entre). Le fichier 1.rtf puis 2.rtf jusqu'à ce que le fichier n.rtf soit introuvable.

Je travail effectivement sous Open Office mais je pensais que ca ne changerait rien. Je vais donc travailler sous MSWord.
Je recherche donc une macro Word qui me permet d'automatiser ceci.
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 09h58   #8
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Il faudrait que cette macro insére des fichiers sans avoir à les mentionner.
Je pense que tu veux dire : sans que l'utilisateur ait à mensionner le nom du fichier... Si c'est ça, tu crées un tableau des noms de fichiers à ouvrir et tu mets ça dans une boucle
Code :
Documents.open filename:=Chemin & NomDuFichier(i)
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 10h07   #9
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
Voila c'est exact . Aucune intervention de l'utilisateur.
Le probleme c'est que je ne connais pas du tout le VB (sa syntaxe, etc).
AU risque de paraitre hyper lourd, pourriez vous me proposez un code source .
Voila l'algo auquel j'ai réfléchi :
Code :
1
2
3
4
5
6
7
i = 0
tant que file_exist(i+".rtf") alors
saut_de_page()
insert_file(i+".rtf")
i++
fintant
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 10h23   #10
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Ok.
Le tableau des noms de fichiers
Code :
LeTableau = Array("", "Chemin\NomFich1.doc", "Chemin\NomFich2.doc", "Chemin\NomFich3.doc")
La boucle
Code :
1
2
3
4
For i = 1 to ubound(LeTableau)
     Documents.open filename:=NomDuFichier(i)
     DoEvents
Next
En vba, l'incrémentation est "i = i + 1" (pas comme en C)

A+

Edit
Code corrigé (DoEvents ajouté)
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 10h28   #11
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
comment savoir si un fichier existe?
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 10h45   #12
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Tu peux faire ça

Code :
1
2
3
Dim ok As Boolean
    ok = Dir("D:\doc\aaaa.doc") = "aaaa.doc"
    MsgBox ok
ou tout autre test qui te conviendrait
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 14h08   #13
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
Okay
Mais quelle est la fonction qui permet l'insertion d'un document? le saut de page?
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 14h25   #14
Rédacteur
 
Homme michel Tanguy
Inscription : août 2005
Messages : 3 317
Détails du profil
Informations personnelles :
Nom : Homme michel Tanguy
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : août 2005
Messages : 3 317
Points : 10 706
Points : 10 706
bonjour

tu peux adapter cette macro qui permet de regrouper tous les documents Word d'un répertoire , dans un autre document existant , nommé "rapport.doc" .
Dans cet exemple , le classeur Excel et les documents Word doivent etre dans le meme répertoire .
remarque : le temps d'action risque d'etre long si tu as beaucoup de documents à coller


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
'nécéssite d'activer la référence Microsoft Word xx.x Object Library
Dim Fichier As String
Dim WordApp As Word.Application
Dim WordDoc1 As Word.document, WordDoc2 As Word.document
Dim DocBase As String
 
'ce classeur doit etre dans le meme repertoire que les documents Word
'les documents Word sont supposés fermés avant le lancement de la macro
 
DocBase = "rapport.doc"
 
Set WordApp = CreateObject("Word.Application") 'creation session Word
WordApp.Visible = False 'word est masqué pendant l'opération
'ouverture du fichier Word
Set WordDoc1 = WordApp.Documents.Open(ThisWorkbook.Path & "\" & DocBase)
 
'liste les fichiers Word
Fichier = Dir(ThisWorkbook.Path & "\*.doc*")
Do While Fichier <> ""
 
    If Fichier <> DocBase Then
        'ouvre tous les autres documents qui ne se nomment pas "Rapport"
        'ouverture du fichier Word
        Set WordDoc2 = WordApp.Documents.Open(ThisWorkbook.Path & "\" & Fichier)
 
        WordDoc2.Content.Copy 'copier
            'trouver la derniere ligne et affecter un saut de page
            'au document de base (rapport.doc)
            With WordDoc1.Content
            .Collapse Direction:=wdCollapseEnd 'derniere ligne
            .InsertBreak Type:=wdSectionBreakNextPage 'insert saut de page
            .Paste 'collage
            End With
 
        WordDoc2.Close 'referme le document
    End If
    Fichier = Dir
Loop
 
WordApp.Visible = True
 
'fermer le document "Rapport.doc" et l'application Word
'WordDoc2.Close
'WordApp.Quit
 
Application.CutCopyMode = False


bon apres midi
michel
SilkyRoad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 14h30   #15
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Donc, si ce coup-ci j'ai bien compris ta question tu veux insérer un document Word dans un document word ?
Si c'est ça, tu te places là où tu veux l'insérer et tu fais

Code :
1
2
    Selection.InsertFile FileName:=Chemin & NomFichierAinsérer, Range:="", _
        ConfirmConversions:=False, Link:=False, Attachment:=False
Obtenu en enregistrant la macro Tu peux essayer, ça mord pas
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 14h49   #16
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
Effectivement c'est ce que j'avais fais pourtant mais comme je n'y connais rien j'étais pas sur du résultat. Merci
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 15h28   #17
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
J'ai a nouveau un probleme:
Voila ce que j'ai codé:
Code :
1
2
3
4
5
6
7
8
9
i = 1
Fichier = Dir("1.rtf")
Do While Fichier <> ""
    Selection.InsertBreak Type:=wdPageBreak
    Selection.InsertFile FileName:=Fichier, Range:="", _
        ConfirmConversions:=False, Link:=False, Attachment:=False
    i = i + 1
    Fichier = Dir(i + ".rtf")
Loop
Le probleme c'est qu'il ne rentre jamais dans la boucle.
Le fichier "1.rtf" existe pourtant.
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 15h56   #18
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 645
Points : 7 645
Attention!

En faisant Dir comme tu le fais, VBA va utiliser Curdir qui n'est probablement pas le chemin de ton fichier.

Donne-lui le chemin complet en récupérant, si nécessaire, le chemin du document où s'exécute la macro (ThisDocument.Path).
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 16h02   #19
Membre actif
 
Avatar de gamerome
 
Inscription : novembre 2004
Messages : 262
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : novembre 2004
Messages : 262
Points : 161
Points : 161
Comment je fais pour récupérer le path?
gamerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 16h03   #20
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 645
Points : 7 645
J'ai édité mon message précédent.
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h23.


 
 
 
 
Partenaires

Hébergement Web