OVH Cloud OVH Cloud

commande vba sous excel

18 réponses
Avatar
jujuetd63
Bonjour,

je débute sur vba et je dois créer une application dans excel .
le but est du prendre le contenu de plusieurs documents word de les stocker dans des variables dans excel puis de les combiner pour en faire un seul document world.
exemple une lampe personnalisable

doc1 = type d'ampoule
doc2 = type de pied
doc3 = type bouton

doc final = notice de montage

Je dois créer au final un manuel de référence pour les clients en fonction des chois de celui ci.

je sais comment je souhait structurer mon interface excel mais je ne connais pas la syntaxe pour:

prendre le contenu d'un word
créer un doc word.

pouvez vous m'aider
merci

8 réponses

1 2
Avatar
MichD
Oublie la dernière proposition, elle ne fonctionne pas!
MichD
Avatar
jujuetd63
Le mardi 07 Avril 2020 à 16:16 par MichD :
dans le doc final toutes les images ont disparues
savez comment je peux régler le problème.
merci
bonne journée
Essaie comme ceci :
'-------------------------------------------------
Sub test()
Dim Wd As Object, MyDoc As Object
Dim Rg As Object, Dc As Object
Dim MyPath As String, DocName As Object
Dim MyFile As String
'Chemin du répertoire où sont les différents fichiers
Word.
'Tous les fichiers de ce répertoire seront traités.
MyPath = "E:Téléchargements_Test"
MyFile = Dir(MyPath & "*.do*")
Application.ScreenUpdating = False
Set Wd = CreateObject("Word.Application")
Wd.Visible = True
'Le contenu de tous les fichiers sera ajouté
'à ce nouveau document.
Set MyDoc = Wd.Documents.Add
MyDoc.Paragraphs.Add
Do While MyFile <> ""
Set Dc = Wd.Documents.Open(MyPath & MyFile)
Set Rg = MyDoc.Range
Rg.WholeStory
Rg.Paragraphs.Add
Rg.InsertAfter Dc.Name
Set DocName = Rg.Paragraphs(Rg.Paragraphs.Count).Range
With DocName
.Font.Bold = True
.Font.Size = 14
.Font.Color = vbBlue
End With
Rg.Paragraphs.Add
Set DocName = Rg.Paragraphs(Rg.Paragraphs.Count).Range
With DocName
.Font.Bold = False
.Font.Size = 11
.Font.Color = wdColorAutomatic
End With
Rg.InsertAfter Dc.Content
Dc.Close False
MyFile = Dir()
Loop
Application.ScreenUpdating = True
End Sub
'-------------------------------------------------
MichD
bonjour,
Désolé de vous ennuyer avec se projet, mais le dernier code que vous m'avez donné fait la même chose que l'autre.
la mise en page et conservé mais les images, graphiques et tableaux sont remplacé par un "/".
je ne sais pas si le problème est dans le code ou dans le format des documents ou des images, des graphiques (standard word) ou des tableaux word.
merci pour votre aide j'ai pris contacte avec Microsoft pour savoir si se que veux faire est possible.
Si vous avez d'autres idées je suis preneur.
Pour info j'ai un pack office 2016.
bonne journée
Avatar
MichD
merci pour votre aide j'ai pris contacte avec Microsoft pour savoir si se que
veux faire est possible.
Si vous avez d'autres idées je suis preneur.
Pour info j'ai un pack office 2016.
bonne journée

