bonjour l'assemblé !
j'ai une structure qui permet d'afficher une image.
la variable "path" contient l'adresse complete (c:/mesdoc/image.jpg, par exemple)
target = un objet range correspondant à la cellule que l'utilisateur vient de cliquer.
la variable booleene "comment" est a true si je souhaite que l'image soit afficher en commentaire, et a false si je veu l'afficher dans une image.
objet_image comporte le NOM de l'objet controle "image"
je vais donc faire appel à un "callbyname" pour appeler les procédure (dont load image)
enfin, en analysant l'extention de path, si il s'agit de .png, je créé un browser au dessus du controle image, qui doit porter le meme nom que le controle image avec concaténé "browser", de sorte a pouvoir le supprimer ensuite.
j'ai trois soucis :
1) la fonction pour afficher dans les commentaire ne marche pas. aucun message d'erreur l'expliquant; je seche.
2) la structure de suppression ne doit sans doute pas fonctionner. je ne peu la debugger parce que je n'en suis pas la.
3) mon plus gros soucis : la strucutre de création plante. erreur 435.
je ne peu savoir a quel ligne exactement, car arrivé sur "add", excel m'averti qu'il ne peu traiter "point a point" completement, avant de planter.
en pratique, j'ai bien un controle browser qui se créé, il est a la bonne place et a la bonne taille (il recouvre l'image)
mais aucune image se charge.
si vous voyez la ou je me trompe ... moi, la, j'y pige que dale
concernant mes fonctions perso :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
37
38
39
40
41
42
43
44
45
46
47
48
49 If comment = True Then 'l'image doit apparaitre en commentaire dans la cellule "target" '<> prb ! target.comment.Shape.Fill.UserPicture path Else 'l'image doit s'afficher dans un controle nommé dans "objet_image" If what_extention(path) = ".png" Then 'une image PNG sera affiché dans un webbrowser 'on commence par regarder si le controle webbrowser lié a objet_image existe. If CObj(objet_image & "_browser") = True Then 'si il existe, on le rempli Set oBrw = CallByName(ActiveSheet, objet_image & "_browser", VbGet) hauteur = oBrw.Height largeur = oBrw.Width oBrw.Navigate "ABOUT:<HTML><HEAD><BODY><IMG WIDTH=" & largeur & " HEIGHT=" & hauteur & " SRC='" & path & "'</IMG></BODY></HTML>" Else 'si il n'existe pas, on le créé, puis on le rempli 'On Error Resume Next Set oPic = CallByName(ActiveSheet, objet_image, VbGet) Set oBrw = ActiveSheet.OLEObjects.Add(ClassType:="Shell.Explorer.2") With oBrw .Left = oPic.Left .Top = oPic.Top .Width = oPic.Width .Height = oPic.Height .Name = objet_image & "_browser" End With Set oBrw = CallByName(ActiveSheet, objet_image & "_browser", VbGet) hauteur = oBrw.Height largeur = oBrw.Width oBrw.Navigate "ABOUT:<HTML><HEAD><BODY><IMG WIDTH=" & largeur & " HEIGHT=" & hauteur & " SRC='" & path & "'</IMG></BODY></HTML>" End If Else 'on commence par regarder si le controle webbrowser lié à objet_image existe. If CObj(objet_image & "_browser") = True Then 'si il existe, on le supprime, puis on affice sur le controle image Set oBrw = CallByName(ActiveSheet, objet_image & "_browser", VbGet) oBrw.Delete Set oPic = CallByName(ActiveSheet, objet_image, VbGet) Set oPic.picture = LoadPicture(path) Else 'si il n'existe pas, on affiche directement dans le controle image Set oPic = CallByName(ActiveSheet, objet_image, VbGet) Set oPic.picture = LoadPicture(path) End If End If End If
what_extention(path) retourne seulement l'extention de l'adresse d'un fichier (.jpg, .png, .doc ...)
avec l'option booleenne "true", what_extention(path, true) il retourne "true" si l'extention est une image
CObj(name) retourne false ou true celon si le controle portant le nom "name" existe ou non.
j'espere que le code est complet pour vous permettre de le comprendre. c'est une infime partie d'une macro de plusieurs millier de ligne, alors j'espere avoir indiqué assez d'information pour vous.
dans l'attente de vos lumières.
cordialement
Partager