Macro sous Word insertion photos - VB/VBA/VBS - Programmation
Marsh Posté le 15-10-2008 à 11:33:21
Une "geekette" qui ne sais pas écrire une macro Word... c'est pas une geekette !
Le plus simple, c'est de faire "insérer une image", et ensuite, de tout sélectionner... là il va t'ajouter toutes les images... je vois pas l'intérêt d'une macro dans ce cas.
Sinon, tu peux, pour insérer une image utiliser la commande
Selection.InlineShapes.AddPicture FileName:="CHEMIN\NOM_FICHIER.EXTENSION", LinkToFile:=False, SaveWithDocument:=True
Et pour passer une ligne, la commande
Selection.TypeParagraph
Marsh Posté le 15-10-2008 à 11:36:27
dslée, les macro je m'les fais avec la commande enregistrer
Et trop de projets en hard pour mettre les mains dans le soft en ce moment
En plus, ça urge vraiment, et je suis une bille en prog.
Marsh Posté le 15-10-2008 à 12:06:22
Eh bien ma réponse convient... donc désolé, j'ai aussi plein de trucs urgents moi aussi à faire avant de faire ceux des autres !
Tu fais ça avec la commande enregistrer... et ensuite tu modifies le code, donc rien de bien compliqué là dedans ! faut pas pousser non plus.
Dans tous les cas, la sélection multiple lors de l'insertion reste le meilleur moyen... pourquoi ne pas faire ça ?
Marsh Posté le 15-10-2008 à 12:23:19
parce que ça marche pas !!!!!
dslée si je t'ai froissé, et merci du coup de main, j'vais tenté de regarder, mais je ne connais vraiment rien à la programmation, je suis de formation juridique : monter un pc de A à Z ok, mais le code c'est pas mon truc.
En tout cas encore merci.
Marsh Posté le 15-10-2008 à 12:30:47
Si si... ça marche très bien, j'ai fait le test.
Tu fais "insertion d'image"
ensuite, tu vas dans le répertoire qui t'intéresse... et là tu sélectionnes plusieurs fichiers images... (avec ctrl pour une sélection multiple par exemple).
Il t'insère alors toutes les images sélectionnées.
(je ne suis pas froissé mais le "faites moi tout parce que moi je suis super pressé"... bof... c'est pas trop la conception d'un forum d'entre aide)
Marsh Posté le 15-10-2008 à 12:30:48
j'ai oublié de préciser, on bosse avec WORD 97, en raison des spécificités de notre logiciel preofessionnel.
Marsh Posté le 15-10-2008 à 13:34:23
Et Word 97 ne sait pas faire ça ???... il veux pas de multi sélection ? il dit quoi ?
Sinon, pour la macro, y'a pas besoin de savoir écrire les macros... tu fais du copier coller de la ligne que j'indique autant de fois que d'images, et tu indiques le nom du fichier image... ça ne nécessite aucune connaissance en programmation, simplement de savoir remplacer "CHEMIN" par le chemin où se trouvent les images... je pense que c'est à la portée de quiconque qui sait se servir un minimum d'un ordinateur.
Marsh Posté le 15-10-2008 à 13:38:41
Ptit loup a écrit : Si si... ça marche très bien, j'ai fait le test. |
je t'assure, impossible de sélectionner plusieurs photos que ce soit avec cTRL ou shift.
avec ton code ok, mais la difficulté, pour moi, c'est de créer une boucle pour lui faire insérer toutes les photos ou une fourchette de numéros préalablement définie
Marsh Posté le 15-10-2008 à 13:40:50
Ptit loup a écrit : Et Word 97 ne sait pas faire ça ???... il veux pas de multi sélection ? il dit quoi ? |
en fait je veux automatiser l'opération : pour rédiger des PV de constats de travaux, avec insertion de 200 photos en moyenne.... donc le but ce serait d'insérer toutes photos d'un coup et taper le texte ensuite.
en fait la macro doit être à vocation générale, avoir une boite de dialogue où on entre le fichier spécifié.
je sais pas si c'est très clair...
Marsh Posté le 15-10-2008 à 14:20:27
Bon... j'ai pas pris le temps de faire une boite de dialogue pour "naviguer" sur le disque pour choisir le répertoire... mais ça devrait déjà bien te dépanner...
(regarde ce que fait cette macro, ça peut être intéressant).
Sub InsertionImages() |
Je vais insérer ta question ainsi que la réponse dans le topic unique Word... histoire que ça puisse resservir à d'autres !
Marsh Posté le 15-10-2008 à 14:27:34
ok, je vais tester ça de suite, merci mille fois.
Marsh Posté le 15-10-2008 à 15:23:00
Encore un grand grand merci, c'est tout simplement impec, ça va me fare gagner un temps fou !!!!
j'vais voir si je peux aussi par ce biais déterminer directement la taille des photos.
Pour la mise en page, c'est déjà fait.
Marsh Posté le 15-10-2008 à 15:35:59
J'ai essayé d'ajouter la ligne en rouge, pour la taille, mais ça ne veut pas, je supose qu'il ne sait pas kel objet est à traiter : mais je sais pas comment lui dire non plus
Sub InsertionImages()
Dim Repertoire As String
Dim Extension As String
Dim Fichier As String
'Saisie du nom du répertoire
Repertoire = InputBox("Chemin complet du répertoire (\ à la fin)", "Répertoire", "D:\Mes images" )
'Saisie du type d'extension
Extension = InputBox("Type de fichier (sans le point, ex : jpg, png, bmp)", "Type de fichier", "jpg" )
'Récupération du premier fichier du répertoire
Fichier = Dir(Repertoire & "*" & Extension, vbDirectory)
Do While Fichier <> ""
i = i + 1
'Insertion de l'image
Selection.InlineShapes.AddPicture FileName:=Repertoire & Fichier
Selection.InlineShapes.Width = 200
'Insertion d'une ligne vide
Selection.TypeParagraph
'Récupération du prochain fichier du répertoire
Fichier = Dir
Loop
End Sub
Marsh Posté le 15-10-2008 à 15:56:41
J'ai :
erreur de compilation
membre de méthode ou de donnée introuvable
Marsh Posté le 15-10-2008 à 15:58:46
Bonsoir,
essaye ceci:
remplacer Selection........ par: set ILS = Selection.....
et ta "ligne en rouge" par: ILS.Width=200
width ne change que la largeur, il fauda aussi changer Heigth
Marsh Posté le 15-10-2008 à 16:01:10
en fait un truc du genre, pour la taille image :
If eight < Width, Selection.InlineShapes.Width = 200
else eight=200
mais ça doit pas être la bonne syntaxe
>>> et aussi lui dire de le faire en sélectionnant l'image, ça arrangera mon message d'erreur, je suppose
Marsh Posté le 15-10-2008 à 16:09:06
Re,
je tenterai ceci:
Wio = ils.Width
ils.Width = 200
ils.Height = ils.Height * 200 / Wio
Marsh Posté le 15-10-2008 à 16:10:43
seniorpapou a écrit : Bonsoir, |
je mets koi à la places des ..... ?
si je mets une ligne en-dessous de ma ligne "selection"...
style : "Set ILS = Selection" ça marche pas, j'ai "erreur... propriété ou méthode non gérée par cet objet"
et si je mets "Set ILS=" devant ma ligne Selection, j'ai une erreur de compilation.
Marsh Posté le 15-10-2008 à 16:11:20
tu dois mettre des parenthèses je crois:
set ILS =Selection.InlineShapes.AddPicture (FileName:=Repertoire & Fichier )
Marsh Posté le 15-10-2008 à 16:14:08
Je dois m'absenter, je repasse la main à ptit loup que je salue.
Marsh Posté le 15-10-2008 à 16:31:23
Voilà le nouveau code à utiliser alors pour la partir "insertion de l'image"...
'Insertion de l'image |
Libre à toi de choisir autre chose que 200 comme largeur !
Marsh Posté le 15-10-2008 à 16:57:44
Possible d'avoir un truc de ce style (traduit en bonne syntaxe):
'Insertion de l'image
Set objShape = Selection.InlineShapes.AddPicture(FileName:=Repertoire & Fichier)
With objShape
.LockAspectRatio = msoTrue
if width > eight
.Width = 200
.else eight =200
End With
merci
Marsh Posté le 15-10-2008 à 17:07:14
j'ai essayé ça, mais y'a pas bon :
Set objShape = Selection.InlineShapes.AddPicture(FileName:=Repertoire & Fichier)
With objShape
.LockAspectRatio = msoTrue
If objShape.Width > objShape.eight Then objShape.Width = 200
objShape.eight = 200
End With
Marsh Posté le 15-10-2008 à 17:08:01
Oui, tu peux en effet faire ça...
Il va te falloir plutôt utiliser le .width et le .height pour que la syntaxe soit correcte... et ça devrait marcher (et virer le . du else )
Marsh Posté le 15-10-2008 à 17:09:46
Comme ça
Set objShape = Selection.InlineShapes.AddPicture(FileName:=Repertoire & Fichier) |
Le With rend en fait le "objShape" implicite quand tu utilises la notation pointée.
Marsh Posté le 15-10-2008 à 17:19:36
ça marche pas, j'ai "erreur... propriété ou méthode non gérée par cet objet"
Marsh Posté le 15-10-2008 à 17:24:07
apparemment c'est le test qui le chagrine " If .Width > .Eight Then"
Marsh Posté le 15-10-2008 à 18:14:19
lol j'ai trouvé depuis, merci.
Par contre, je n'arrive pas à avoir un raport correct hauteur / largeur, du coup j'ai essayé ça :
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Set objShape = Selection.InlineShapes.AddPicture(FileName:=Repertoire & Fichier)
Set ratio = (objShape.with / objShape.Height)
With objShape
If .Width > .Height Then
.Width = 405.35
.Height = 405.35 / ratio
Else
.Height = 405.35
.Width = 405.35 / ratio
End If
End With
Mais à mon avis faut autre chose à la place de "ratio", non ?
Marsh Posté le 15-10-2008 à 18:46:52
pas le temps de tester, mais j'aurais mis
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
Set objShape = Selection.InlineShapes.AddPicture(FileName:=Repertoire & Fichier)
ratio = (objShape.width / objShape.Height) <-------width et non with
With objShape
If .Width > .Height Then
.Width = 405.35
.Height = 405.35 / ratio
Else
.Height = 405.35
.Width = 405.35 * ratio
End If
End With
Marsh Posté le 15-10-2008 à 20:36:33
j'ai un message : erreur de compilation objet requis, en arrivant sur "set ratio"
Marsh Posté le 15-10-2008 à 21:03:49
tu remarqueras que j'ai supprimé le SET dans cette ligne là
Marsh Posté le 15-10-2008 à 21:41:03
Le pb du rapport hauteur/largeur.... c'est que comme des saloupiauds, vous avez dégagé la ligne qui le conservait ce rapport ! grrr !
=> .LockAspectRatio = msoTrue
Donc aucun intérêt de calculer le ratio et de fixer ET hauteur ET largeur...
On fait le test sur la plus grande longueur... et on fixe cette longueur (qui est souvent la largeur, et parfois la hauteur (enfin, ça dépend du type d'image) à la valeur que l'on veut...
Tout ça comme dans mon code... (avec le H en plus ) j'ai repris le code rapidos sans en vérifier la syntaxe... sorry.
Marsh Posté le 15-10-2008 à 21:49:01
Bonsoir,
j'avais cru comprendre qu'il navait pas réussi à conserver les proportions avec le .LockAspectRatio = msoTrue
Voir son message Posté le 15-10-2008 à 18:14:19
Marsh Posté le 15-10-2008 à 22:04:24
ça devait venir de l'erreur d'ortho je suppose...
En tout cas, le LockAspectRatio fonctionne très bien, comme indiqué plus haut, je l'ai testé.
Marsh Posté le 15-10-2008 à 22:15:40
Je n'avais pas testé, mais je viens de le faire avec ce que tu indiques au "Posté le 15-10-2008 à 17:09:46" , l'image est déformée. Pourtant cela devrait fonctionner, je suis d'accord avec toi. Bonne nuit.
Marsh Posté le 15-10-2008 à 22:23:09
avant de fermer, j'ai trouvé ceci:
http://social.msdn.microsoft.com/F [...] 2161e476b/
Marsh Posté le 15-10-2008 à 22:27:13
Bon... eh bien j'ai refait le test... et je confirme que pour moi, tout est OK avec cette macro (Word 2007, mais les fonctions utilisées n'ont rien de particulier ni de récent)
J'ai fait le test avec plusieurs répertoires images... en paysage et en portrait... en différents formats, et aucune n'est déformée.
(ensuite, si la valeur indiquée est plus grande que la largeur possible sur la page, j'ai pas fait de tests, mais ça peut jouer)
Sub InsertionImages() |
Marsh Posté le 15-10-2008 à 22:29:52
OK pour le lien... ou alors peut être un bug corrigé seulement sur les versions récentes d'Office...
Il reste l'autre solution, de calculer le ratio à la main, et de le reporter sur hauteur et largeur à chaque fois...
Marsh Posté le 15-10-2008 à 11:15:07
Hello les truffes.
Je vous passe les détails (pas le temps), mais pour le taf, j’ai besoin de pouvoir insérer rapidement sur un document word un nombre important de photos.
L’idéal serait de créer une macro qui permettre d’insérer toutes les photos d’un dossier, genre au lancement de la macro une boite s’ouvre demandant le chemin du dossier à traiter, et pouf, une fois la macro exécutée, toutes les images au format jpeg de ce fichier se trouvent insérées, dans l'ordre croissant des noms des photos, idéalement encore avec, intercalé entre chaque photo 2 lignes blanches et une troisième ligne au milieu avec un caractère « $ ».
Style :
Photo
Ligne blanche
$
ligne blanche
photo
Ligne blanche
$
.........
Bref, ça me ferait gagner un temps considérable.
Si quelqu’un pouvait me créer la macro et ensuite me balancer le code VBA de la macro, ce serait nickel.
A vos propales, Messieurs les Pro
: hello :
ha oui, c'est URGENTISSIME !!!!
---------------
Mes Achats/Ventes // Achète Portables à réparer