C'est sûrement possible. Tu es sur un forum Excel et non Word. Moi, j'ai
une connaissance très limitée du modèle objet Word pour la programmation
en VBA. Je réussis à copier le contenu incluant les images d'un fichier
Word vers un autre fichier Word, mais j'éprouve de la difficulté à faire
en sorte que la copie des autres fichiers s'ajoute harmonieusement l'un
à la suite de l'autre.
Tu devrais consulter un forum Word, tu aurais plus de chance d'obtenir
ce que tu désires. À la retraite, je n'ai pas beaucoup d'intérêt à
pousser plus loin l'apprentissage de la programmation avec les objets
Word que j'utilise que pour une lettre à l'occasion.
Salutations,
MichD
Avatar
jujuetd63
Le jeudi 02 Avril 2020 à 14:23 par jujuetd63 :
Bonjour,
je débute sur vba et je dois créer une application dans excel .
le but est du prendre le contenu de plusieurs documents word de les stocker
dans des variables dans excel puis de les combiner pour en faire un seul
document world.
exemple une lampe personnalisable
doc1 = type d'ampoule
doc2 = type de pied
doc3 = type bouton
doc final = notice de montage
Je dois créer au final un manuel de référence pour les
clients en fonction des chois de celui ci.
je sais comment je souhait structurer mon interface excel mais je ne connais
pas la syntaxe pour:
prendre le contenu d'un word
créer un doc word.
pouvez vous m'aider
merci
merci pour l'aide je vais suivre votre conseil.
bonne journée
Avatar
MichD
Voici une manière de faire mais avec l'application Word.
A ) Ouvre un document Word
B ) Ajoute la macro suivante.
C ) Lance l'exécution
La macro va ouvrir une fenêtre afin que tu puisses choisir le répertoire
où sont situés tous les fichiers à réunir dans un seul.
Cette procédure provient du site Web suivant. Je l'ai testée et cela
fonctionne correctement. Sur le même site, tu en as un autre si tu préfères.
https://www.datanumen.com/blogs/2-ways-quickly-merge-multiple-word-documents-one-via-vba/
À cette ligne de code :
Type:=wdSectionBreakContinuous ' OU Type:=wdPageBreak
Si tu désires que chaque document Word que tu copies se fasse à partir
d'une nouvelle page, tu choisis Type:=wdPageBreak , ou si la copie doit
se faire immédiatement à la suite du document précédent
wdSectionBreakContinuous
'-----------------------------------------------------
Sub MergeFilesInAFolderIntoOneDoc()
Dim dlgFile As FileDialog
Dim objDoc As Document, objNewDoc As Document
Dim StrFolder As String, strFile As String
Set dlgFile = Application.FileDialog(msoFileDialogFolderPicker)
With dlgFile
If .Show = -1 Then
StrFolder = .SelectedItems(1) & ""
Else
MsgBox ("No folder is selected!")
Exit Sub
End If
End With
strFile = Dir(StrFolder & "*.do*", vbNormal)
Set objNewDoc = Documents.Add
While strFile <> ""
Set objDoc = Documents.Open(FileName:=StrFolder & strFile)
objDoc.Range.Copy
objNewDoc.Activate
With Selection
.Paste
.InsertBreak Type:=wdSectionBreakContinuous ' Type:=wdPageBreak
.Collapse wdCollapseEnd
End With
objDoc.Close SaveChanges:=wdDoNotSaveChanges
strFile = Dir()
Wend
objNewDoc.Activate
Selection.EndKey Unit:=wdStory
Selection.Delete
End Sub
'-----------------------------------------------------
MichD
Avatar
jujuetd63
Le jeudi 02 Avril 2020 à 14:23 par jujuetd63 :
Bonjour,
je débute sur vba et je dois créer une application dans excel .
le but est du prendre le contenu de plusieurs documents word de les stocker
dans des variables dans excel puis de les combiner pour en faire un seul
document world.
exemple une lampe personnalisable
doc1 = type d'ampoule
doc2 = type de pied
doc3 = type bouton
doc final = notice de montage
Je dois créer au final un manuel de référence pour les
clients en fonction des chois de celui ci.
je sais comment je souhait structurer mon interface excel mais je ne connais
pas la syntaxe pour:
prendre le contenu d'un word
créer un doc word.
pouvez vous m'aider
merci
merci beaucoup pour votre aide.
je vais voir comment je peux utiliser ce que vous m'avez envoyé.
cordialement
Avatar
MichD
Bonjour,
J'avais un peu de temps et j'ai adapté la procédure soumise de mon
dernier message pour Excel
Colle cette procédure dans un module standard.
Le fichier final deviendra visible seulement à la fin de l'opération.
Par conséquent, tu ne t’inquiètes pas si cela prend quelques secondes(?)
selon le nombre de documents à traiter et que rien ne passe à l'écran.
Même chose pour cette procédure, tu peux choisir d'insérer les documents
l'un à la suite de l'autre, ou chaque document s'ajoute sur la page
suivante dans le nouveau document. Pour ce faire, à toi de choisir ce
que tu désires dans la ligne de code suivante dans la procédure.
Type:=wdSectionBreakContinuous ' OU wdPageBreak
'-----------------------------------------------
Sub MergeFilesInAFolderIntoOneDoc()
Dim Wd As Object
Dim dlgFile As FileDialog
Dim objDoc As Object, objNewDoc As Object
Dim StrFolder As String, strFile As String
Set dlgFile = Application.FileDialog(msoFileDialogFolderPicker)
With dlgFile
If .Show = -1 Then
StrFolder = .SelectedItems(1) & ""
Else
MsgBox ("No folder is selected!")
Exit Sub
End If
End With
strFile = Dir(StrFolder & "*.do*", vbNormal)
Set Wd = CreateObject("Word.application")
Set objNewDoc = Wd.Documents.Add
objNewDoc.Paragraphs.Add
While strFile <> ""
Set objDoc = Wd.Documents.Open(Filename:=StrFolder & strFile)
objDoc.Range.Copy
objNewDoc.Activate
With Wd.Selection
.Paste
.Collapse wdCollapseEnd
.InsertBreak Type:=wdSectionBreakContinuous ' OU wdPageBreak
End With
objDoc.Close SaveChanges:=wdDoNotSaveChanges
strFile = Dir()
Wend
objNewDoc.Activate
Wd.Selection.EndKey unit:=wdStory
Wd.Selection.Delete
Wd.Visible = True
End Sub
'-----------------------------------------------
MichD
Avatar
MichD
Un petit oubli lors de mon dernier message, je n'ai pas déclaré les
constantes de l'application Word utilisées dans la procédure.
Comme je n'ai pas déclaré la référence Word dans le projetVBA du
classeur, Excel ne peut pas connaître la valeur numérique de ces
constantes textes.
2 Choix :
A ) déclarer les constantes en début de procédure
B ) utiliser la valeur numérique de ces constantes au lieu de la valeur
texte de ces constantes directement dans le code. Par conséquent, nul
besoin de déclarer les constantes au début de la procédure
Voici la version finale:
'---------------------------------------------
Sub MergeFilesInAFolderIntoOneDoc()
Const wdPageBreak = 7
Const wdSectionBreakContinuous = 3
Const wdCollapseEnd = 0
Const wdDoNotSaveChanges = 0
Const wdStory = 6
Dim Wd As Object, dlgFile As FileDialog
Dim objDoc As Object, objNewDoc As Object
Dim StrFolder As String, strFile As String
Set dlgFile = Application.FileDialog(msoFileDialogFolderPicker)
With dlgFile
If .Show = -1 Then
StrFolder = .SelectedItems(1) & ""
Else
MsgBox ("No folder is selected!")
Exit Sub
End If
End With
strFile = Dir(StrFolder & "*.do*", vbNormal)
Set Wd = CreateObject("Word.application")
Set objNewDoc = Wd.Documents.Add
objNewDoc.Paragraphs.Add
While strFile <> ""
Set objDoc = Wd.Documents.Open(Filename:=StrFolder & strFile)
objDoc.Range.Copy
objNewDoc.Activate
With Wd.Selection
.Paste
.Collapse wdCollapseEnd
.InsertBreak Type:=wdSectionBreakContinuous 'OU wdPageBreak
End With
objDoc.Close SaveChanges:=wdDoNotSaveChanges
strFile = Dir()
Wend
objNewDoc.Activate
Wd.Selection.EndKey unit:=wdStory
Wd.Selection.Delete
Wd.Visible = True
End Sub
'---------------------------------------------
MichD
1 2