no save
Assistance
Achat
News

Forum | Logiciels/Pilotes
word : clic => apparition d'image dans texte
gbousquet, le ven. 23 mars 2007 à 22:30:27
Bonjour,

j'ai voulu faire exactement la même chose pour un tutoriel : des images en miniatures qui ne s'agrandissent qu'à la demande du lecteur.

Il y a bien la première solution proposée qui consiste à convertir le doc en page web et à faire des liens hypertextes sur toutes les miniatures. Mais d'une part c'est lourd à écrire s'il y a de nombreuses images (à moins d'automatiser ça par une macro ..), d'autre part on perd l'avantage du document word : un fichier unique avec images incorporées au fichier. Et puis les popup .. c'est pas top.

Une variante avec les mêmes inconvénients sauf le popup: on écrit un code javascript qui modifie la taille de l'image par à un clic sur un bouton.

Finalement j'ai opté pour une solution word uniquement .

Tout d'abord je n'ai pas réussi à 'intercepter le double-clic sur une image. Quand on double-clique sur une image la boîte de dialogue de formatage de l'image s'ouvre. Normalement on devrait pouvoir l'intercepter avec une macro "Sub Formatimage " dans un module vba mais chez moi ça ne fonctionne pas (alors que j'intercepte très bien d'autres événement comme enregistrer sous , etc)

A la place j'ai choisi de créer une macro qui bascule la taille des images sélectionnées (miniature <-> taille normal) et qui est lancée par un raccourci clavier.
Pour faire bonne mesure jai prévu un basculement de certains textes (en taille 10,5 par ex) en une taille très petite (4). Je peux ainsi masquer/montrer certains commentaires par le même raccourci clavier.

voici le code VBA :


Dim petite_taille As Single
Dim grande_taille As Single
Dim position_initiale As Range

Function testeExistenceVariable(nomvariable)
Dim aVar As Variable
''cherche si la variable est déjà définie pour éviter une erreur
For Each aVar In ActiveDocument.Variables
If aVar.Name = nomvariable Then testeExistenceVariable = True: Exit For
Next aVar
End Function

Sub bascule_taille()

'fonction destinée à montrer/cacher les images et certaines explications du tutoriel

'à chaque fois que change_taille est appelé la variable "miniatures" (incluse dans
'ce document) est consultée

'si elle est à 1 on remet les images de la sélection en taille normale et on
'met la variable "miniatures" à 0
'sinon on diminue la taille des images de la sélection et on on met
' la variable 'miniatures" à 1

'si aucun texte ou image n'est sélectionné le changement de taille affecte toutes les images du
'document

'de la même façon on bascule les textes de la sélection (ou de tout le document)
' de la taille "petite_taille" à la taille
' "grande_taille" (typiquement : petite_taille=4 et grande_taille=10,5

petite_taille = 4
grande_taille = 10.5

'mémorisation de la sélection initiale pour repositionnement
'à la fin de la macro

Set initial = Selection.Range

'si la variable "miniatures" n'existe pas on la crée
If Not testeExistenceVariable("miniatures") Then ActiveDocument.Variables.Add "miniatures"

flgminiatures = ActiveDocument.Variables("miniatures").Value

If flgminiatures = 1 Then
change_taille 1
flgminiatures = 0

Else
change_taille 0
flgminiatures = 1
End If

ActiveDocument.Variables("miniatures").Value = flgminiatures

initial.Select

End Sub

Sub change_taille(taille)

Dim plage As Range

'si rien n'est sélectionné (texte ou image)
'alors faire la recherche/remplacement sur tout le document
If Selection.Range.Characters.Count <= 1 And Selection.InlineShapes.Count = 0 Then
Set plage = ActiveDocument.Range
Else
Set plage = Selection.Range
End If

change_taille_image plage, taille
change_taille_texte plage, taille


End Sub
Sub change_taille_texte(plage As Range, taille)

If taille = 1 Then
taille_recherche = petite_taille
taille_remplace = grande_taille
Else
taille_recherche = grande_taille
taille_remplace = petite_taille
End If


plage.Find.ClearFormatting
plage.Find.Replacement.ClearFormatting
With plage.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Format = True
.Font.Size = taille_recherche
.Replacement.Font.Size = taille_remplace
End With
plage.Find.Execute Replace:=wdReplaceAll


End Sub


Sub change_taille_image(plage As Range, taille)
Dim image As InlineShape

'taux de diminution de la taille de l'image (modifiable)
ratio = 0.1

'dans la cas particulier où une seule image est sélectionnée
' regarder si elle est en miniature ou pas pour appliquer ' 'agrandissement ou rapetissement

If plage.InlineShapes.Count = 1 Then
Set image = plage.InlineShapes(1)

If image.ScaleHeight < 10 Then taille = 1 Else taille = 0
End If

For Each image In plage.InlineShapes
With image
.LockAspectRatio = msoTrue
If .AlternativeText = "" And taille = 0 Then
coeff = ratio
.AlternativeText = "miniature"

.Height = coeff * .Height
.Width = coeff * .Width

Else
If .AlternativeText = "miniature" And taille = 1 Then
coeff = 1 / ratio
.AlternativeText = ""

.Height = coeff * .Height
.Width = coeff * .Width
End If

End If

End With

Next image

End Sub

PrécédentGihef
févr. 06
chalchalero
mars 07
Suivant
REPONSES
Gihef
févr. 06
gbousquet
mars 07
chalchalero
mars 07
plubarj
avr. 08
Version Web
Réalisé par RedShift
no save