Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA Insertion d'une image

danielco

XLDnaute Accro
Bonjour,

J'utilise ce code pour insérer des photos :

VB:
  For Each C In Range("D3", Cells(Rows.Count, 4).End(xlUp))
    Photo = C.Value
    Set Img = ActiveSheet.Pictures.Insert(Chemin & Photo & ".jpg")
    With Img
      .Left = C.Offset(, -2).Left
      .Top = C.Offset(, -2).Top
      .Width = Larg
      If C.Height < .Height Then
        .Height = C.Height
      End If
    End With
  Next C

La ligne :

Code:
 .Left = C.Offset(, -2).Left

devrait aligner la photo sur le bord gauche de la colonne B, or ce n'est pas le cas. Qu'est-ce que j'ai fait de travers ?

Le fenêtre d'exécution donne :

?c.Address
$D$3
?C.Offset(, -2).left
161.25
?img.left
161.25

Merci d'avance.

Daniel
 
Solution
re
bon si on considère que toutes tes images pivotées ont la donnéee exif (245)
voila les model ou je prends un raccourci methode en faisant simplement un copypicture de l'image re pivoté sur le sheets pour ne pas avoir a m'ennuyer avec les left et top inversé dans le calcul
model 1 pour faineant de la calbasse
VB:
Private Sub CommandButton1_Click()
    Dim fichier As Variant, img As Picture
    On Error Resume Next
    ActiveSheet.Shapes("img").Delete
    Err.Clear
    fichier = Application.GetOpenFilename("Text Files (*.jpg), *.jpg", 1, "ouvrir un fichier")
    If fichier = False Then Exit Sub
    Set img = ActiveSheet.Pictures.Insert(fichier)
    img.Name = "img"
    place_l_image_dans [C5], img...

patricktoulon

XLDnaute Barbatruc
re
@Modeste geedee
VB:
 If Cellule.Height < .Height Then
        .Height = Cellule.Height
      End If
'----------------------
      .Width = Larg
le width n'est forcement pas bon car en faisant cela tu resize le height aussi que tu a dimensionné précédemment
pour le coup ca marche car les dim image correspondent mais ca ne sera pas toujours le cas
 

patricktoulon

XLDnaute Barbatruc
re

en lockAspectRatio on ne redimensionne qu'un coté et pour choisir le quel ?:

il n'y a qu'une seule logique

ratioimg =img .Width / img .Height ' calcul ratio image

ratiorange =[cellule].Width / [cellule] .Height ' calcul ratio Range

if ratiorange< ratioimg then

img.width=[cellule].width

else

img.height=[cellule].height

end if
ET AUCUNE AUTRE NE SERA AUSSI SUR
est ce si difficile a comprendre?????
 

Modeste geedee

XLDnaute Barbatruc
Bonsour® il ne tenait qu'a toi de proposer "ta" correction concrète du code :
au lieu de faire preuve de de prosélytisme ...
Danielco (MVP EXCEL) qui a montré depuis de nombreuses années son sens de l'entraide sur de multiples forums
est comme tout un chacun (lorsque l'on a la tête dans le guidon) passé à coté de l'évidence.
 

patricktoulon

XLDnaute Barbatruc
re
donne moi en une autre de ces images en défaut je crois que j'ai une solution mais il faut que je teste
celle ci ayant été redressée c'est fini

par contre avant redressage elle se positionnait couché chez moi dans la feuille pas droite
 

Modeste geedee

XLDnaute Barbatruc
Bonsour® si l'info orientation lors de la prise de vue n'est pas dans le EXIF, seul un contrôle visuel pourra te confirmer le cas ...
La configuration portrait ou paysage n'augure en aucune façon la posture du sujet.
on trouve sur le web des lecteurs de données EXIF

pour utilisation via VBA il faut utiliser des librairies spécifiques EXIF
il est même probable que les ressources XLD possèdent déjà un outil de ce type...?
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
198
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…