Problème affichage image avec macro Excel
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai un PC tournant sous Windows 2007 avec Office 2007.
On m'a filé un fichier excel (trombinoscope) on des photos doivent s'afficher en face du nom.
Voilà la macro :
Function AfficherImageH(NomImage, Optional rep)
Application.Volatile
If IsMissing(rep) Then rep = ThisWorkbook.Path & "\"
Set f = Sheets(Application.Caller.Parent.Name)
Set adr = Application.Caller
AfficherImageH = ""
If Dir(rep & NomImage & ".jpg") <> "" Then
NomImage = NomImage & ".jpg"
GoTo Suite
ElseIf Dir(rep & NomImage & ".jpeg") <> "" Then
NomImage = NomImage & ".jpeg"
GoTo Suite
ElseIf Dir(rep & NomImage & ".gif") <> "" Then
NomImage = NomImage & ".gif"
GoTo Suite
ElseIf Dir(rep & NomImage & ".png") <> "" Then
NomImage = NomImage & ".png"
GoTo Suite
End If
Suite:
Temp = NomImage & "_@_" & adr.Address
Existe = False
For Each s In adr.Worksheet.Shapes
If s.Name = Temp Then
Existe = True
End If
Next s
If Not Existe Then
For Each K In adr.Worksheet.Shapes
p = InStr(K.Name, "_@_")
If Mid(K.Name, p + 3) = adr.Address Then K.Delete
Next K
If Dir(rep & NomImage) = "" Then
AfficherImageH = "Photo non disponible"
Else
Set myShell = CreateObject("Shell.Application")
If TypeName(rep) = "Range" Then
Set myFolder = myShell.Namespace(rep.Value)
Else
Set myFolder = myShell.Namespace(rep)
End If
Set myFile = myFolder.Items.Item(NomImage)
'Taille = myFolder.GetDetailsOf(myFile, 26)
'H = Val(Split(Taille, "x")(1))
'L = Val(Split(Taille, "x")(0))
'Ech = adr.Height / H
'lgcel = adr.Width
'H = H * Ech
'L = L * Ech
Set s = f.Shapes.AddPicture(rep & NomImage, True, True, adr.Left + adr.Width / 2 - L / 2 + 1, adr.Top + adr.Height / 2 - H / 2 + 1, L - 2, H - 2)
s.Name = NomImage & "_@_" & adr.Address
AfficherImageH = " "
End If
End If
End Function
Sub Tri()
Range("A2:M108").Select
Range("M108").Activate
ActiveWorkbook.Worksheets("Listing Stella").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Listing Stella").Sort.SortFields.Add Key:=Range( _
"A3:A108"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Listing Stella").Sort.SortFields.Add Key:=Range( _
"C3:C108"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Listing Stella").Sort.SortFields.Add Key:=Range( _
"D3:D108"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Listing Stella").Sort
.SetRange Range("A2:M108")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
End Sub
La PC qui a permis de créer ce fichier tourne sous Windows XP avec Office 2010 et tout marche nickel
Après plusieurs tests "msgbox" je me suis aperçu que l'erreur venait de la taille de l'image.
L'image apparait mais trop grande. Le coin supérieur gauche est centré dans la cellule.
Avez vous des idées, des solutions ?
Merci d'avance
J'ai un PC tournant sous Windows 2007 avec Office 2007.
On m'a filé un fichier excel (trombinoscope) on des photos doivent s'afficher en face du nom.
Voilà la macro :
Function AfficherImageH(NomImage, Optional rep)
Application.Volatile
If IsMissing(rep) Then rep = ThisWorkbook.Path & "\"
Set f = Sheets(Application.Caller.Parent.Name)
Set adr = Application.Caller
AfficherImageH = ""
If Dir(rep & NomImage & ".jpg") <> "" Then
NomImage = NomImage & ".jpg"
GoTo Suite
ElseIf Dir(rep & NomImage & ".jpeg") <> "" Then
NomImage = NomImage & ".jpeg"
GoTo Suite
ElseIf Dir(rep & NomImage & ".gif") <> "" Then
NomImage = NomImage & ".gif"
GoTo Suite
ElseIf Dir(rep & NomImage & ".png") <> "" Then
NomImage = NomImage & ".png"
GoTo Suite
End If
Suite:
Temp = NomImage & "_@_" & adr.Address
Existe = False
For Each s In adr.Worksheet.Shapes
If s.Name = Temp Then
Existe = True
End If
Next s
If Not Existe Then
For Each K In adr.Worksheet.Shapes
p = InStr(K.Name, "_@_")
If Mid(K.Name, p + 3) = adr.Address Then K.Delete
Next K
If Dir(rep & NomImage) = "" Then
AfficherImageH = "Photo non disponible"
Else
Set myShell = CreateObject("Shell.Application")
If TypeName(rep) = "Range" Then
Set myFolder = myShell.Namespace(rep.Value)
Else
Set myFolder = myShell.Namespace(rep)
End If
Set myFile = myFolder.Items.Item(NomImage)
'Taille = myFolder.GetDetailsOf(myFile, 26)
'H = Val(Split(Taille, "x")(1))
'L = Val(Split(Taille, "x")(0))
'Ech = adr.Height / H
'lgcel = adr.Width
'H = H * Ech
'L = L * Ech
Set s = f.Shapes.AddPicture(rep & NomImage, True, True, adr.Left + adr.Width / 2 - L / 2 + 1, adr.Top + adr.Height / 2 - H / 2 + 1, L - 2, H - 2)
s.Name = NomImage & "_@_" & adr.Address
AfficherImageH = " "
End If
End If
End Function
Sub Tri()
Range("A2:M108").Select
Range("M108").Activate
ActiveWorkbook.Worksheets("Listing Stella").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Listing Stella").Sort.SortFields.Add Key:=Range( _
"A3:A108"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Listing Stella").Sort.SortFields.Add Key:=Range( _
"C3:C108"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
ActiveWorkbook.Worksheets("Listing Stella").Sort.SortFields.Add Key:=Range( _
"D3:D108"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Listing Stella").Sort
.SetRange Range("A2:M108")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
End Sub
La PC qui a permis de créer ce fichier tourne sous Windows XP avec Office 2010 et tout marche nickel
Après plusieurs tests "msgbox" je me suis aperçu que l'erreur venait de la taille de l'image.
L'image apparait mais trop grande. Le coin supérieur gauche est centré dans la cellule.
Avez vous des idées, des solutions ?
Merci d'avance
A voir également:
- Problème affichage image avec macro Excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Image iso - Guide
7 réponses
Bonjour,
Pourquoi ces lignes sont mises en commentaire avec le ' ?
C'est justement le calcul des dimensions.
Maintenant sans fichier exemple avec tout ce qu'il faut pour le faire tourner...
eric
Pourquoi ces lignes sont mises en commentaire avec le ' ?
'Taille = myFolder.GetDetailsOf(myFile, 26) 'H = Val(Split(Taille, "x")(1)) 'L = Val(Split(Taille, "x")(0)) 'Ech = adr.Height / H 'lgcel = adr.Width 'H = H * Ech 'L = L * Ech
C'est justement le calcul des dimensions.
Maintenant sans fichier exemple avec tout ce qu'il faut pour le faire tourner...
eric
Bonjour,
En les mettant en tant que commentaire, j'ai une image disproportionnée qui apparait tandis qu'en tant que "code" j'ai le message #VALEUR qui apparait.
Après en ce qui concerne le fichier, Excel va chercher l'image dans tel dossier. Chaque image est nommée du type NOM_Prénom comme dans les cellules contenant ces caractères sur chaque ligne.
En les mettant en tant que commentaire, j'ai une image disproportionnée qui apparait tandis qu'en tant que "code" j'ai le message #VALEUR qui apparait.
Après en ce qui concerne le fichier, Excel va chercher l'image dans tel dossier. Chaque image est nommée du type NOM_Prénom comme dans les cellules contenant ces caractères sur chaque ligne.
Re,
il faudrait voir pourquoi myFolder.GetDetailsOf(myFile, 26) est utilisé, il n'a pas l'air prévu pour ramener les dimensions d'une image sous la forme "800x600" (?), ce qui est attendu par la suite du code.
Peut-être qu'une autre méthode peut te les ramener, il faudrait trouver laquelle.
C'est dit sous toutes réserves vu que je n'utilises pas cet objet...
Je ne peux pas t'aider plus, désolé.
eric
il faudrait voir pourquoi myFolder.GetDetailsOf(myFile, 26) est utilisé, il n'a pas l'air prévu pour ramener les dimensions d'une image sous la forme "800x600" (?), ce qui est attendu par la suite du code.
Peut-être qu'une autre méthode peut te les ramener, il faudrait trouver laquelle.
C'est dit sous toutes réserves vu que je n'utilises pas cet objet...
Je ne peux pas t'aider plus, désolé.
eric
Bojour,
source partielle de ton code
http://boisgontierjacques.free.fr/
je l'avais utilisé comme base de W avec des images de différentes tailles et je n'avais pas eu de problème...
mais sans voir le fichier ...
pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe (format XL97-2003) sur
http://cijoint.fr/
sans les photos mais indique nous les tailles (hauteur, largeur) et le type (.png, jpg...)
Michel
source partielle de ton code
http://boisgontierjacques.free.fr/
je l'avais utilisé comme base de W avec des images de différentes tailles et je n'avais pas eu de problème...
mais sans voir le fichier ...
pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe (format XL97-2003) sur
http://cijoint.fr/
sans les photos mais indique nous les tailles (hauteur, largeur) et le type (.png, jpg...)
Michel
Merci pour vos réponses
Lien du fichier : http://www.cijoint.fr/cjlink.php?file=cj201107/cij9jBYcj8.xls
Les photos sont en jpg et de dimensions : 187*250.
Lien du fichier : http://www.cijoint.fr/cjlink.php?file=cj201107/cij9jBYcj8.xls
Les photos sont en jpg et de dimensions : 187*250.
bonjour,
n'aie pas peur, je pense à ton trombinoscope... avec une méthode j'espère plus simple
toutefois, tes cellules devront être dans les m^mes proportions que le photos pour ne pas déformer les visages...
ci joint petite démo pour mettre une photo remplissant une cellule que je vais bidouiller pour ton affaire
https://www.cjoint.com/?3GgsdZUH8ka
a demain, j'espère
n'aie pas peur, je pense à ton trombinoscope... avec une méthode j'espère plus simple
toutefois, tes cellules devront être dans les m^mes proportions que le photos pour ne pas déformer les visages...
ci joint petite démo pour mettre une photo remplissant une cellule que je vais bidouiller pour ton affaire
https://www.cjoint.com/?3GgsdZUH8ka
a demain, j'espère
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
@Mike-31 : Il y a de ça mais je ne trouve pas ce que je veux dedans :s
@michel_m : "Coucou" ^^ !! Tu es sur quel version de Windows ?
@michel_m : "Coucou" ^^ !! Tu es sur quel version de Windows ?
bonjour,
question Windows: mystère, la démo a été réalisée sous XP-2000 st sans pb avec XP-2007, config actuelle... peut-^tre voir dans le forum "windows" puisque c'est la version 7 qui pose pb
concernant trombi (il aurait peut-être été + intéressant de le réaliser ss Access)
-réalisé sous 2007 enregistré au format 2003 (portabilité)
-j'ai ajouté une colonne pour le type d'image (jpg, jpeg, png....) pouvant être améliorée avec une validation de données
-Le bouton Tri crée sur sa lancée le trombinoscope
-il faut que le rapport hauteur- largeur des cellules soit le même que celui des photos ==> tâtonnement (mes images ne le sont pas toutes)
- ne supprimes ni ajoutes des lignes et colonnes aux 2 feuilles m^me si elles ne servent plus à rien (couleur jaune)
- j'ai été très gêné par le XML qui traine sur le classeur (curiosité: pourquoi du xml)
le trombi proposé à adapter:
modifié voir + bas
Edit 9:25h: j'oubliais! les noms & prénoms sont sensibles à la casse
source images: print master
question Windows: mystère, la démo a été réalisée sous XP-2000 st sans pb avec XP-2007, config actuelle... peut-^tre voir dans le forum "windows" puisque c'est la version 7 qui pose pb
concernant trombi (il aurait peut-être été + intéressant de le réaliser ss Access)
-réalisé sous 2007 enregistré au format 2003 (portabilité)
-j'ai ajouté une colonne pour le type d'image (jpg, jpeg, png....) pouvant être améliorée avec une validation de données
-Le bouton Tri crée sur sa lancée le trombinoscope
-il faut que le rapport hauteur- largeur des cellules soit le même que celui des photos ==> tâtonnement (mes images ne le sont pas toutes)
- ne supprimes ni ajoutes des lignes et colonnes aux 2 feuilles m^me si elles ne servent plus à rien (couleur jaune)
- j'ai été très gêné par le XML qui traine sur le classeur (curiosité: pourquoi du xml)
le trombi proposé à adapter:
modifié voir + bas
Edit 9:25h: j'oubliais! les noms & prénoms sont sensibles à la casse
source images: print master
bonjour,
j'avais repris cette discussion à la demande d'Eric partant en ouacances... mais ça n'a pas l'air d'intéresser PaulCézanne: aucun écho depuis jeudi 19h20 ...
https://www.cjoint.com/?3GkwRDyZ4Jx
j'avais repris cette discussion à la demande d'Eric partant en ouacances... mais ça n'a pas l'air d'intéresser PaulCézanne: aucun écho depuis jeudi 19h20 ...
https://www.cjoint.com/?3GkwRDyZ4Jx