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

10 réponses

1 2
Avatar
MichD
Bonjour,
Voici un exemple de code. Tu mets ce code dans un module standard
d'Excel. La procédure ajoute dans un fichier de type Word, le contenu
des fichiers Word dans le répertoire spécifié. Amuse-toi bien!
'----------------------------------
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 = "c:UsersYour_ProfileDocuments"
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
Do While MyFile <> ""
Set Dc = Wd.Documents.Open(MyPath & MyFile)
Set Rg = MyDoc.Content
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
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
je vais essayer
bonne journée
Avatar
jujuetd63
Le jeudi 02 Avril 2020 à 16:02 par MichD :
Bonjour,
Voici un exemple de code. Tu mets ce code dans un module standard
d'Excel. La procédure ajoute dans un fichier de type Word, le contenu
des fichiers Word dans le répertoire spécifié. Amuse-toi
bien!
'----------------------------------
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 = "c:UsersYour_ProfileDocuments"
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
Do While MyFile <> ""
Set Dc = Wd.Documents.Open(MyPath & MyFile)
Set Rg = MyDoc.Content
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,
après de nombreux essais, je n'arrive pas à faire fonctionner le code si dessus.
pour commencer:
à la ligne MyFile = Dir(MyPath & "*.do*") rien ne se passe .
j'ai essayer avec un nom de fichier et j'ai peu avancer dans le programme jusqu'à la ligne:
set Rg =MyDoc.content
mais je reçois un message d'erreur client déconnecté
cette erreur est elle lier au nom du fichier que j'ai remplacé dans la ligne Myfile=…?
si oui pouvez vous me donner un exemple pour un fichier dont le nom serai "feuille 1"
pour la ligne Myfile=….
les autres documents sont pour mes testes "feuille 2" et "feuille 3"
Tous sont dans le même répertoire.
Pour finir cette méthode peut elle être utilisé si les documents sont dans des répertoires différents?
merci
bonne journée
Avatar
MichD
Le 03/04/20 à 05:04, jujuetd63 a écrit :
Le jeudi 02 Avril 2020 à 16:02 par MichD :
Bonjour,
Voici un exemple de code. Tu mets ce code dans un module standard
d'Excel. La procédure ajoute dans un fichier de type Word, le contenu
des fichiers Word dans le répertoire spécifié. Amuse-toi
bien!
'----------------------------------
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 = "c:UsersYour_ProfileDocuments"
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
Do While MyFile <> ""
Set Dc = Wd.Documents.Open(MyPath & MyFile)
Set Rg = MyDoc.Content
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,
après de nombreux essais, je n'arrive pas à faire fonctionner le code si
dessus.
pour commencer:
à la ligne MyFile = Dir(MyPath & "*.do*") rien ne se passe .

