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 15/03/2006, 12h27   #1
Membre du Club
 
Inscription : juin 2005
Messages : 220
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 220
Points : 47
Points : 47
Par défaut [VBA-A]Copier des données d'Excel vers Word

Bonjour tout le monde !!

Voilà, j'ai un fichier excel contenant des données et des graphiques, et je dois réaliser un script en vba permettant de créé un document word et d'y insérer des tableaux, graphiques provenant du fichier Excel.

Donc, j'arrive à ouvrir le fichier word et Excel, copier les données provenant d'Excel, mais je ne sais pas du tout comment les coller à l'endroit que je le désire (par exemple après un titre) sur mon document Word.

J'ai cherché sur le net mais trouvé vraiment aucun Tutorial vraiment intéressant dans mon cas sur le VBA sous word.

Quelqu'un aurait t'il un lien sympatoche, ou une petite aide sur mon problème de collage des données après un titre.

Un grand merci d'avance !
soad029 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 12h43   #2
Responsable Visual Basic
 
Avatar de ThierryAIM
 
Homme Thierry
Inscription : septembre 2002
Messages : 3 670
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 49
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : septembre 2002
Messages : 3 670
Points : 5 672
Points : 5 672
regarde déjà dans ce sujet

http://www.developpez.net/forums/viewtopic.php?t=409851&highlight=info%2A+office

si tu trouves des choses interessantes
__________________
Vous vous posez une question, la réponse est peut-être ici :
Toutes les FAQs VB
Les Cours et Tutoriels VB6/VBScript
Les Sources VB6


Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

MioSkins.org : le site de référence pour GPS et PDA Mitac MIO
iPHONIX.fr : le must francophone des infos pour iPhone, iPad, ...
ThierryAIM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 14h40   #3
Membre du Club
 
Inscription : juin 2005
Messages : 220
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 220
Points : 47
Points : 47
Salut thierry et merci beacoup d'avoir répondu !

Alors ton lien est super, merci, j'ai appris bcp de choses, notamment, comment importer des données et graphique de Excel vers Word, par contre j'ai pas trouver comment les importés à un endroit précis, c'est à dire après un titre prédéfinis.

Sinon j'ai trouvé ce code très intéressant :
Code :
document_word.Tables(1).AutoFitBehavior wdAutoFitWindow
Celui-ci permet d'ajuster un tableau ou un graphique sur la largeur de la page, donc c'est formidable !!
Par contre savez vous comment on pourrais faire pareil, mais sur la longeur d'une page, car j'ai un tableau qui déborde sur une autre page et j'aimerai bien qu'il tienne sur une page.

Merci pour vos réponses !
soad029 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 15h05   #4
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
L'objet (je dis bien objet) Font existe également sous Excel et son examen (aide en ligne) te conduira peut-être à voir comment l'insérer dans ton code, au bon endroit ?
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 15h08   #5
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 928
Points : 11 928
Le mieux est de placer des signets là ou tu veux insérer tableaux et graphes, par exemple, en dessous de ton titre.

Code :
1
2
3
    With ActiveDocument.Bookmarks
        .Add Range:=Selection.Range, Name:="Tableau1"
    End With
Ensuite, pour retrouver l'emplacement, tu fais ça (à adapter depuis Excel - With WdDoc 'ton document)
Code :
1
2
3
    Selection.HomeKey Unit:=wdStory   'envoie en début de page
    'recherche du signet
    Selection.GoTo What:=wdGoToBookmark, Name:="Tableau1"
En dessous, tu décales du nombre de ligne souhaité, soit en créant des nouvelles lignes,
Code :
1
2
3
4
    Selection.TypeParagraph
    Selection.TypeParagraph
    Selection.TypeParagraph
    Selection.TypeParagraph
Soit en descendant du nombre de lignes voulu si elles existent
Code :
    Selection.MoveUp Unit:=wdLine, Count:=4
et tu recommences pour le graphe ou le tableau suivant

