Word formatage d'image sur demande

jeanmi

XLDnaute Occasionnel
Bonjour à tous,

voici ce que j'aimerais faire :

a) sélectionner une image qui est sur ma page par un clic
b) à partir d'un icone dans la barre d’outils Accès rapide, une mise en forme de cette image toujours la même :

taille et proportion
Habillage du texte
devant le texte
taille
hauteur 4
largeur 10
OK

j'ai essayer en mode développeur, enregistrer une macro, mais je n'arrive pas à sélectionner les fonctions souhaitées. il y a comme une petite casette à coté de mon curseur et je ne peux sélectionner l'image.

Je suis sous Word 2010

Merci de votre aide

Cordialement
 

Staple1600

XLDnaute Barbatruc
Bonsoir

En guise de pied à l'étrier
A tester avec une seule image sur une page d'un document Word.
Il se passe des choses mais pas encore ce que tu décris dans ton premier message
Code:
Sub test()
With ActiveDocument.Shapes(1)
MsgBox .Name
 .RelativeVerticalPosition = wdRelativeVerticalPositionPage
 .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
 .Top = InchesToPoints(3)
 .Left = wdShapeCenter
 .Width = 400
 .Height = 100
End With
End Sub
NB: Pas évident car il faut aller parcourir les références VBA
Et il faut trouver les bonnes équivalences.
(Ce que j'ai pas encore trouvé)
 

jeanmi

XLDnaute Occasionnel
Bonsoir

En guise de pied à l'étrier
A tester avec une seule image sur une page d'un document Word.
Il se passe des choses mais pas encore ce que tu décris dans ton premier message
Code:
Sub test()
With ActiveDocument.Shapes(1)
MsgBox .Name
 .RelativeVerticalPosition = wdRelativeVerticalPositionPage
 .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
 .Top = InchesToPoints(3)
 .Left = wdShapeCenter
 .Width = 400
 .Height = 100
End With
End Sub
NB: Pas évident car il faut aller parcourir les références VBA
Et il faut trouver les bonnes équivalences.
(Ce que j'ai pas encore trouvé)
Bonjour @Staple1600 à tous

Bon j'ai mis en place cette macro dans mon fichier , je vais dire honnêtement je ne comprend rien à celle-ci, mais ça ce n'est pas très grave, pour moi.

voici le message que j'ai
1678064193660.png


1678064229280.png


la macro est dans new macro

1678064296785.png


J'ai mis mon fichier avec votre macro, je cherche si je trouve une solution ...

merci pour l'aide

Cordialement
 

Pièces jointes

  • Doc1-V1.docx
    95.7 KB · Affichages: 0
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, @jeanmi

@jeanmi
Pour qu'un fichier Word conserve un code VBA, il faut l'enregistrer au format *.docm

Sinon mon code n'est qu'un code de test (un début de piste en quelque sorte)

Pour le tester, il suffit d'insérer une image sur une page vierge d'un document Word.
(Le fichier ne doit contenir qu'une seule image)

Le code de la macro doit être dans le document et pas dans Normal.dot
(ce qui semble être le cas si on regarde ta copie d'écran)
 

Staple1600

XLDnaute Barbatruc
Re

En creusant un peu plus, avec ce code (adapté de mes pérégrinations sur le net)
VB:
Sub Test_2()
Dim oImage As Object, oRng As Range
Set oImage = ActiveDocument.InlineShapes(1)
 With oImage
        .LockAspectRatio = msoFalse
        .Height = CentimetersToPoints(4)
        .Width = CentimetersToPoints(10)
        Set oRng = oImage.Range
        .ConvertToShape
    End With
    With oRng.ShapeRange(1)
        .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
        .RelativeVerticalPosition = wdRelativeVerticalPositionPage
        .Left = CentimetersToPoints(3)
        .Top = CentimetersToPoints(2)
    End With
End Sub
Je coche ces trois souhaits
Habillage du texte
✅ devant le texte
taille
✅ hauteur 4
✅ largeur 10
 

jeanmi

XLDnaute Occasionnel
Re

En creusant un peu plus, avec ce code (adapté de mes pérégrinations sur le net)
VB:
Sub Test_2()
Dim oImage As Object, oRng As Range
Set oImage = ActiveDocument.InlineShapes(1)
 With oImage
        .LockAspectRatio = msoFalse
        .Height = CentimetersToPoints(4)
        .Width = CentimetersToPoints(10)
        Set oRng = oImage.Range
        .ConvertToShape
    End With
    With oRng.ShapeRange(1)
        .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
        .RelativeVerticalPosition = wdRelativeVerticalPositionPage
        .Left = CentimetersToPoints(3)
        .Top = CentimetersToPoints(2)
    End With
End Sub
Je coche ces trois souhaits
Habillage du texte
✅ devant le texte
taille
✅ hauteur 4
✅ largeur 10
Bonjour @Staple1600 à tous,

Merci pour cette réponse,

j'ai ajouter cette macro dans mon fichier et ça ne semble pas vouloir fonctionner, par contre je ne sais pas pourquoi mais la première version fonction.

Je fait des essais avec ce que je trouve sur le net mais pour le moment rien ne fonctionne comme je souhaiterai.
je joint mon fichier d'essais

Cordialement
 

Pièces jointes

  • Doc1-V2.docm
    96.1 KB · Affichages: 3
Dernière édition:

mromain

XLDnaute Barbatruc
Bonjour jeanmi, Staple, le forum,

j'ai ajouté cette macro dans mon fichier et ça ne semble pas vouloir fonctionner, par contre je ne sais pas pourquoi mais la première version fonction.

Cela vient peut-être de la différence entre les Shapes et les InLineShapes.
Un peu de lecture sur ce sujet.


A+
 

jeanmi

XLDnaute Occasionnel
Bonjour jeanmi, Staple, le forum,



Cela vient peut-être de la différence entre les Shapes et les InLineShapes.
Un peu de lecture sur ce sujet.


A+
Bonjour @mromain, à tous,

Merci pour cette réponse, donc c'est un shape comme je fait une copie sur un PDF que je colle sur Word.
Mais après pour faire fonctionner la fonction que je souhaiterai arriver à mettre en place, ma question du début?
il faut que je face quoi ?

Merci d'avance pour l'aide.

Cordialement
 

mromain

XLDnaute Barbatruc
Bonjour jeanmi, Staple, le forum,

Sur l'exemple que tu fournis au post #6, il s'agit bien d'une Shape (et non d'une InLineShape).
Du coup, tu peux tester le code ci-dessous :
Code:
Public Sub Test()
    With Selection.ShapeRange
        If .Count = 0 Then
            MsgBox "Il faut au préalable sélectionner une forme.", vbInformation, "Info"
        Else
            With .Item(1)
                .WrapFormat.Type = wdWrapFront
                .Height = Application.CentimetersToPoints(4)
                .Width = Application.CentimetersToPoints(10)
            End With
        End If
    End With
End Sub
Lorsque la macro est exécutée, un message informatif s'affiche si aucune Shape n'est sélectionnée (ce message s'affichera donc si c'est une InLineShape qui est sélectionnée).
Sinon, la Shape est mise devant le texte et redimensionnée à 4 cm x 10 cm.

Est-ce que ça te convient ?

A+
 

jeanmi

XLDnaute Occasionnel
Bonjour jeanmi, Staple, le forum,

Sur l'exemple que tu fournis au post #6, il s'agit bien d'une Shape (et non d'une InLineShape).
Du coup, tu peux tester le code ci-dessous :
Code:
Public Sub Test()
    With Selection.ShapeRange
        If .Count = 0 Then
            MsgBox "Il faut au préalable sélectionner une forme.", vbInformation, "Info"
        Else
            With .Item(1)
                .WrapFormat.Type = wdWrapFront
                .Height = Application.CentimetersToPoints(4)
                .Width = Application.CentimetersToPoints(10)
            End With
        End If
    End With
End Sub
Lorsque la macro est exécutée, un message informatif s'affiche si aucune Shape n'est sélectionnée (ce message s'affichera donc si c'est une InLineShape qui est sélectionnée).
Sinon, la Shape est mise devant le texte et redimensionnée à 4 cm x 10 cm.

Est-ce que ça te convient ?

A+
Bonjour @mromain à tous,

merci pour cette proposition.
il semble que l'image que je colle soit un InlineShapes car j'ai le message avec ou sans sélection .

j'ai fait des essais avec ton code en ajoutent un ligne pour tenter de modifier l'image inlineshapes en shapes , mais comment faire que que ce soit appliqué qu'a l'image sélectionnée ???:
VB:
Public Sub Test()

ActiveDocument.InlineShapes(1).ConvertToShape ' transforme InlineShape en Shape, mais voir pour le faire uniquement sur l'image selectionnée ?

    With Selection.ShapeRange
        If .Count = 0 Then
            MsgBox "Il faut au préalable sélectionner une forme.", vbInformation, "Info"
        Else
       
            With .Item(1)
                .WrapFormat.Type = wdWrapFront
                .Height = Application.CentimetersToPoints(2.5)
                .Width = Application.CentimetersToPoints(6.5)
            End With
        End If
    End With
End Sub

s'il n'y a pas d'image sélectionné (un shape), il y a un message d'erreur.
1678295437438.png


Ce n'est pas simple de travailler sur les images, j'y comprends rien.

Merci de l'aide

Cordialement
 
Dernière édition:

jeanmi

XLDnaute Occasionnel
Bonjour jeanmi, Staple, le forum,

Sur l'exemple que tu fournis au post #6, il s'agit bien d'une Shape (et non d'une InLineShape).
Du coup, tu peux tester le code ci-dessous :
Code:
Public Sub Test()
    With Selection.ShapeRange
        If .Count = 0 Then
            MsgBox "Il faut au préalable sélectionner une forme.", vbInformation, "Info"
        Else
            With .Item(1)
                .WrapFormat.Type = wdWrapFront
                .Height = Application.CentimetersToPoints(4)
                .Width = Application.CentimetersToPoints(10)
            End With
        End If
    End With
End Sub
Lorsque la macro est exécutée, un message informatif s'affiche si aucune Shape n'est sélectionnée (ce message s'affichera donc si c'est une InLineShape qui est sélectionnée).
Sinon, la Shape est mise devant le texte et redimensionnée à 4 cm x 10 cm.

Est-ce que ça te convient ?

A+
Bonjour @mromain à tous,

Après plusieurs heures de recherche sur internet, de lecture, d'essais il semble que j'ai trouver un code qui fonctionne pour réponse à ce que j'espéré faire, à partir de votre code.

Merci de me faire des remarque s'il y a des choses à changer ou améliorer car je ne métrise rien.
VB:
Public Sub test() ' macro qui semble fonctionner

Dim i As Byte

i = ActiveDocument.InlineShapes.Count 'recupère le nom de l'image ajoutée
'MsgBox "nom de l'image : " & i

If i = 0 Then MsgBox "Pas d'image sélectionnée ou image déjà mise en forme": GoTo fin

ActiveDocument.InlineShapes(i).ConvertToShape


    With Selection.ShapeRange
        If .Count = 0 Then
            MsgBox "Il faut au préalable sélectionner une forme.", vbInformation, "Info"
        Else
        
            With .Item(1)
                .WrapFormat.Type = wdWrapFront
                .Height = Application.CentimetersToPoints(2.5)
                .Width = Application.CentimetersToPoints(6.5)
            End With
        End If
    End With
    
fin:
End Sub

Merci de l'aide

cordialement
 

mromain

XLDnaute Barbatruc
Bonjour jeanmi, Staple, le forum,

@jeanmi : je vois que tu as fait du crosspost !! (https://www.developpez.net/forums/d...office/word/manipulation-images-copiees-word/)

La bienséance veut que tu indiques les différents endroits où tu postes ta demande. Ce afin d'aider les gens qui t'aident pour voir les différentes propositions qui te sont faites.

j'ai fait des essais avec ton code en ajoutent un ligne pour tenter de modifier l'image inlineshapes en shapes , mais comment faire que que ce soit appliqué qu'a l'image sélectionnée ???

Bizarre... J'ai utilisé le code proposé au post #9 avec le fichier que tu nous a fourni au post #6 et n'ai pas rencontré de souci...

Du coup, je ne sais plus trop d'où tu pars et ce que tu veux.

Merci de me faire des remarque s'il y a des choses à changer ou améliorer car je ne métrise rien.
Si tu n'as toujours pas trouvé ce que tu attends, merci de reformuler ta demande et de nous fournir un fichier représentatif.

A+
 

jeanmi

XLDnaute Occasionnel
Bonjour jeanmi, Staple, le forum,

@jeanmi : je vois que tu as fait du crosspost !! (https://www.developpez.net/forums/d...office/word/manipulation-images-copiees-word/)

La bienséance veut que tu indiques les différents endroits où tu postes ta demande. Ce afin d'aider les gens qui t'aident pour voir les différentes propositions qui te sont faites.



Bizarre... J'ai utilisé le code proposé au post #9 avec le fichier que tu nous a fourni au post #6 et n'ai pas rencontré de souci...

Du coup, je ne sais plus trop d'où tu pars et ce que tu veux.


Si tu n'as toujours pas trouvé ce que tu attends, merci de reformuler ta demande et de nous fournir un fichier représentatif.

A+
Bonjour @mromain à tous,

Effectivement j'avais fait une demande sur developpez.net, toutes mes excuses, je ne savais pas qu'il était souhaitable de le signaler. A l'avenir je le ferais, mais généralement je fais qu'une demande.

Je vais refaire des essais avec le code du post #9 et dire ce qui ne semble pas fonctionner pour moi et poster le fichier utilisé avec des explications.

Cordialement
 

jeanmi

XLDnaute Occasionnel
Bonjour @mromain à tous,

Bon je n’arrive pas à identifier clairement ce qu’il faudra faire alors je vais expliquer ce que je fais .

J’ai joint deux fichiers, celui reçu est celui que je souhaite créer.

Donc :

  • Je reçois un fichier PDF ou il y a des images est des codes-barres, un élément par page PDF.
  • Il faut que je regroupe deux à deux les images et les codes-barres qui correspondent aux images. Il doit y avoir deux images par pages, dans l’exemple, l’adulte et l’enfant avec ces codes-barres correspondants.
  • Je fais les copies du PDF et les colles dans un doc Word, en premier toutes les images que je ne positionne pas et redimensionnent à la taille souhaitée avec des return entre images pour les espacer, afin de limiter les manipulations.
  • Après j’ajoute les codes barre, ET C’EST LA QUE JE VOUDRAIS AUTOMATISER LA MISE AUX DIMENSIONS.
  • Donc je copie le code barre, commande macro, la mise aux dim est faite et je peux positionner le code là où il doit aller.
  • A partir de ce doc Word, je fais un PDF. je n'arrive pas à joindre le WORD trop volumineux, et je ne sais comment le réduire. il fait 1442ko.
  • je ne sais pas si c’est plus clair mais c’est ce que je fais.

Merci de l’aide, si possible.
  • Cordialement
 

Pièces jointes

  • fichier recu.pdf
    144 KB · Affichages: 2
  • fichier créé.pdf
    243.9 KB · Affichages: 2

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Précisions
Pour pouvoir appliquer ceci: devant le texte (sur un fichier image inséré dans Word)
(par le biais de VBA), il faut que le shape soit un InLineShape converti en Shape
(enfin c'est que j'ai lu sur le net)
D'où mon exemple en message#5)
(Et le test se faisait sur une image insérée par Insertion/Image/A partir de cet appareil
(il s'agissait d'une image *.png)

Le code de mromain ainsi modifié fonctionne avec un *.png
(sauf pour la taille)
VB:
Public Sub Test_C()
Dim oImage As Object, oRng As Range
Set oImage = ActiveDocument.InlineShapes(1)
With oImage
Set oRng = .Range: .ConvertToShape
End With
With oRng.ShapeRange(1)
    .WrapFormat.Type = wdWrapFront
    .Height = Application.CentimetersToPoints(4)
    .Width = Application.CentimetersToPoints(10)
End With
End Sub
Alors qu'avec le code du message#5, j'ai bien une taille de 4 cm x 10 cm

NB: Par contre le code intial de mromain fonctionne bien avec une forme automatique
(insérée avec Formes automatiques)
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel