Autres Inserer une photo dans un tableau Word depuis Excel en la redimensionnant

jeremie42

XLDnaute Nouveau
Bonjour,
Nouvellement inscrit sur le forum.
Je me lance avec ma première question...qui reste sans réponse traité (Ou alors je n'ai pas trouvé...)
Je construit a un applicatif pour le boulot sur Excel pour une aide à la saisie.
A cette occasion je met un liens avec une photo. (j'enregistre ce lien dans une cellule de ma "base de donnée", la photo n'est pas dans Excel)
A la fin de l'intervention, pour éditer un rapport, je créé un rapport Word complet a partir de rien (par de model Word)
Apres quelque galères j'arrive à mon but ...mais je n'arrive pas a redimensionner la photo que j'importe dans mon tableau. je voudrais fixer une largeur quelque soit la photo et conserver le ratio d'image.
J'arrive à l’insérer à partir d'une table de données créé avant ou je veux dans mon tableau. Cela me permet de "figer" le rendu.
Je précise que je ne suis pas à l'aise avec ces notions, c'est mon premier document généré de cette manière.
Mon code est issus de pas mal d'heure de tâtonnement et d'inspirations diverses

Je vous joins un extract simplifié du code

VB:
with worddoc
            k = 2
            
              For i = 1 To UBound(Table_Finale) 'boucle de recherche sur la table recap du rapport
              
                If Table_Finale(i, 4) = "X" Then 'test si le thème réglementaire a des observations
                    
                    ' si oui, ajout de la cellule contenant le theme
                     .Cell(k, 2).Merge MergeTo:=.Cell(k, 4) 'fusion des 3 cellules droite
                        With .Cell(k, 2)
                            .Range.Style = ("Sans interligne")
                            .Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
                            .Range.Text = Table_Finale(i, 2)
                            .Range.Shading.BackgroundPatternColor = RGB(170, 200, 170)
                            .Borders.Enable = True
                       End With
                        
                       k = k + 1 ' incrémentation de la position dans le tableau de sortie
                      
                        'ajout de toute les observations/orientation contenue dans la table principale
                    For j = 1 To UBound(Tblo_Mac_unik) 'dans la table generale
                          If Tblo_Mac_unik(j, 2) = Table_Finale(i, 2) Then 'si on trouve le theme reglementaire alors
                            
                            
                            'insertion image
                            If Tblo_Mac_unik(j, 5) <> "" Then 'test si il y a un lien photo
                            .Cell(k, 2).Merge MergeTo:=.Cell(k, 4) 'fusion des 3 cellules droite
                                With .Cell(k, 2) 'ajout de l'observation
                                     .Range.Style = ("Normal")
                                     .Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
                                     .Range.InsertBefore Tblo_Mac_unik(j, 3)
                                     .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
                                     .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
                                End With
                                
                                'Mise en page
                                With .Cell(k + 1, 2) 'ajout de l'observation
                                     .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
                                End With
                                
                                With .Cell(k + 1, 4) 'ajout de l'observation
                                     .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
                                End With
                                
                                With .Cell(k + 2, 2) 'ajout de l'observation
                                     .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
                                End With
                                
                                With .Cell(k + 2, 4) 'ajout de l'observation
                                     .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
                                End With
                                
                                With .Cell(k + 3, 2) 'ajout de l'observation
                                     .Borders(wdBorderLeft).LineStyle = wdLineStyleSingle
                                End With
                                
                                With .Cell(k + 3, 4) 'ajout de l'observation
                                     .Borders(wdBorderRight).LineStyle = wdLineStyleSingle
                                End With
                                
                                'ajout photo
                                With .Cell(k + 2, 3) 'ajout de la photo
                                     .Range.Style = ("Normal")
                                     .Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
                                     .Borders.Enable = False
                                     .Range.InlineShapes.AddPicture Filename:=Tblo_Mac_unik(j, 5), LinkToFile:=False, SaveWithDocument:=True
                          
                               End With
                                  

                                k = k + 3
                                  
                            
                            Else 'si pas de lien photo
                            
                            .Cell(k, 2).Merge MergeTo:=.Cell(k, 4) 'fusion des 3 cellules droite
                                With .Cell(k, 2) 'ajout de l'observation
                                     .Range.Style = ("Normal")
                                     .Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
                                     .Range.Text = Tblo_Mac_unik(j, 3)
                                     .Borders.Enable = True
                                End With
                            
                            
                            End If
                                  

                            
                                k = k + 1 ' incrementation de la position dans le tableau de sortie
                            
                            .Cell(k, 2).Merge MergeTo:=.Cell(k, 4) 'fusion des 3 cellules droite
                                With .Cell(k, 2) 'ajout de l'orientation
                                     .Range.Style = ("Normal")
                                     .Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
                                     .Range.Text = vbTab & "=> " & Tblo_Mac_unik(j, 4)
                                 '        .Range.Shading.BackgroundPatternColor = -603923969 '-738132071
                                     .Borders.Enable = True
                                     .Range.Font.Italic = True
                                End With
                                
                                k = k + 1 ' incrementation de la position dans le tableau de sortie
                            
                            .Cell(k, 2).Merge MergeTo:=.Cell(k, 4) 'fusion des 3 cellules droite
                                With .Cell(k, 2) 'ajout d'une cellule vide
                                     .Range.Style = ("Normal")
                                     .Range.ParagraphFormat.Alignment = wdAlignParagraphLeft
                                     .Range.Text = ""
                                 '        .Range.Shading.BackgroundPatternColor = -603923969 '-738132071
                                     .Borders.Enable = True
                                End With
                                
                                k = k + 1 ' incrementation de la position dans le tableau de sortie
                            End If
                        
                      
                    Next j
              
                  End If
              Next i
                
                 .Rows(k - 1).Delete 'suppression de la derniere ligne vide
           End With
          
    End If
End with
 

jeremie42

XLDnaute Nouveau
Bonjour
n'ayant pas ressuis a résoudre mon problème, je l'ai contourné.
En utilisant les outils WIA, je scanne et redimensionne mes images avant import, en les réenregistrant dans un repertoire temporaire et en fin de procedure efface les images et le repertoire.
je précise que mes images sont dans un repertoire spécifique.

Je poste le code de redimensionnement dans un repertoire Y depuis un repertoire X
repertoire source : photos/
repertoire créé /photoforword/photos/
Si cela peux aider quelqu'un

Je me suis inspiré d'un code de manipulation WIA trouvé sur un forum traitant d'un sujet proche.

code pour le scanne, le redimensionnement et l'enregistrement
VB:
Sub redimensionnerImage()

Dim Img As WIA.ImageFile, IP As WIA.ImageProcess
      
'création d 'un fichier   temporaire de photos retraitées

MkDir (ThisWorkbook.Path & "\PhotoforWord\")
MkDir (ThisWorkbook.Path & "\PhotoforWord\photos\")
    
'boucle de scan de fichier mis dans le dossier
    
'Définit le répertoire contenant les fichiers
Chemin = ThisWorkbook.Path & "\photos\"
 
 
'Boucle sur tous les fichiers  du répertoire.
Fichier = Dir(Chemin & "*.*")


 Do While Len(Fichier) > 0

    'Création conteneur pour l'image à manipuler
    Set Img = CreateObject("WIA.ImageFile")
    'Création du gestionnaire de filtre
    Set IP = CreateObject("WIA.ImageProcess")
    
    'Chargement de l'image dans le conteneur
    Img.LoadFile Chemin & Fichier
    
        'Ajoute le filtre pour redimensionner l'image (Scale)
        IP.Filters.Add IP.FilterInfos("Scale").FilterID
        'Définit la largeur maxi pour le redimensionnement
        IP.Filters(1).Properties("MaximumWidth") = 300
        'Définit la hauteur maxi pour le redimensionnement
        IP.Filters(1).Properties("MaximumHeight") = 650
        'remarque :
        'Les proportions sont conservées. Le filtre prend en compte
        'les ratios et adapte la taille pour ne pas dépasser les valeurs maxi définies.
        
    'Application du filtre à l'image
    Set Img = IP.Apply(Img)
    'Enregistre l'image redimensionnée
    Img.SaveFile ThisWorkbook.Path & "\PhotoforWord\Photos\" & Fichier

    'Debug.Print Chemin & Fichier
    Fichier = Dir()
Loop


End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 078
Messages
2 085 123
Membres
102 783
dernier inscrit
Basoje