Un conseil : Colle tes tableaux et graphes sans les dissocier du texte. Facilite la mise en page.
Code :
    Selection.PasteSpecial Link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine, DisplayAsIcon:=False
"Placement:=wdInLine" permet de faire ça.
"Link:=True" lie les données au fichier Excel (=false supprime le lien)

Une dernière chose, tes graphes et tes tableaux auront la dimension existante dans Excel, tu devras les redimensionner. Exemple : Tu veux que tes objets aient 18 cm de large :
Code :
1
2
    Selection.InlineShapes(1).LockAspectRatio = msoTrue
    Selection.InlineShapes(1).Width = 510.25
"LockAspectRatio = msoTrue" conserve le rapport Hauteur/largeur

Si tu as un autre pb, tu dis

A+ et bon courage
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 15h12   #6
Responsable Visual Basic
 
Avatar de ThierryAIM
 
Homme Thierry
Inscription : septembre 2002
Messages : 3 670
Détails du profil
Informations personnelles :
Nom : Homme Thierry
Âge : 49
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : septembre 2002
Messages : 3 670
Points : 5 672
Points : 5 672
ouskelnor, toi, tu es mûr pour nous complèter la FAQ VBA
__________________
Vous vous posez une question, la réponse est peut-être ici :
Toutes les FAQs VB
Les Cours et Tutoriels VB6/VBScript
Les Sources VB6


Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

MioSkins.org : le site de référence pour GPS et PDA Mitac MIO
iPHONIX.fr : le must francophone des infos pour iPhone, iPad, ...
ThierryAIM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 15h13   #7
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 928
Points : 11 928
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 15h32   #8
Membre Expert
 
Avatar de Megaxel
 
Inscription : mai 2003
Messages : 1 188
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 1 188
Points : 1 308
Points : 1 308
Ça sent le type qui a passé des heures à insérer des graphiques Excel dans Word, ça...

Il est fort, ce Ouskel'n'or !!
Megaxel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 16h22   #9
Membre du Club
 
Inscription : juin 2005
Messages : 220
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 220
Points : 47
Points : 47
Alors là un grand merci, un très grand merci même !!

Mais en faite j'ai du mal, ton code :

Code :
1
2
3
    With ActiveDocument.Bookmarks 
        .Add Range:=Selection.Range, Name:="Tableau1" 
    End With
Permet d'insérer des signets, mais le prog me dit "variable non défénie" car le 'selection' n'est pas définie (à mon avis). Comment je pourrais sélectionner l'endroit ou j'ai envie d'insérer mon signet. Sinon j'ai essayé à la main sous word : "inserer -> signet -> "ClassementRS1" -> ajouter, mais si je veux atteindre le signet je dois le surligner... ça sert à rien un signet alors, non ?

Bref... je te remercie de nouveau et te félicite pour ta culture vba-wordlistique
soad029 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 16h37   #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 928
Points : 11 928
Oui, je m'y attendais un peu. Je pense que l'erreur provient de ce que tu utilises mon code sans faire référence à WdDoc. Je t'ai précisé que la syntaxe que je t'ai donnée est valable dans word. Depuis Excel, tu dois désigner l'objet document. SilkyRoad, dans l'adresse que t'a donnée ThierryAim ce matin, donne cette syntaxe.

Code :
1
2
3
4
5
6
Dim appWrd As Word.Application 
Dim docWord As Word.Document 
Set appWrd = createObject("Word.Application") 
appWrd.Visible = True 
Set docWord = appWrd.Documents. _ 
Open("C:\mes documents\monDocument.doc", readOnly:=True)
Tu dois utiliser l'objet docWord dans cet exemple
Code :
1
2
With docWord 
    .Toncode
ou
Code :
1
2
With docWord.selection
        .toncode
Mais regarde si Silky n'a pas donné d'exemple d'utilisation de l'objet docWord

Tu dis si tu progresses... et même si tu as encore des pb