Bonjour,
MyPath est une variable contenant le chemin (répertoire) où sont les
fichiers Word que tu veux rassembler dans un seul fichier Word.
Dans la procédure, la variable MyPath est définie ainsi :
MyPath = "c:UsersYour_ProfileDocuments"
Tu dois l'adapter selon ton environnement, ce chemin "MyPath" dans
l'exemple n'existe pas, c'est à toi de le définir afin d'indiquer à la
procédure où sont ces fichiers Word sur ton ordinateur.
MichD
Avatar
jujuetd63
Le vendredi 03 Avril 2020 à 12:36 par MichD :
Le 03/04/20 à 05:04, jujuetd63 a écrit :
Le jeudi 02 Avril 2020 à 16:02 par MichD :
Bonjour,
Voici un exemple de code. Tu mets ce code dans un module standard
d'Excel. La procédure ajoute dans un fichier de type Word, le contenu
des fichiers Word dans le répertoire spécifié. Amuse-toi
bien!
'----------------------------------
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 = "c:UsersYour_ProfileDocuments"
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
Do While MyFile <> ""
Set Dc = Wd.Documents.Open(MyPath & MyFile)
Set Rg = MyDoc.Content
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,
après de nombreux essais, je n'arrive pas à faire fonctionner le
code si
dessus.
pour commencer:
à la ligne MyFile = Dir(MyPath & "*.do*") rien ne se
passe .
Bonjour,
MyPath est une variable contenant le chemin (répertoire) où sont
les
fichiers Word que tu veux rassembler dans un seul fichier Word.
Dans la procédure, la variable MyPath est définie ainsi :
MyPath = "c:UsersYour_ProfileDocuments"
Tu dois l'adapter selon ton environnement, ce chemin "MyPath" dans
l'exemple n'existe pas, c'est à toi de le définir afin d'indiquer
à la
procédure où sont ces fichiers Word sur ton ordinateur.
MichD
bonjour,
j'ai continuer à faire des essais en tenant compte de vos réponses, mais je reçois toujours le même message d'erreur :
client déconnecté
quand je lis la ligne
Set Rg = MyDoc.Content
grace à différent point d'arrêt, j'ai que la variable MyDoc prend la valeur
Set MyDoc = Wd.Documents.Add
Pouvez vous me dire si cela est normal et comment rectifier se problème si il y en a un ?
merci
bonne journée
<aucune variable>
à la ligne
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
bonjour,
il semble que j'ai fait un erreur de copier collé dans ma réponse précédente donc je rectifie:
c'est à la ligne
Set MyDoc = Wd.Documents.Add
que la variable MyDoc prend la valeur
<aucune variable>
et c'est à la ligne
Set Rg = MyDoc.Content
que j'ai le message d'erreur
client déconnecté
voila je pense que cela est plus clair.
Pouvez vous me dire si cela est normal et comment rectifier se problème si il y en a un ?
merci
bonne journée
Avatar
MichD
Bonjour,
Effectivement, tu as raison.
Le document que la procédure crée et qui reçoit le contenu de tous les
autres documents Word du répertoire spécifié est vide. Par conséquent,
l'exécution de la procédure bloque sur cette ligne de code justement à
cause du fait que le document initial est vide au lancement de la
procédure. Le "Content" est inexistant.
Set Rg = MyDoc.Content
Pour remédier à la situation, j'ai simplement ajouté une ligne de code
insérant la date en tout début du document. À la fin de la procédure, tu
pourras effacer cette date si tu le désires.
'Le contenu de tous les fichiers sera ajouté
'à ce nouveau document.
Set MyDoc = Wd.Documents.Add
MyDoc.Range.Text = Date <<<<======Ligne de code ajoutée
Voici la nouvelle procédure incluant la ligne de code ajoutée.
'-------------------------------------------------
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:Documents"
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.Range.Text = Date
Do While MyFile <> ""
Set Dc = Wd.Documents.Open(MyPath & MyFile)
Set Rg = MyDoc.Content
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
Avatar
jujuetd63
Le lundi 06 Avril 2020 à 16:15 par MichD :
Bonjour,
Effectivement, tu as raison.
Le document que la procédure crée et qui reçoit le contenu
de tous les
autres documents Word du répertoire spécifié est vide. Par
conséquent,
l'exécution de la procédure bloque sur cette ligne de code
justement à
cause du fait que le document initial est vide au lancement de la
procédure. Le "Content" est inexistant.
Set Rg = MyDoc.Content
Pour remédier à la situation, j'ai simplement ajouté une
ligne de code
insérant la date en tout début du document. À la fin de la
procédure, tu
pourras effacer cette date si tu le désires.
'Le contenu de tous les fichiers sera ajouté
'à ce nouveau document.
Set MyDoc = Wd.Documents.Add
MyDoc.Range.Text = Date <<<<======Ligne de code ajoutée
Voici la nouvelle procédure incluant la ligne de code ajoutée.
'-------------------------------------------------
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:Documents"
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.Range.Text = Date
Do While MyFile <> ""
Set Dc = Wd.Documents.Open(MyPath & MyFile)
Set Rg = MyDoc.Content
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,
je vous remercie pour le code je vais le tester et essayer avec mes doc test et tenter de le comprendre.
je vous souhaite une bonne journée
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
bonjour,
J'ai fait plusieurs test et le programme fonctionne merci encore.
J'ai cependant un problème les documents que je dois assembler sont des doc techniques donc avec des images.
j'ai donc inclus des images dans mes doc test.
dans le doc final toutes les images ont disparues
savez comment je peux régler le problème.
merci
bonne journée
Avatar
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
1 2