I. Introduction▲
La démo téléchargeable en fin de page permet de choisir une image GIF sur le disque dur, de
l'enregistrer dans le classeur au format binaire et ensuite de le visualiser dans un
UserForm.
Il est toujours préférable de stocker les images à l'extérieur d'un fichier afin de ne pas l'alourdir, mais
il s'agit avant tout ici de présenter:
* Le principe de la transformation en binaire.
* L'affichage d'une image GIF animée dans Excel.
* L'utilisation du contrôle
WebBrowser.
L'intérêt de cette solution est de pouvoir transférer ensuite le classeur sur un autre PC, en ayant
l'image GIF jointe directement dans le fichier Excel.
Cette méthode est pratique afin de stocker par exemple un petit logo animé dans vos classeurs.
Le temps de calcul peut toutefois être long (et donc déconseillé) pour les fichiers de taille
volumineuse.
L'exemple est basé sur l'affichage dans un UserForm que vous pourrez aisément adapter dans
la feuille de calcul.
Un WebBrowser (Navigateur Web Microsoft) est utilisé comme support afin de visualiser l'image GIF.
Si le contrôle WebBrowser n'apparaît pas dans la liste des contrôles, faites un clic droit dans
la boite à outils.
Sélectionnez l'option "Contrôles supplémentaires".
Cochez la ligne "Navigateur Web Microsoft".
Cliquez sur OK pour valider.
La procédure enregistre les données binaires du fichier gif dans
les cellules d'une feuille.
Ces données seront ensuite utilisées pour recréer l'image temporairement ("C:\imageTemp.gif")
et la visualiser dans le WebBrowser. L'image temporaire est supprimée lors de la fermeture du
UserForm.
Par soucis d'esthétique, les feuilles contenant les données binaires sont masquées dans le classeur
démo.
Si vous souhaitez voir le contenu des cellules:
* Menu Format
* Feuille
* Afficher
* Sélectionnez une feuille dans la boîte de dialogue.
* Cliquez sur le bouton "OK" pour valider.
II. Description de la procédure▲
Le classeur démo contient une interface utilisateur afin de manipuler les fichiers:
Vous pouvez sélectionner les fichiers gif sur le disque dur en cliquant sur le bouton
"Sauvegarder une image GIF dans le classeur".
Une nouvelle feuille va ensuite être créée pour y enregistrer les données binaires du fichier gif.
Sélectionnez un nom dans le menu déroulant pour visualiser une image dans l'UserForm.
Option
Explicit
'Initialisation du UserForm
Private
Sub
UserForm_Initialize
(
)
Dim
x As
Byte
'Les données au format binaire, servant à créer les images, sont stockées dans
'des feuilles masquées.
'Chaque feuille correspond à une "image" stockée dans le classeur.
'La macro Remplit le ComboBox en utilisant le nom des feuilles:
'Il suffira ensuite de sélectionner un nom dans la boîte de dialogue afin de
'visualiser l'image correspondante.
'Boucle sur les feuilles (à partir du 2eme onglet):
If
ThisWorkbook.Worksheets.Count
>
1
Then
For
x =
2
To
ThisWorkbook.Worksheets.Count
ComboBox1.AddItem
ThisWorkbook.Worksheets
(
x).Name
Next
End
If
End
Sub
'Bouton "Sauvegarder une image GIF dans le classeur"
'La macro vous permet de sélectionner une image GIF sur votre disque dur et d'en transférer
'le contenu au format binaire, dans les cellules d'une nouvelle feuille de calcul.
'
Private
Sub
CommandButton1_Click
(
)
Dim
Fichier As
Variant
Dim
i As
Long
, F As
Long
, j As
Long
Dim
b As
Byte
Dim
Feuille As
Worksheet
Dim
LeTexte As
String
Dim
LaCouleur As
String
'Affichage de la la boîte de dialogue standard "Ouvrir" pour sélectionner une image GIF
'sur le disque dur.
'GetOpenFilename permet de lire le nom du fichier sélectionné par l'utilisateur sans
'réellement ouvrir le fichier.
Fichier =
Application.GetOpenFilename
(
"Fichiers Images (*.gif),*.gif"
)
'Vérifie si l'utilisateur a cliqué sur le bouton "Annuler" ou sur la croix de fermeture.
If
Fichier =
False
Then
MsgBox
"Opération Annulée"
'pour sortir de la procédure
Exit
Sub
End
If
'Ajoute une feuille dans le claseur et la positionne à la fin.
Set
Feuille =
ThisWorkbook.Worksheets.Add
(
After:=
Sheets
(
Sheets.Count
))
'Renomme la feuille
Feuille.Name
=
"Image "
&
ThisWorkbook.Sheets.Count
-
1
'Masque la feuille
Feuille.Visible
=
xlSheetHidden
i =
1
'----------- message pendant le transfert ----
'Permet de créer un message d'attente défilant dans le WebBrowser pendant le transfert
'des données (au format binaire) dans les cellules de la nouvelle feuille.
LeTexte =
"Veuillez patienter... traitement en cours ..."
LaCouleur =
"#CC0000"
WebBrowser1.Navigate
_
"about:<html><body BGCOLOR ='#CCCCCC' scroll='no'><font color= "
&
LaCouleur &
_
" size='5' face='Arial'>"
&
_
"<marquee>"
&
LeTexte &
"</marquee></font></body></html>"
'----------------------------------------------
'--- transfert des données dans la feuille ----
'Boucle sur les données binaire du fichier sélectionné et les transfert
'dans les cellules de la feuille de calcul.
F =
FreeFile
Open Fichier For
Binary Access Read As
F
While
Not
EOF
(
F)
Get
#F, , b
DoEvents
j =
j +
1
If
j =
21
Then
j =
1
i =
i +
1
End
If
Feuille.Cells
(
i, j) =
b
Wend
Close F
'------------------------------------------------
'Affiche une page blanche dans le webBrowser
WebBrowser1.Navigate
"about:blank"
MsgBox
"Opération terminée"
'Ferme et réouvre l'UserForm (permet une réinitialisation rapide)
Unload Me
UserForm1.Show
End
Sub
'Evenement Change dans le ComboBox;
'La sélection d'un nom va déclencher la création d'un fichier gif à partir des données
'binaires stockées dans la feuille, puis l'affichage de cette image dans le WebBrowser.
Private
Sub
ComboBox1_Change
(
)
Dim
S As
String
Dim
i As
Long
, F As
Long
Dim
j As
Byte, b As
Byte
Dim
Hauteur As
Long
, Largeur As
Long
'Vérifie qu'il y a bien un nom de choisi dans le ComboBox.
If
ComboBox1.Value
=
""
Then
Exit
Sub
i =
1
'Définit le chemin de l'image qui va être créée.
S =
"C:\imageTemp.gif"
'----- Création de l'image pour un affichage dans l'USF -----
F =
FreeFile
Open S For
Binary Access Write As
F
Do
j =
j +
1
If
j =
21
Then
j =
1
i =
i +
1
End
If
b =
ThisWorkbook.Sheets
(
ComboBox1.Value
).Cells
(
i, j).Value
Put #F, , b
DoEvents
Loop
While
ThisWorkbook.Sheets
(
ComboBox1.Value
).Cells
(
i, j).Value
<>
""
Close F
'------------------------------------------------------------
'Définit les dimensions d'affichage de l'image dans le WebBrowser.
Largeur =
WebBrowser1.Width
*
96
/
72
Hauteur =
WebBrowser1.Height
*
96
/
72
'Affiche l'image dans le WebBrowser en supprimant les marges et les barres de défilement
WebBrowser1.Navigate
_
"ABOUT:<HTML><CENTER><HEAD><body scroll='no' LEFTMARGIN=0 TOPMARGIN=0><IMG WIDTH="
&
_
Largeur &
" HEIGHT="
&
Hauteur &
_
" SRC='"
&
S &
"'</IMG></BODY></CENTER></HTML>"
'Version pour afficher l'image à sa taille réelle:
'WebBrowser1.Navigate _
"ABOUT:<HTML><CENTER><HEAD><body scroll='no' LEFTMARGIN=0 TOPMARGIN=0><IMG "
&
_
" SRC='"
&
S &
"'</IMG></BODY></CENTER></HTML>"
End
Sub
'Evênement fermeture du UserForm
Private
Sub
UserForm_QueryClose
(
Cancel As
Integer
, CloseMode As
Integer
)
Dim
Fs As
Object
Set
Fs =
CreateObject
(
"Scripting.FileSystemObject"
)
'Supprime l'image temporaire si elle existe
If
Fs.FileExists
(
"C:\imageTemp.gif"
) Then
Kill "C:\imageTemp.gif"
End
Sub