Bonjour,
Je souhaiterais copier un tableau ou une plage de données de excel vers word.
Quelqu'un pourrait-il m'aider svp ?
Bonjour,
Je souhaiterais copier un tableau ou une plage de données de excel vers word.
Quelqu'un pourrait-il m'aider svp ?
Bonjour,
Comme beaucoup de contributeurs, je n'ouvre jamais les fichiers joints.
Qu'as-tu déjà codé, pour ce projet ?
Pour pouvoir t'aider, j'aimerais savoir
- Pour Excel, sais-tu ce qu'est une cellule ou plage nommées ?
- Pour Word, sais-tu ce qu'est un signet ?
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Comme Philippe Tulliez ( ), je n'ouvre pas les fichiers joints et comme tu ne donnes quasiment pas d'informations dans ta demande, ma réponse sera générique.
Pour la copie dans Excel, utilise la méthode Copy de Range.
https://msdn.microsoft.com/fr-fr/lib...0(v=office.15)
Pour coller dans Word, méthode Paste (ou une de ses petites soeurs) appliqué au Range de l'emplacement souhaité.
https://docs.microsoft.com/fr-fr/off...rd.range.paste
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
Bonjour
Pour l'instant j'arrive à ouvrir Word avec les signets mais pas à y insérer les données de mon tableau
Voici ce que j'ai fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Sub exportDonneesDansSignetsWord() Dim AppWord As Word.Application Dim WordDoc As Word.Document Dim i As Byte Set AppWord = CreateObject("word.application") 'ouvre session word Set WordDoc = AppWord.Documents.Open("E:\Essai Excel vers Word.docm") 'ouvre document Word Attention au chemin!! AppWord.Visible = True 'word affiché pendant l'operation For i = 1 To 50 Range("TABLEAU" & i).Copy 'les signets du document Word sont nommés Tableau1, Tableau2 WordDoc.Bookmarks("Tableau1" & i).Range.Select(B4:D9) AppWord.Selection.Paste Next i AppWord.Visible = True 'affiche le document Word WordDoc.Close False 'ferme le document word en sauvegardant les données 'AppWord.Quit 'ferme la session Word End Sub
Bonjour
J'ai modifié mon code mais il me met une erreur 1004
Je voudrais qu'à la fin du traitement le document word s'ouvre et reste visible
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Private Sub CommandButton1_Click() Dim AppWord As Word.Application Dim WordDoc As Word.Document Dim i As Byte Set AppWord = CreateObject("word.application") 'ouvre session word Set WordDoc = AppWord.Documents.Open("E:\Essai Excel vers Word.docm") 'ouvre document Word Attention au chemin!! AppWord.Visible = True 'word affiché pendant l'operation For i = 1 To 50 Range("TABLEAU" & i).Copy 'les signets du document Word sont nommés Tableau1, Tableau2 WordDoc.Bookmarks("Tableau" & i).Range.Select AppWord.Selection.Paste Next i AppWord.Visible = True 'affiche le document Word WordDoc.Close False 'ferme le document word en sauvegardant les données 'AppWord.Quit 'ferme la session Word End Sub
Merci
Bonjour,
La procédure que j'ai développée fonctionne avec côté Excel une cellule ou plage de cellules nommée (Gestionnaire des noms) et côté Word un signet
Autrement dit, si tu as un signet qui se nomme Adresse dans le document qui te sert de modèle, tu dois avoir une cellule ou une plage (si tableau) nommée Adresse.
Si le signet n'existe pas dans Word, la fonction renvoie False dans le cas contraire True
Code de la procédure
Donc si je me réfère au code que tu as publié, voici la ligne de code pour invoquer cette procédure CopyXls2Wrd WordDoc, ThisWorkbook.Names("Contact") en copiant la cellule nommée Contact vers le signet de même nom.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Function CopyXls2Wrd(wrdDoc As Word.Document, oName As Name) As Boolean ' Philippe Tulliez www.magicoffice.be ' Copie la cellule ou plage de cellules définie par l'argument oName ' Renvoie True si la copie a bien eu lieu ' Arguments ' wrdDoc ' Document qui contient le signet qui contiendra la ou les cellules copiées dans Excel ' oName ' Nom de la cellule ou plage de cellules à copier (Le signet doit avoir le même nom) Dim oRng As Range Dim Place As Long Dim BookmarkName As String Dim appWrd As Word.Application Set appWrd = wrdDoc.Parent Set oRng = oName.RefersToRange ' Objet Range à copier ' Place = wrdDoc.Bookmarks(BookmarkName).Range.Start BookmarkName = oName.Name With wrdDoc If .Bookmarks.Exists(BookmarkName) Then If oRng.Count = 1 Then .Bookmarks(BookmarkName).Range.Text = oRng.Text Else oRng.Copy .Bookmarks(BookmarkName).Select appWrd.Selection.PasteSpecial DataType:=9, Placement:=0 Application.CutCopyMode = False End If CopyXls2Wrd = True End If End With Set appWrd = Nothing: Set oRng = Nothing End Function
Voici ma procédure de test qui invoque la fonction CopyXls2Wrd. Le document Word, reste ouvert et n'est pas sauvé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 T() ' Nécessite de référencer Microsoft Word nn.n Object Library ' Déclaration Const SubFolder As String = "Template" ' Sous-répertoire où se trouve le modèle Const TemplateName As String = "Courrier.Docx" ' Nom du modèle Dim appWrd As Word.Application Dim wrdDoc As Word.Document Dim appPath As String, wrdFullName As String ' appPath = ThisWorkbook.Path wrdFullName = appPath & "\" & SubFolder & "\" & TemplateName Set appWrd = CreateObject("Word.Application") Set wrdDoc = appWrd.Documents.Add(Template:=wrdFullName) ' With appWrd .Visible = True: appWrd.Activate End With ' ' Copie des cellules et plages de cellules vers les signets CopyXls2Wrd wrdDoc, ThisWorkbook.Names("bmOffre") CopyXls2Wrd wrdDoc, ThisWorkbook.Names("bmName") ' Set appWrd = Nothing: Set wrdDoc = Nothing End Sub
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Bonjour,
Je ne comprends pas pourquoi dans la déclaration des variables il me met une erreur
merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Sub T() Dim appWrd As Word.Application
Bonjour,
Et bien tout simplement parce-que le complément Word n'est pas référencé.
C'est pourtant indiqué en début de procédure 'Nécessite de référencer Microsoft Word nn.n Object Library
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Bonjour,
Si tu as utilisé la procédure nommée T, les deux premières lignes de cette procédures définissent le nom du sous-répertoire où se trouve le modèle (c'est à dire le document où se trouve les signets qui devront contenir le résultat des cellules copiées depuis excel) et le nom du modèle (moi j'utilise un document suffixé docx mais tu peux utiliser une dotx) qui donc doit être présent dans sous-répertoire.
J'ai bien documenté ces deux lignes dans la procédure publiée donc si tu as mis les bonnes valeurs, tu devrais voir apparaître ton document Word basé sur ce modèle
Pour info, un sous-répertoire signifie que le classeur Excel où se trouve le code doit être dans le dossier parent puisque
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Const SubFolder As String = "Template" ' Sous-répertoire où se trouve le modèle Const TemplateName As String = "Courrier.Docx" ' Nom du modèle
- la ligne 10 : assigne le répertoire de ThisWorkbook appPath = ThisWorkbook.Path
- la ligne 11 : Construit le nom complet soit le chemin où se trouve le classeur Excel + le sous-répertoire + le nom du modèle wrdFullName = appPath & "\" & SubFolder & "\" & TemplateName
donc si tu respectes cette contrainte, le document Word basé sur le modèle nommé comme définit dans TemplateName et présent dans SubFolder va s'ouvrir
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Bonjour,
J'ai respecté ce que tu m'as dit mais maintenant j'ai une erreur à la ligne suivante
chemin des fichiers : C:\Users\b_leb\OneDrive\Documents\PROJET DTO
Je te met les fichiers sur lesquels je travaille
Code : Sélectionner tout - Visualiser dans une fenêtre à part Function CopyXls2Wrd(wrdDoc As Word.Document, oName As Name) As Boolean
Fichier excel nommé test1
type désignation constructeur classification N° série 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 6 7 8 9 10 7 8 9 10 11
Fichier Word nommé FSMT
Pour l'instant en utilisant tes indications j'ai le code suivant:FORMULAIRE DE SORTIE DE MATERIEL TECHNIQUE
(RESPONSABLE)
Certifie que le matériel suivant
signet Copie Tableau excel
A ETE CONFIE AU
NOM PRENOM
POUR LA DUREE
Période du xx au xx mois année
REMARQUES PARTICULIERES (EVENTUELLES)
Merci car je débute et les recherches de solutions sur internet ne sont pas claires ou ne correspondent pas à ce que je veux faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
47
48
49
50
51
52
53
54
55
56 Function CopyXls2Wrd(wrdDoc As Word.Document, oName As Name) As Boolean ' Philippe Tulliez <a href="http://www.magicoffice.be" target="_blank">www.magicoffice.be</a> ' Copie la cellule ou plage de cellules définie par l'argument oName ' Renvoie True si la copie a bien eu lieu ' Arguments ' wrdDoc ' Document qui contient le signet qui contiendra la ou les cellules copiées dans Excel ' oName ' Nom de la cellule ou plage de cellules à copier (Le signet doit avoir le même nom) Dim oRng As Range Dim Place As Long Dim BookmarkName As String Dim appWrd As Word.Application Set appWrd = wrdDoc.Parent Set oRng = oName.RefersToRange ' Objet Range à copier ' Place = wrdDoc.Bookmarks(BookmarkName).Range.Start BookmarkName = oName.Name With wrdDoc If .Bookmarks.Exists(BookmarkName) Then If oRng.Count = 1 Then .Bookmarks(BookmarkName).Range.Text = oRng.Text Else oRng.Copy .Bookmarks(BookmarkName).Select appWrd.Selection.PasteSpecial DataType:=9, Placement:=0 Application.CutCopyMode = False End If CopyXls2Wrd = True End If End With Set appWrd = Nothing: Set oRng = Nothing End Function Sub T() ' Nécessite de référencer Microsoft Word nn.n Object Library ' Déclaration Const SubFolder As String = "C:\Users\b_leb\OneDrive\Documents\PROJET DTO" ' Sous-répertoire où se trouve le modèle Const TemplateName As String = "FSMT.Docm" ' Nom du modèle Dim appWrd As Word.Application Dim wrdDoc As Word.Document Dim appPath As String, wrdFullName As String ' appPath = ThisWorkbook.Path wrdFullName = appPath & "\" & SubFolder & "\" & "C:\Users\b_leb\OneDrive\Documents\PROJET DTO\FSMT.Docm" Set appWrd = CreateObject("Word.Application") Set wrdDoc = appWrd.Documents.Add(Template:=wrdFullName) ' With appWrd .Visible = True: appWrd.Activate End With ' ' Copie des cellules et plages de cellules vers les signets CopyXls2Wrd wrdDoc, ThisWorkbook.Names("bmOffre") CopyXls2Wrd wrdDoc, ThisWorkbook.Names("bmName") ' Set appWrd = Nothing: Set wrdDoc = Nothing End Sub
Mettre des actions dans une Function, c'est vraiment déconseillé.
Une fonction sert à calculer en fonction de paramètres et à renvoyer une valeur, pas à faire des modification par elle-même.
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
Bonjour Menhir,
Je ne suis pas d'accord avec toi. Il est tout à fait possible d'utiliser une fonction qui trie, exporte, etc.Une fonction sert à calculer en fonction de paramètres et à renvoyer une valeur, pas à faire des modification par elle-même.
Je pratique de cette manière de plus en plus et on peut l'utiliser comme méthode ou comme fonction. MsgBox est une illustration parfaite de ce cas là
Ce qui n'est pas possible en revanche, c'est d'utiliser une fonction VBA qui effectue des actions sur un objet et de l'utiliser comme fonction personnalisée dans une cellule d'excel
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Moi ? Certainement pas !
A moins que tu considères l'ensemble des participants à ce forum comme une personne unique, ce qui serait tout à fait irréaliste.
MsgBox, tout comme InputBox, sont des fonction dont l'unique but (comme toute fonction) est de renvoyer une valeur.MsgBox est une illustration parfaite de ce cas là
Elles ne modifient rien.
Si tu veux donner des exemple plus "borderline", il faudrait citer la fonction Excel LIEN_HYPERTEXTE() ou la fonction VBA GetObject(). Là, j'avoue, ça ne ressemble plus trop à des fonction et pourtant ça en est.
La Function qui est présenté ici pourrait être un Sub et, à mon sens, c'est ce qu'elle devrait être étant donné les méthodes et modifications de propriétés qu'elle contient.
D'autant plus que, si je ne me trompe pas, elle ne renvoie pas de valeur. Je ne vois donc pas trop l'intérêt d'utiliser Function plutôt que Sub.
C'est la façon de coder mais je conçois que d'autres ne la partage pas. Les goûts et les couleurs...
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
Bonjour Menhir,
Un exemple dans cette contribution CopyRange - Copie de liste de données (source) dans une feuille cible où la fonction nommée CopyRange qui effectue la copie d'une plage de cellules vers une autre, renvoie un objet Range
Exemple pour l'invoquer
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set rng = mStdCopyRange.CopyRange(oListSource, shtTarget, ClearSheet:=Elem = 0, AddLabel:=oListSource.Parent.Name)Tout à fait d"accord, elle pourrait être une SubLa Function qui est présenté ici pourrait être un Sub et, à mon sens, c'est ce qu'elle devrait être étant donné les méthodes et modifications de propriétés qu'elle contient.
D'autant plus que, si je ne me trompe pas, elle ne renvoie pas de valeur. Je ne vois donc pas trop l'intérêt d'utiliser Function plutôt que Sub
J'ai allégé le code des procédures publiées mais initialement je renvoie une variable booléenne (qui permet de vérifier si la procédure s'est bien déroulée)
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Bonjour,
Je teste toutes les procédures que je publieJ'ai respecté ce que tu m'as dit mais maintenant j'ai une erreur à la ligne suivante
chemin des fichiers : C:\Users\b_leb\OneDrive\Documents\PROJET DTO
Function CopyXls2Wrd(wrdDoc As Word.Document, oName As Name) As Boolean
Dans quel répertoire se trouve le classeur Excel qui contient à la fois le code VBA et les cellules ou plage de cellules nommées et dans quel répertoire se trouve le document suffixé docx qui contient les signets ?
Merci de publier le chemin complet et le nom des fichiers Word et Excel avec leur suffixe
Petite remarque : Le code des procédures que l'on publie doit être placé entre les balises prévues à cet effet (Après sélection des lignes de code cliquer sur le bouton # (croisillons)
Il n'y a aucune ligne contenant cette phrase. Si tu publies le code entre les balises, tu auras une numérotation. C'est ce numéro qui permet d'identifier la ligne et indiquer le numéro d'erreur renvoyé ainsi que son message n'est pas du luxej'ai une erreur à la ligne suivante
chemin des fichiers : C:\Users\b_leb\OneDrive\Documents\PROJET DTO
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Je l'ai dit, c'est une question de goût et si tu le sens mieux comme ça et que ça fonctionne, continue.
Perso, quand j'ai une sous-routine qui doit réaliser des actions ET renvoyer une valeur, je préfère passer par un Sub avec un des paramètres en ByRef pour transmettre la valeur.
Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.
C'est vrai que l'on a ses habitudes
Je n'utilise jamais Call mais directement le nom de la procédure alors d'autres l'utilise
C'est effectivement une autre approche que je n'ai jamais utilisée.Perso, quand j'ai une sous-routine qui doit réaliser des actions ET renvoyer une valeur, je préfère passer par un Sub avec un des paramètres en ByRef pour transmettre la valeur.
Philippe Tulliez
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager