Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/06/2011, 17h24   #1
Invité de passage
 
Homme
Directeur de projet
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur de projet
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 1
Points : 1
Par défaut VBA - Maîtriser la taille d'une image

Bonjour,
J'ai créé une macro qui insère dans un document Word un ensemble d'articles faits de :
a) de une à quelques lignes de texte
b) une image que je vais chercher sur mon disque
c) un saut de page
et ainsi de suite jusqu'à ma dernière image.
Les images sont de taille variable, certaines dépassent la taille d'une page A4, donc je les réduis. Du fait que la taille de texte qui précède mon image est variable, il me reste plus ou moins de place en dessous (avant mon saut de page) pour y placer mon image.

J'ai le problème suivant : je voudrais utiliser au mieux cet espace sous mon texte, càd retailler mon image en fonction de la place que j'ai, et non pas de façon absolue comme je le fais actuellement :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
Last_Shape = ActiveDocument.InlineShapes.Count ' juste après avoir inséré mon image
H_Origine = ActiveDocument.InlineShapes(Last_Shape).Height
L_Origine = ActiveDocument.InlineShapes(Last_Shape).Width
 
max_h = 510 ' c'est ce "510" que j'aimerais remplacer par quelque chose de dynamique 
    If H_Origine > max_h Then
        With ActiveDocument.InlineShapes(Last_Shape)
            .Height = max_h
            .Width = (L_Origine * max_h) / H_Origine
        End With
    End If
J'ai obtenu la valeur "510" à partir de la taille maxi que peut occuper le texte en début de page...

L'un de vous saurait-il m'indiquer dans quelle direction chercher ?
Merci pour votre aide
--
phil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 22h49   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 323
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 323
Points : 29 225
Points : 29 225
Salut,

Malheureusement, les pages ne sont pas des Objets en Word, il est donc très difficile de déterminer ce qui reste comme place sur une page.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 19h19   #3
Membre actif
 
Avatar de Souriane
 
Femme Guylaine C.
Assistant aux utilisateurs
Inscription : septembre 2009
Messages : 157
Détails du profil
Informations personnelles :
Nom : Femme Guylaine C.
Âge : 39
Localisation : Canada

Informations professionnelles :
Activité : Assistant aux utilisateurs
Secteur : Service public

Informations forums :
Inscription : septembre 2009
Messages : 157
Points : 153
Points : 153
Bonjour,

@ Heureux-Oli, est-ce qu'on pourrait déterminer la position du curseur sur la page et ensuite faire le calcul de ce qui reste comme place pour déterminer la grandeur de l'image?

@phil2005, si tu veux faire des recherches voici un début de code :

Code :
1
2
x = Selection.Information(wdHorizontalPositionRelativeToPage) 
y = Selection.Information(wdVerticalPositionRelativeToPage)
Rappel : 72 pts. = 1 inch = 2.54 cm

Aussi, ne pas oublier de se mettre en mode de visualisation "Page" avec affichage à 100% avant d'utiliser cette propriété.

Souriane
Souriane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 21h01   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 323
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 323
Points : 29 225
Points : 29 225
Salut Souriane,

On pourrait, mais imagine l'usine à gaz, en plus comme les pages ne sont pas des objets définis en Word, pour chaque changement, il faudrait refaire la mise en page de la totalité du document.

Pour se rendre compte de la complexité, il suffit de changer d'imprimante pour un document.

Le code que tu donnes pourrait faire l'affaire.
Une page donne 732 points de haut avec les marges.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 14h34   #5
Invité de passage
 
Homme
Directeur de projet
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur de projet
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 1
Points : 1
Bonjour à vous deux,
Merci Souriane pour cette piste. J'ai un peu tardé à revenir vers vous mais mon problème est toujours d'actualité !
Je vais suivre cette piste à vous tiens au courant.

A bientôt
phil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 15h05   #6
Invité de passage
 
Homme
Directeur de projet
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Directeur de projet
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 1
Points : 1
... j'ai bien l'impression que ma solution est aussi simple que :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
Y = Selection.Information(wdVerticalPositionRelativeToPage) 
[...] ' insertion de l'image
Last_Shape = ActiveDocument.InlineShapes.Count 
H_Origine = ActiveDocument.InlineShapes(Last_Shape).Height
L_Origine = ActiveDocument.InlineShapes(Last_Shape).Width
 
 
max_h = 732 - Y 
If H_Origine > max_h Then
    With ActiveDocument.InlineShapes(Last_Shape)
        .Height = max_h
        .Width = (L_Origine * max_h) / H_Origine
    End With
End If
Un grand merci à vous deux !
phil2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h17.


 
 
 
 
Partenaires

Hébergement Web