A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 17h06   #11
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 928
Points : 11 928
Bon, je dois avouer que je cale. Avec VBA97, la syntaxe de SilkyRoad me pose problème. J'espère qu'il va passer par ici car je ne peux pas tester ce que je t'ai mis dans mon post précédent.
Désolé mais... Silky ou bbil ne devraient pas tarder

A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 17h08   #12
Membre du Club
 
Inscription : juin 2005
Messages : 220
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 220
Points : 47
Points : 47
Aie... En faite, je ne vous ai pas donné tout les éléments...
Je ne suis pas sous excel, mais sous Access, j'ai créé un formulaire.

Voici le contenu de celui-ci :

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
 
Dim document_word As Word.Document
Dim AppWord As Word.Application
 
 
Set AppWord = New Word.Application
Set document_word = GetObject("c:\Tableau de bord.doc")
document_word.Application.Visible = True
 
    'document_word.Content.Find.Execute findtext:="Classement RS1"
 
 
 
    With document_word.Bookmarks
        .Add Range:=Selection.Range, name:="ClassementRS1"
    End With
 
    With AppWord
        .Selection.HomeKey Unit:=wdStory   'envoie en début de page
        'recherche du signet
        .Selection.Goto What:=wdGoToBookmark, name:="ClassementRS1"
    End With
 
    AppWord.Selection.MoveUp Unit:=wdLine, Count:=4
 
    AppWord.Selection.PasteSpecial link:=True, DataType:=wdPasteOLEObject, Placement:=wdInLine, DisplayAsIcon:=False
Pour l'instant je teste en ouvrant à la main un fichier excel, je sélectionne une plage, je fais copier, puis j'éxécute mon formulaire. celui-ci bloc en surlignant :
Code :
.Add Range:=Selection.Range, name:="ClassementRS1"
avec le message : "variable objet ou bloc with non définie"
et au débogage j'ai "le serveur distant n'éxiste pas ou n'est pas disponible"

En tout cas merci pour ton Amabilité
soad029 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 17h41   #13
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 928
Points : 11 928
Et si tu fais

Code :
1
2
3
    With AppWord.document_word.Bookmarks 
        .Add Range:=Selection.Range, name:="ClassementRS1" 
    End With
Vraiment à tout hasard, je ne peux pas tester.

A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 10h56   #14
Membre du Club
 
Inscription : juin 2005
Messages : 220
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 220
Points : 47
Points : 47
Bonjour tout le monde !

Donc finalement, j'ai mis les signets à la main sous word, et ça marche bien, très bien même.

Juste un p'tit soucis au niveau de la taille des donnée importé, j'utilise ton code :
Code :
1
2
    AppWord.Selection.InlineShapes(1).LockAspectRatio = msoTrue
    AppWord.Selection.InlineShapes(1).Width = 510.25
Mais j'ai le message
"Le membre de la collection requis n'existe pas"
A quel objet correspond InlineShapes en faite ? Car j'ai tester avec un graphique ou une plage de cellules et j'ai ce message.

Bon... bonne journée en tout cas !
soad029 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h08   #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 928
Points : 11 928
Oui, sans doute ne sélectionnes-tu pas l'objet.
Comme j'ignore si le pt d'insertion, quand tu fais appel à ton code, se trouve avant ou après l'objet, tu adapteras (En principe, après avoir collé l'objet, tu devrais te trouver après)

Code :
    Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend
Ce code sélectionne la ligne (ou l'objet s'il se trouve sur la ligne) située avant le point d'insertion.

Tu testes

A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 11h56   #16
Membre du Club
 
Inscription : juin 2005
Messages : 220
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 220
Points : 47
Points : 47
Nickel, ça marche sacrément bien !

Code :
1
2
3
4
5
6
7
8
 
    AppWord.Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend
 
    With document_word.InlineShapes(1)
        .LockAspectRatio = msoFalse
        .Height = 711 'redimensionne hauteur image
        .Width = 510 'redimensionne largeur image
    End With
En tout cas un grand merci, c'était vraiment sympa d'avoir aidé !!
soad029 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 05h00.


 
 
 
 
Partenaires

Hébergement Web