Macro taille image collée dans Word 2007
Résolu/Fermé
Vesper Lynd
Messages postés
11
Date d'inscription
vendredi 12 février 2010
Statut
Membre
Dernière intervention
12 février 2010
-
12 févr. 2010 à 10:04
bibilac - 30 mars 2012 à 15:06
bibilac - 30 mars 2012 à 15:06
A voir également:
- Macro taille image collée dans Word 2007
- Comment réduire la taille d'un fichier - Guide
- Macro word - Guide
- Espace insécable word - Guide
- Comment supprimer une page dans word - Guide
- Organigramme word - Guide
18 réponses
m@rina
Messages postés
21078
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
13 novembre 2024
11 350
12 févr. 2010 à 11:52
12 févr. 2010 à 11:52
Bonjour,
Moi je dis toujours qu'il vaut mieux réserver les macros lorsque c'est indispensable. Parce que ça génère quand même pas mal de problème. Y a toujours la personne qui n'a pas activé les macros, les récup de fichiers pour en créer un autre, et hop, on perd la macro au passage, etc.
Parce que si j'en juge ton modèle à travers tes explications, et vu que tu utilises Word 2007, il n'y a pas besoin de macro du tout !
- Insertion de champs de formulaires 2007
- Création de la cellule de tableau pour l'image
- Protection : protéger tout (aucune modif)
- Sélection des champs de formulaires et du tableau
- Cocher Exception => tout le monde
Et voilà ! tu as un template léger, protégé, que tout le monde peut utiliser sans souci.
Il faut aussi penser à une chose : si l'utilisateur décide de changer d'image, il va réutiliser ta macro qui ne fera que coller une nouvelle image, et la première sera toujours là.
Bref... à mon avis, où il faut macroter plus que cela, ou oublier les macros.
m@rina
Moi je dis toujours qu'il vaut mieux réserver les macros lorsque c'est indispensable. Parce que ça génère quand même pas mal de problème. Y a toujours la personne qui n'a pas activé les macros, les récup de fichiers pour en créer un autre, et hop, on perd la macro au passage, etc.
Parce que si j'en juge ton modèle à travers tes explications, et vu que tu utilises Word 2007, il n'y a pas besoin de macro du tout !
- Insertion de champs de formulaires 2007
- Création de la cellule de tableau pour l'image
- Protection : protéger tout (aucune modif)
- Sélection des champs de formulaires et du tableau
- Cocher Exception => tout le monde
Et voilà ! tu as un template léger, protégé, que tout le monde peut utiliser sans souci.
Il faut aussi penser à une chose : si l'utilisateur décide de changer d'image, il va réutiliser ta macro qui ne fera que coller une nouvelle image, et la première sera toujours là.
Bref... à mon avis, où il faut macroter plus que cela, ou oublier les macros.
m@rina
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 févr. 2010 à 10:29
12 févr. 2010 à 10:29
Salut,
Tout d'abord, je précise que je ne connais pas VBA sous word...
J'ai néanmoins vu dans l'aide que l'on peux attribuer à "InlineShapes" une valeur de height (hauteur) et de width (largeur). Je pense qu'il faut voir de ce côté.
Vu sur CCM également : ici ceci :
Tout d'abord, je précise que je ne connais pas VBA sous word...
J'ai néanmoins vu dans l'aide que l'on peux attribuer à "InlineShapes" une valeur de height (hauteur) et de width (largeur). Je pense qu'il faut voir de ce côté.
Vu sur CCM également : ici ceci :
Selection.InlineShapes(1).LockAspectRatio = msoTrue Selection.InlineShapes(1).Height = ton hauteur Selection.InlineShapes(1).Width = ta largeur
Vesper Lynd
Messages postés
11
Date d'inscription
vendredi 12 février 2010
Statut
Membre
Dernière intervention
12 février 2010
12 févr. 2010 à 10:38
12 févr. 2010 à 10:38
Merci Pikaju
Mais ça marche pas :(
J'ai une erreur "5941" Le membre de la sélection requis n'existe pas.
je pense que le souci vient du fait que l'image est collée et non pas insérée par la fonction d'insertion Word.
ça fait 2 semaine que je triture les inlineshapes dans tous les sens sans vraiment comprendre ce que je fais et sans succès...
Mais ça marche pas :(
J'ai une erreur "5941" Le membre de la sélection requis n'existe pas.
je pense que le souci vient du fait que l'image est collée et non pas insérée par la fonction d'insertion Word.
ça fait 2 semaine que je triture les inlineshapes dans tous les sens sans vraiment comprendre ce que je fais et sans succès...
Vesper Lynd
Messages postés
11
Date d'inscription
vendredi 12 février 2010
Statut
Membre
Dernière intervention
12 février 2010
12 févr. 2010 à 10:45
12 févr. 2010 à 10:45
Voici la nouvelle macro, celle qui provoque l'erreur d'éxécution 5941:
Private Sub CommandButton11_Click()
'If document is protected, Unprotect it.
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect Password:=""
End If
Selection.GoTo What:=wdGoToBookmark, Name:="ECRAN"
Selection.MoveUp Unit:=wdLine, Count:=1
Selection.Paste
Selection.InlineShapes(1).LockAspectRatio = msoTrue
Selection.InlineShapes(1).Height = 200
Selection.InlineShapes(1).Width = 200
' ReProtect the document.
If ActiveDocument.ProtectionType = wdNoProtection Then
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, _
NoReset:=True
End If
End Sub
Je me demande si il faudrait pas définir une variable pour déclarer l'objet que je colle.
Sous excel, je me poserai pas la question, mais là sous word, et en plus 2007, je rame à reculon et j'attaque la falaise....
Private Sub CommandButton11_Click()
'If document is protected, Unprotect it.
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect Password:=""
End If
Selection.GoTo What:=wdGoToBookmark, Name:="ECRAN"
Selection.MoveUp Unit:=wdLine, Count:=1
Selection.Paste
Selection.InlineShapes(1).LockAspectRatio = msoTrue
Selection.InlineShapes(1).Height = 200
Selection.InlineShapes(1).Width = 200
' ReProtect the document.
If ActiveDocument.ProtectionType = wdNoProtection Then
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, _
NoReset:=True
End If
End Sub
Je me demande si il faudrait pas définir une variable pour déclarer l'objet que je colle.
Sous excel, je me poserai pas la question, mais là sous word, et en plus 2007, je rame à reculon et j'attaque la falaise....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 févr. 2010 à 11:17
12 févr. 2010 à 11:17
Bon sang de bonsoir, il faut que l'on trouve...
Essaye cette macro qui n'a rien à voir, il s'agit d'un test. Si j'ai bien compris il ne s'agit pas d'un objet InlineShapes car ton image est encadrée. Il s'agit d'un objet Shapes. Cette macro te le dira :
sources
Shapes et InlineShapes ont les mêmes propriétés donc après cela devrait aller avec .width et .height
Essaye cette macro qui n'a rien à voir, il s'agit d'un test. Si j'ai bien compris il ne s'agit pas d'un objet InlineShapes car ton image est encadrée. Il s'agit d'un objet Shapes. Cette macro te le dira :
sources
Sub TestTypeImage() Dim i As Integer If Not IsNull(ActiveDocument.InlineShapes.Count) Then i = ActiveDocument.InlineShapes.Count MsgBox "Votre document comporte " & _ i & vbCrLf & " Images de type InlineShape !" End If If Not IsNull(ActiveDocument.Shapes.Count) Then i = ActiveDocument.Shapes.Count MsgBox "Votre document comporte " & _ ActiveDocument.Shapes.Count & vbCrLf & " Images de type Shape !" End If End Sub
Shapes et InlineShapes ont les mêmes propriétés donc après cela devrait aller avec .width et .height
Vesper Lynd
Messages postés
11
Date d'inscription
vendredi 12 février 2010
Statut
Membre
Dernière intervention
12 février 2010
12 févr. 2010 à 11:27
12 févr. 2010 à 11:27
TRUC DE OUFF !!!!
Délir total
J'ai éxécuté la macro avant de cliquer sur mon bouton et j'ai découvert que j'avais 3 inlineshapes et 4 shapes.
Je l'ai ré-éxécutée après mon bouton coller image, et le compteur Inlinesshapes passe à 4 tandis que le shapes reste à 4.
Moralité, ça crée bien un Inlineshapes !!!
Le truc que je découvre, c'est que j'en avais déjà 3 :o
Forcément, le biniou, il sait pas trop avec ki il doit discuter...
T'es un champion :)
Je désespère de ne pas avoir pensé à faire ce test ! C'est dur de vieillir :((((( lol
Délir total
J'ai éxécuté la macro avant de cliquer sur mon bouton et j'ai découvert que j'avais 3 inlineshapes et 4 shapes.
Je l'ai ré-éxécutée après mon bouton coller image, et le compteur Inlinesshapes passe à 4 tandis que le shapes reste à 4.
Moralité, ça crée bien un Inlineshapes !!!
Le truc que je découvre, c'est que j'en avais déjà 3 :o
Forcément, le biniou, il sait pas trop avec ki il doit discuter...
T'es un champion :)
Je désespère de ne pas avoir pensé à faire ce test ! C'est dur de vieillir :((((( lol
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 févr. 2010 à 11:31
12 févr. 2010 à 11:31
ça n'est qu'un début, une piste.
Dès que ton code fonctionne, reviens le poster ici que cela serve pour les futurs amateurs d'images à redimensionner sous vba word...
Et place ensuite ce sujet comme "résolu".
Dès que ton code fonctionne, reviens le poster ici que cela serve pour les futurs amateurs d'images à redimensionner sous vba word...
Et place ensuite ce sujet comme "résolu".
m@rina
Messages postés
21078
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
13 novembre 2024
11 350
12 févr. 2010 à 11:34
12 févr. 2010 à 11:34
Bonjour,
Si le but est d'obtenir une image à une taille imposée, la macro est tout à fait inutile.
Il suffit de tracer une cellule de tableau à la bonne dimension de largeur, puis dans les propriétés du tableau, aller dans les options, et décocher l'option "Redimensionner automatiquement pour ajuster au contenu".
Ce qui aura aussi pour mérite de conserver les proportions de l'image.
m@rina
Si le but est d'obtenir une image à une taille imposée, la macro est tout à fait inutile.
Il suffit de tracer une cellule de tableau à la bonne dimension de largeur, puis dans les propriétés du tableau, aller dans les options, et décocher l'option "Redimensionner automatiquement pour ajuster au contenu".
Ce qui aura aussi pour mérite de conserver les proportions de l'image.
m@rina
Vesper Lynd
Messages postés
11
Date d'inscription
vendredi 12 février 2010
Statut
Membre
Dernière intervention
12 février 2010
12 févr. 2010 à 11:37
12 févr. 2010 à 11:37
Pfffffffff...
J'ai conservé ta proposition de code et, très naivement, j'ai transformé le petit (1) en (4) en me disant que c'était l'issue pour qu'il retrouve l'image collée.
Rien à faire, erreur 5941
En cherchant dans d'autres forums, j'ai aperçu des trucs disant que l'erreur 5941 était liée à une histoire d'ActiveDocument...
ça me parle pas, et toi ?
J'ai conservé ta proposition de code et, très naivement, j'ai transformé le petit (1) en (4) en me disant que c'était l'issue pour qu'il retrouve l'image collée.
Rien à faire, erreur 5941
En cherchant dans d'autres forums, j'ai aperçu des trucs disant que l'erreur 5941 était liée à une histoire d'ActiveDocument...
ça me parle pas, et toi ?
Vesper Lynd
Messages postés
11
Date d'inscription
vendredi 12 février 2010
Statut
Membre
Dernière intervention
12 février 2010
12 févr. 2010 à 11:44
12 févr. 2010 à 11:44
Merci Marina !
Effectivement, c'est une approche simple et efficace. Je te remercie pour ce conseil.
Par contre, c'est ptèt buté, borné ou bêtement obstiné, mais maintenant que je tripote ce code depuis une semaine, j'avoue que j'ai du mal à lacher prise et abandonner... j'aimerai bien comprendre ce qui marche pas, juste pour ma culture perso...
Mais merci encore !!!
Effectivement, c'est une approche simple et efficace. Je te remercie pour ce conseil.
Par contre, c'est ptèt buté, borné ou bêtement obstiné, mais maintenant que je tripote ce code depuis une semaine, j'avoue que j'ai du mal à lacher prise et abandonner... j'aimerai bien comprendre ce qui marche pas, juste pour ma culture perso...
Mais merci encore !!!
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 févr. 2010 à 11:52
12 févr. 2010 à 11:52
Oui je te comprends.
Ton problème dois venir du fait que, chaque fois que tu insères une image, le "compteur" de inlineshape s'incrémente et tu ne sais pas à combien il en est. Là tu aurais par exemple du mettre 5 parce que 4 c'était déjà fait...
Essaye comme ceci :
Sinon bien entendu je rejoinds Marina (salue!!).
Ton problème dois venir du fait que, chaque fois que tu insères une image, le "compteur" de inlineshape s'incrémente et tu ne sais pas à combien il en est. Là tu aurais par exemple du mettre 5 parce que 4 c'était déjà fait...
Essaye comme ceci :
Dim i As Integer i = ActiveDocument.InlineShapes.Count Selection.InlineShapes(i).LockAspectRatio = msoTrue Selection.InlineShapes(i).Height = 200 Selection.InlineShapes(i).Width = 200
Sinon bien entendu je rejoinds Marina (salue!!).
Vesper Lynd
Messages postés
11
Date d'inscription
vendredi 12 février 2010
Statut
Membre
Dernière intervention
12 février 2010
12 févr. 2010 à 11:57
12 févr. 2010 à 11:57
Ouais, c'est pas faux...
Tu m'as convaincue (même si ça m'enerve de pas avoir compris !)
Merci encore à vous deux
Tu m'as convaincue (même si ça m'enerve de pas avoir compris !)
Merci encore à vous deux
Vesper Lynd
Messages postés
11
Date d'inscription
vendredi 12 février 2010
Statut
Membre
Dernière intervention
12 février 2010
12 févr. 2010 à 12:01
12 févr. 2010 à 12:01
Pijaku, ça ne marche pas :( Merci pour ta persévérance.
Je ne comprends pas pourquoi et j'ai l'impression que je ne comprendrai jamais.
Je mets le topic en résolu ou pas ?
Je ne comprends pas pourquoi et j'ai l'impression que je ne comprendrai jamais.
Je mets le topic en résolu ou pas ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 févr. 2010 à 12:13
12 févr. 2010 à 12:13
Test d'abord ceci :
et si cela fonctionne met en résolu...
Dim i As Integer i = ActiveDocument.InlineShapes.Count ActiveDocument.InlineShapes(i).Select Selection.InlineShapes(i).LockAspectRatio = msoTrue Selection.InlineShapes(i).Height = 20 Selection.InlineShapes(i).Width = 500
et si cela fonctionne met en résolu...
Vesper Lynd
Messages postés
11
Date d'inscription
vendredi 12 février 2010
Statut
Membre
Dernière intervention
12 février 2010
12 févr. 2010 à 13:47
12 févr. 2010 à 13:47
rien à faire
Toujours la même erreur d'éxécution :(
je comprends pas
Toujours la même erreur d'éxécution :(
je comprends pas
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
12 févr. 2010 à 13:50
12 févr. 2010 à 13:50
alors considérons que Marina a la meilleure solution.
comme d'hab rrrrrrh!!!
bonne journée à vous 2
comme d'hab rrrrrrh!!!
bonne journée à vous 2
m@rina
Messages postés
21078
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
13 novembre 2024
11 350
12 févr. 2010 à 14:25
12 févr. 2010 à 14:25
Re...
Je vois qu'on devient raisonnable !!! ;))
J'ai pas suivi si ce sont des shapes ou des inlineshapes, mais voici un code exemple (histoire de ne pas trop t'énerver !;)) qui va donner une largeur de 200 pt à tous les images Inlineshapes du document actif.
m@rina
Je vois qu'on devient raisonnable !!! ;))
J'ai pas suivi si ce sont des shapes ou des inlineshapes, mais voici un code exemple (histoire de ne pas trop t'énerver !;)) qui va donner une largeur de 200 pt à tous les images Inlineshapes du document actif.
Sub dessins() Dim image For Each image In ActiveDocument.InlineShapes image.Width = 300 image.LockAspectRatio = True Next image End Sub
m@rina
Bonjour,
J'ai une réponse directe à la question initiale : je pense que le pb vient de ce que le graphique qu'on vient d'insérer n'est pas sélectionné, alors toute commande faisant référence à la liste d'InlineShapes de la sélection provoque une erreur.
2 solutions : soit on sélectionne le graphique qu'on vient d'insérer :
Selection.InlineShapes.AddPicture FileName:="mon fichier graphique"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.InlineShapes(1).LockAspectRatio = msoTrue
Selection.InlineShapes(1).Height = CentimetersToPoints(10)
ou alors on appelle la collection d'InlinesShapes depuis le document actif (ce qui me semble plus élégant) :
Selection.InlineShapes.AddPicture FileName:="mon fichier graphique"
ActiveDocument.InlineShapes(ActiveDocument.InlineShapes.Count).LockAspectRatio = msoTrue
ActiveDocument.InlineShapes(ActiveDocument.InlineShapes.Count).Height = CentimetersToPoints(10)
J'espère que ça plaira à Pijaku (qui est peut être passé à autre chose depuis ...)
J'ai une réponse directe à la question initiale : je pense que le pb vient de ce que le graphique qu'on vient d'insérer n'est pas sélectionné, alors toute commande faisant référence à la liste d'InlineShapes de la sélection provoque une erreur.
2 solutions : soit on sélectionne le graphique qu'on vient d'insérer :
Selection.InlineShapes.AddPicture FileName:="mon fichier graphique"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.InlineShapes(1).LockAspectRatio = msoTrue
Selection.InlineShapes(1).Height = CentimetersToPoints(10)
ou alors on appelle la collection d'InlinesShapes depuis le document actif (ce qui me semble plus élégant) :
Selection.InlineShapes.AddPicture FileName:="mon fichier graphique"
ActiveDocument.InlineShapes(ActiveDocument.InlineShapes.Count).LockAspectRatio = msoTrue
ActiveDocument.InlineShapes(ActiveDocument.InlineShapes.Count).Height = CentimetersToPoints(10)
J'espère que ça plaira à Pijaku (qui est peut être passé à autre chose depuis ...)