Convertir Excel en Word modifiable avec photos

guiguiche54113

XLDnaute Nouveau
Bonjour les visualbasiqueurs !

J'ai réussi la conversion de Excel vers Word après de nombreuses recherches. Une méthode convertissais l'Excel en sorte d'image et la collait dans le Word, ce Word n'était donc pas modifiable.
En faisant un collage spécial au format RTF, j'ai réussi à rendre le Word généré modifiable, petit hic cependant (sinon ce serait trop beau), le format RTF ne prend pas en charge les images de ce que j'ai compris, avez vous une alternative afin que tout mes objectifs soient cochés ?

Merci d'avance,

PS : si vous voulez mon code de conversion de Excel a Word pour vous aider je peux le fournir

bonne journée à vous :)
 

tatiak

XLDnaute Barbatruc
Bonjour,

Voici un fichier démo d'export de données xl vers un doc word, avec code commenté.

Pour insérer une image, voir exemple du logo, ligne du type :

VB:
WordDoc.InlineShapes.AddPicture ("C:\chemin\image.jpg")
Pierre
 

Fichiers joints

guiguiche54113

XLDnaute Nouveau
Bonjour tatiak,

Déjà merci de ta réponse rapide !

J'ai regardé ton fichier joint mais mon but était de convertir un fichier Excel en Word contenant des images , pas de juste convertir un Excel en Word contenant du texte et d'y ajouter des images par la suite, je sais pas si tu vois !

Bonne journée !
 

tatiak

XLDnaute Barbatruc
Si ton Excel contient des images à exporter vers Word, c'est simple.

Il suffit d'exporter les images une par une vers un jpg temporaire et ensuite d'importer le jpg temporaire dans ton word comme indiqué précédemment.

Voici un code pour exporter une image excel vers un fichier Temp.jpg situé dans le répertoire du fichier xl
VB:
Sub Export_Image(Img As Object)
    Img.Copy
    With ActiveSheet.Shapes.AddChart
        .Height = Img.Height
        .Width = Img.Width
        .Chart.ChartArea.Select
        .Chart.Paste
        .Chart.Export ThisWorkbook.Path & "\Temp.jpg"
        .Delete
    End With
End Sub
Pour appeler la procédure, par exemple pour "l'Image 1", puis pour la coller dans le word, il suffit de dire :
VB:
    Export_Image ActiveSheet.Shapes("Image 1")
    WordDoc.InlineShapes.AddPicture (ThisWorkbook.Path & "\Temp.jpg")
    ' puis export/import des autres images ...
    '...
 
    ' à la fin, éventuellement, si on veux effacer le fichier temporaire à la fin :
    Kill ThisWorkbook.Path & "\Temp.jpg"

Et si c'est une image d'une plage de cellules que tu veux c'est toujours le même principe :
VB:
Sub Export_Plage(Rg As Range)
    Rg.CopyPicture xlScreen, xlPicture
    With ActiveSheet.Shapes.AddChart
        .Height = Rg.Height
        .Width = Rg.Width
        .Chart.ChartArea.Select
        .Chart.Paste
        .Chart.Export ThisWorkbook.Path & "\Temp.jpg"
        .Delete
    End With
End Sub
Appel :
VB:
    Export_Plage ActiveSheet.Range("I17:K21")
    WordDoc.InlineShapes.AddPicture (ThisWorkbook.Path & "\Temp.jpg")
Je sais pas si tu vois.
Pierre
 
Dernière édition:

guiguiche54113

XLDnaute Nouveau
Bonjour tatiak,

oui je crains que ce soit la seule solution, je vais tester ça, mais est-ce que la position de l'image dans l'Excel sera la même que dans le word ?
parce que l'idée est de conserver le fichier tel qu'il l'était à l'origine tu vois ?

en tout cas merci beaucoup je vais faire des tests avec ce que tu m'as donné la !

a+
 

guiguiche54113

XLDnaute Nouveau
ah et petite question en plus, pour parcourir les images non pas sur la feuille complète (
ActiveSheet.Shapes.Count) mais juste sur une plage de cellules genre Range("A1:Q80").Shapes.Count
sauf que ça marche pas avec un range j'ai l'impression qu'on peut pas !

Parce que de choisir ma plage, ça me permet de sélectionner juste les images et non les boutons qui se situent sur ma feuille.

merci ;)
 

tatiak

XLDnaute Barbatruc
Trop facile!
Pour appliquer un traitement uniquement sur les images de la zone "A1:Q80" il suffit d'écrire un code du genre :
VB:
    With ActiveSheet.Range("A1:Q80")
        For Each sh In ActiveSheet.Shapes
            If sh.Top >= .Top And sh.Left >= .Left _
             And sh.Left + sh.Width <= .Left + .Width _
             And sh.Top + sh.Height <= .Top + .Height Then
                Export_Image ActiveSheet.Shapes(sh.Name)
                ' puis import vers word ...
                ' ...
                
            End If
        Next sh
    End With
Pierre
 

guiguiche54113

XLDnaute Nouveau
Recoucou,

alors merci beaucoup, j'ai cependant quelques problèmes, sur mon word j'ai bien 2 choses qui apparaissent lorsque j'ai 2 images sur mon excel mais ce ne sont pas les photos de mon excel, je te mets ça en pj

le principe marche mais il doit y avoir une couille mdr
j'ai regardé le format et c'est pas l'extension parce que j'ai testé avec des jpg et png..

merci ;)
 

Fichiers joints

guiguiche54113

XLDnaute Nouveau
alors j'ai du nouveau, ça marche niquel j'ai bien mes images et non les trucs chelou de la photo en pj,
par contre ils se mettent tout en haut a gauche de mon word et en petit et non à leurs emplacement respectifs et aux bonnes tailles

sais tu d'où pourrait provenir mon erreur ?
merci encore


VB:
'générer le word
Dim DocWord As Word.Document
     Dim AppWord As Word.Application
     Set AppWord = CreateObject("Word.Application") 'essayé avec New Word.Application
      
     Application.DisplayAlerts = True
     AppWord.ShowMe
     AppWord.Visible = True
 
     'Ouvre le document Word
 
     Set DocWord = AppWord.Documents.Add
    
 
     ' Copie les données Excel
Dim sh As Shape
Set sh = ActiveSheet.Shapes(Application.Caller)
    
     ThisWorkbook.Worksheets("Classeur1").Range(Cells(1, 1), Cells(sh.TopLeftCell.Offset(5, 0).Row, sh.TopLeftCell.Offset(0, 11).Column)).Copy
    
     ' Colle les données dans Word
 
     DocWord.Range.PasteSpecial DataType:=wdPasteRTF, DisplayAsIcon:=True
 
    
     'copier les images
    
      With ActiveSheet.Range("A1:Q80")
        For Each sh In ActiveSheet.Shapes
            If sh.Top >= .Top And sh.Left >= .Left _
             And sh.Left + sh.Width <= .Left + .Width _
             And sh.Top + sh.Height <= .Top + .Height Then
                Export_Image ActiveSheet.Shapes(sh.Name)
                MsgBox (sh.Name)
               DocWord.InlineShapes.AddPicture (ThisWorkbook.Path & "\Temp.jpg")
               ' puis export/import des autres images ...
               '...
            
               ' à la fin, éventuellement, si on veux effacer le fichier temporaire à la fin :
               Kill ThisWorkbook.Path & "\Temp.jpg"
                
            End If
        Next sh
    End With
    
     Application.CutCopyMode = False

 On Error Resume Next
     'DocWord.Application.ActiveDocument.Save
     DocWord.SaveAs "tableau.doc"
 

tatiak

XLDnaute Barbatruc
Ce code ne me semble pas être une bonne solution.
La démo proposée au message #2 montre comment faire une mise en page personnalisée d'un doc avec des éléments provenant d'une feuille xl. On peut par exemple créer un tableau sans bordure et placer du texte ou des images dans une case donnée (voir messages #4 et #7). Ca donne plutôt des bons résultats. Après chacun fait comme il veut.
 

guiguiche54113

XLDnaute Nouveau
j'utilise le code de ton message #2 car j'appelle la méthode Export_Image(Img As Object)
j'ai essayé de faire en fonction de ton code mais apparemment j'ai dû mal l'adapter ..
 

Discussions similaires


Haut Bas