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 09/09/2008, 11h23   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 1
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 1
Points : 0
Points : 0
Par défaut Obtenir l'espace restant sur une page (adapter la taille d'1 image à cet espace)

Bonjour,

Je cherche à faire une macro qui me permette de redimensionner des images importées grâce à un autre logiciel. En effet je souhaite que celles ci se dimensionnent automatiquement à l'espace restant sur ma page afin de ne pas voir l'image se retrouver seule sur une page.

J'arrive à redimensionner l'image mais je n'arrive pas à obtenir l'espace restant sur ma page après mon texte pour avoir la taille à laquelle mettre l'image.

Quelqu'un aurait-il une solution?

Merci par avance
nekou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 00h45   #2
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut,

Word dispose d'une fonction fourre-tout depuis WordBasic (la SelInfo qui te donne des infos sur la sélection en cours et qui est devenu Selection.Information) ==> .

Dans ton cas (comme tu ne nous a pas dit ce que tu avais comme version, j'ai supposé un Word2003), tu as
Code :
1
2
   HauteurPosEnTwip = Selection.Information(wdVerticalPositionRelativeToPage)
   LargeurPosEnTwip = Selection.Information(wdHorizontalPositionRelativeToPage)
qui renvoient la distance entre le bord supérieur (respectivement gauche) de la sélection et le bord supérieur (respectivement gauche) de la page. Les mesures sont exprimés en twips (= 1/20 point Word et 72 points Word = 1 pouce = 2,54 cm environ). Attention, les points Word ne sont ni des points Pica ni points Cicéro (mais des points que j'appelle Word car seul Word utilise).

Voila après, tu utilises des informations de marge de ta section, ta reliure (avec les cas des pages droites et gauches), ton format de papier, une grosse soustraction plus tard, tu as tes info en cm.

Poste si tu n'as pas assez d'explication et que tu veuilles comprendre (mais attention, c'est compliqué).

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 10h41   #3
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Hello Sepia,
Tu mets "Les mesures sont exprimés en twips (= 1/20 point Word et 72 points Word = 1 pouce = 2,54 cm environ)"
Une question pour ma gouverne : Le nombre de twips ne dépend-il pas de la définition de l'écran ?
Juste pour compliquer un peu Mais ma question demeure
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 11h53   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 364
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 364
Points : 29 286
Points : 29 286
http://access.developpez.com/faq/ind...chercher=twips
__________________
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 11/09/2008, 12h39   #5
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Merci Heureux-Oli, C'est bien ce qu'il me semblait
Citation:
Envoyé par Le lien du lien du lien...
Cela signifie que la relation entre les twips et les pixels dépend de la résolution de l'écran.
Et donc, nekou, t'es pas sorti de l'ornière
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2008, 12h49   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 364
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 364
Points : 29 286
Points : 29 286
Le problème avec les pages en Word, c'est que ce sont des "objets" non reconnus, on ne peut pas la saisir simplement, il faut utiliser des tas de choses pour y arriver.
En plus, si on veut manipuler une partie du contenu pour n'importe quelle raison, on entre dans le débuts des problèmes.

Sachant que les pages sont variables en fonction de l'imprimante, du papier, de la disposition du papier, des marges du document et cette liste n'est pas exhaustive.

Ce sera toujours de l' "A peu près"
Ce que l'on peut faire dans le cas de nekou, c'est compter le nombre de lignes de texte déjà présent et on devrait alors connaître le nombre de lignes "vides" et en utilisant le nombre de points utilisés par une ligne, connaître approximativement l'espace restant.

Mais c'est pas si simple et il faut que les lignes utilisées soient toutes du même style, sans quoi il faut faire le compte par style et ...

Pour écrire ce genre de macro, il faut vraiment que ça vale la peine.
__________________
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 12/09/2008, 15h47   #7
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Un bricolage pourrait peut-être te donner une réponse mais je ne garantis rien. Consisterait à décompter physiquement le nombre lignes d'une page entièrement renseignée, ceci avec moveDown, et en testant le N° de la page, puis à compter le nombre de lignes renseignées sur ta page incomplète. Il te reste à faire une soustraction.
Pour la page entièrement renseignée :
Tant que N° de page ne change pas
Compter les lignes
Fin boucle
et tu fais pareil pour ta feuille incomplète
tant que MoveDown ne donne pas la même ligne (mémorisé dans Mem dans l'exemple suivant)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Option Explicit
 
Sub test()
Dim NoPage As Integer, Mem$, NoLig1 As Integer, NoLig2 As Integer
    Selection.HomeKey Unit:=wdStory
    Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=1
    'Compte le nombre de ligne d'une page complètement renseignée
    '(dans cet exemple la page 1)
    NoPage = Selection.Information(wdActiveEndPageNumber)
    Do While Selection.Information(wdActiveEndPageNumber) = NoPage
        Selection.MoveDown Unit:=wdLine, Count:=1
        NoLig1 = NoLig1 + 1
    Loop
 
    'recherche de la dernière page (envoie en fin de document)
    Selection.EndKey Unit:=wdStory
    NoPage = Selection.Information(wdActiveEndPageNumber) 'dernière page
 
    'Envoie en début de dernière page
    Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=NoPage
 
    'Compte le nombre de lignes de cette dernière page
    Do While Selection.Information(wdActiveEndPageNumber) = NoPage
        With Selection
            .ExtendMode = True
            .MoveEnd Unit:=wdLine, Count:=1
        End With
        If Mem = Selection Then Exit Do
        Mem = Selection
        Selection.MoveRight Unit:=wdCharacter, Count:=1
        NoLig2 = NoLig2 + 1
    Loop
 
    'Affiche le nombre de lignes restant
    MsgBox NoLig1 - NoLig2
End Sub
J'ai bien dit "un bricolage"...
A défaut de mieux
Bon après-midi

Edit
Comme le dit Heureux-Oli, c'est de "l'à peu près" car ne tient pas compte des lignes de titre, des espacements donnés aux différents paragraphes, etc.

Après, il reste également à multiplier par le nombre de points par ligne... comme le dit aussi Heureux-Oli (!)
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2008, 18h28   #8
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut,

Oui c'est vrai Ouskel'n'or mais comme un twip est une unité de mesure directement linéaire au nb de cm, que l'on a rien à faire dans ce cas des pixels, et que tu peux exprimer dans Word des dimensions d'image en cm donc la résolution de l'écran n'a pas besoin d'être connue, en revanche la résolution de l'image change des choses.

En effet, 1 cm <==> 28,2 twips donc si tu connais ta page en cm (disons du A4 soit 21 x 29,7 cm), ton orientation (disons à la française = portrait pour Word), tes marges (disons 2,5 cm de chaque côté), si tu as une position verticale de 222 twips, et que ta police soit de 12 points et que ton paragraphe est un espace avant de 6 points (standard) alors on obtient
Code :
1
2
3
 
   (29,7 - 2,5 (Marge Haute) - 2,5 (Marge Basse)) * 28,2 = 696,54 twips
   donc l'espace vertical restant est de 696,54 - 222 = 474,54 twips / 28,2 soit 16,8 cm
Ceci est bien la hauteur restant utilisable (sur plusieurs postes avec plusiurs écrans différents y compris des 16/9). Je te conseille de prendre 0,5 cm de marge pour éviter des ennuis d'arrondi et surtout de ne te baser que sur la hauteur (pour éviter des phénomènes très moches d'anamorphose
de ton image) et de calculer la largeur non pas par rapport à l'espace restant mais proportionnellement aux dimensions de ton image.

Tiens-nous au courant
@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2008, 21h26   #9
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Merci pour ton explication, Sepia. Elle mériterait d'être placée quelque part dans la FAQ (Word de préférence afin qu'on la retrouve...)
Par contre,
Citation:
Envoyé par nekou
je n'arrive pas à obtenir l'espace restant sur ma page après mon texte pour avoir la taille à laquelle mettre l'image.
Et là, pour ma part, je ne vois toujours pas, à moins de définir pour chaque ligne précédente la taille de police, les espacements avant et après paragraphe, etc.

Comme je ne vois pas de solution simple à proposer, m'est venu une autre idée

Consiste à
- mémoriser le numéro de page de la fin du texte,
- placer l'image après ce texte
et, dans une boucle,
- modifier la taille de l'image jusqu'à ce qu'elle entre dans la même page.
Une taille max et une taille min évitant d'obtenir une icône

Code :
1
2
3
4
5
6
Si Hauteur < Max et > Min => c'est bon, on ne fait rien
Sinon
Tant que N° page de l'image <> Page de fin de texte
    Si Hauteur > Min alors diminuer Hauteur 'un peu'
    Si Hauteur < Min => on place l'image sur la feuille suivante
Fin tant que
J'ai testé ça pour une image de taille systématiquement > à la taille Max, à adapter dans le cas contraire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub Test()
Dim NoPage As Integer, im As InlineShape
    'Pour accélérer le bidule
    Application.ScreenUpdating = False
 
    'Place en fin de doc (on peut remplacer par un goto No de page -> voir [1])
    Selection.EndKey Unit:=wdStory
 
    'mémorise le No de page
    NoPage = Selection.Information(wdActiveEndPageNumber)
 
    'Insère l'image. im, instance de l'image, sert à raccourcir le code -> Voir [2]
    Set im = Selection.InlineShapes.AddPicture(FileName:="D:\Rep photos\Limage.jpg")
 
    'Sélection de l'image
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
 
    'Tant que le N° de page est différent de celui du texte, on réduit l'image
    Do While Selection.Information(wdActiveEndPageNumber) <> NoPage
        'Réduction de l'image de "-1"  (fixé empiriquement)
        im.Height = im.Height - 1
        'On adapte le - 1 au rapport Hauteur/largeur de l'image
        im.Width = im.Width - 1 * im.Width / im.Height
    Loop
    Application.ScreenUpdating = True
End Sub
[1] Si un goto No de page est utilisé, il sera nécessaire de faire une boucle (donnée dans un post précédent) permettant de se placer sur la première ligne vide de la page concernée.

[2] Passer par l'objet Image ralentit la procédure et occupe de la place mémoire mais simplifie l'écriture (cette remarque n'étant valable que pour un grand nombre d'images)

NB - Je n'ai pas limité la taille de l'image ni à un min ni à un max mais je ne pense pas que l'adapter présente de difficulté...
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2008, 18h14   #10
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut Ouskel'nor,

le pb c'est que je ne sais pas comment faire pour mettre une info sur la FAQ et puis il faut l'épurer pour n'avoir que son contexte (comme d'habitude je vais essayer de voir ça avec Heureux-Oli).

Ok pour ton algo qui est simple a le mérite de pouvoir être étendu sous forme progressive avec plusieurs passages. Le 1er détermine grossièrement la taille et puis on affine de plus en plus jusqu'à la granularié voulue ou jusqu'au twip (qui est l'unité la plus petite de Word).

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2008, 20h46   #11
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Cépanous qu'on met dans la FAQ... Tu places ton message dans Contribuez. Quand le grand responsable passe par là, il juge de l'opportunité de le placer dans la FAQ. Et là, je pense qu'il n'y aura pas de problème.
Bonne soirée
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h27.


 
 
 
 
Partenaires

Hébergement Web