4 pièce(s) jointe(s)
Afficher une image (JPG, GIF ou PNG) sur Image et WebBrowser, du Web ou en local, en VBA Excel 2010
Bonjour,
J'ai réalisé sous VBA Excel 2010 une interface (via Userform), qui propose de charger des images en provenance de son disque dur ou bien du Web (dans mon cas je charge des icônes de du site de Google-Earth).
Cela fonctionne à peu prés...
Quelque-soit le format, on peut, en cliquant sur le CommandButton bleu de la première ligne du Userform, charger n'importe quelle image (jpg, gif, png).
Si l'image est de type Gif animée, elle s'affiche figée dans l'élément Image, et animée dans l'élément WebBrowser, après avoir été mise aux dimensions des blocs.
Si l'image est de type PNG (comme celles du site de Google-Earth que je récupère, grâce au ComboBox), il faut la convertir en JPG avant de pouvoir l'afficher dans l'élément Image du Userform. Ce que je fais systématiquement.
Dans tous les cas, les deux éléments Image et WebBrowser restitue l'image sélectionnée.
Le problème que je rencontre est que l'affichage semble bloqué suite au chargement de l'image dans l'élément Image dès que l'on fait une sélection d'une URL de l'image à partir de la Combobox. Si je déplace la fenêtre du Userform, cela laisse une "trainée" et la liste de Combobox reste visuellement déployée en apparence (mais pas fonctionnellement).
De plus j'ai un soucis de mise au bon format de l'image à afficher. Je souhaite qu'elle occupe toute la surface de chaque élément Image et WebBrowser. Cela semble fonctionner pour l'élément Image mais une bande blanche verticale et horizontale sur le côté droit et inférieur de l'élément WebBrowser (de quelques pixels) reste, imposant une taille réduite à l'affichage de l'image.
Quelques regards avisés me seraient sans doute d'un grand secours...
À vos claviers ! :^)
PS: je joins directement mon fichier, car code un peu long à coller ici... J'ai déposé aussi 2 photos écran pour montrer le symptôme observé.
Je joins également 1 image utile au code (InvisibleSector.png) pour l'initialisation de l'affichage des éléments graphiques.
1 pièce(s) jointe(s)
Bon, je me répond à moi-même (décidément, c'est chose courante ici, pour mon cas en tout cas... ^^)
Bonjour (à moi même :ptdr:)
Alors, j'ai trouvé la solution.
En commentant la ligne
Code:
Call ImporteImageEnUserForm(Me.ImageLogoSecteur, Me.TextBoxFichierLogoEtiquette)
dans la procédure évènementielle CommandButtonBrowserLogoEtiquette_Click() de l'UserForm1, on s’aperçoit que l'affichage n'étant plus activé sur l'élément Image lors d'une sélection d'icône depuis la Combobox, il n'y a pas de problème de "gèle" de l'Useform affiché ! C'est donc que le problème se situe dans l'appel à ImporteImageEnUserForm.
En effet, cette procédure fait appel à ImportPngWebEnUserForm dans le module M_ImagesIcones_v4_1, dans lequel à un moment donné je cache la feuille "feuille image" générée temporairement pour le transfert et la conversion de l'image icône png en jpg. Or c'est ce mode caché (
Code:
feuilleImage.Visible = xlSheetVeryHidden
) qui fout la grouille ! Du coup, il suffit soit d'effacer cette feuille en fin de traitement, soit de réactiver la feuille active initiale, et il n'y aura plus de soucis.
Dans mon cas j'ai choisi de faire les deux. Cela évite d'avoir des feuilles cachées oubliées même si cela nécessite de la régénérer à chaque nouveau choix dans la Combobox.
De plus pour plus de cohérence dans le code, j'ai déclaré dans la procédure Reinit_WebBrowserImageGif du module M_GereWebBrowsers, le paramètre WB est passé en référence et de type WebBrowser au lieu d'un type Object.
Cela donne le résultat que vous pouvez télécharger en pièce jointe de cette réponse.
@+ et Merci qui... ^^