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...

jmfmarques

XLDnaute Accro
Bonjour
C'est comme dans la vraie vie :
Si tu veux mettre une boîte d'allumettes A à gauche d'une boîte d'allumettes B,
tu la mets à gauche de la B - la largeur de la A, non ?
Et Idem pour la hauteur.

EDIT : et bien sûr (et donc le vérifier) : la boîte B ne pourra être mise à cet endroit que si l'on y trouve la place nécessaire.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour

non seulement ça mais il est normal que ça déraille étant donné que tu redimensionne le height APRES POSITIONNEMENT et que par defaut le lockaspectratio(true) redim le width en même temps et que tu redim le width après !!!!!!!ce qui annule le redim du height bien sur



donc ma question est:
cette image peut elle avoir l'aspect ratio préservée au redimensionnement ou non
si c'est le cas tu est loin du compte il faut adapter les dimensions en fonction de la comparaison du ratio (range/img )

tu trouvera ca dans les ressources tu n'aura plus qu'a enlever le centrage

 

danielco

XLDnaute Accro
Bonjour Patrick,

Ca ne doit pas être mon jour ! Je ne fixe pas la hauteur et la largeur. Je fixe uniquement la largeur. Ensuite, je vérifie que la hauteur de l'image ne dépasse pas la hauteur de la cellule. Si c'est le cas, je fixe uniquement la hauteur de l'image à la hauteur de la cellule pour préserver la proportion de l'image. Mon problème est l'alignement des images sur le bord gauche de la colonne B.

Daniel
 

patricktoulon

XLDnaute Barbatruc
re
q'importe des que tu change le height ou le width tu change l'autre car PAR DEFAUT LA PROPRIETE LOCKASPECTRATIO est a true pour que l'image ne soit pas déformée mais juste redimensionnée

donc si ton image est rectangle et ta cell est carrée ou l'inverse ca va pas aller
c'est pourtant simple a comprendre

il te faut donc connaitre le coté par le quel tu va redimensionner et pour cela tu a besoins de comparer le ratio de la cells et de l'image
c'est pas difficile a comprendre ?

tu ne peux pas avoir une image rectangulaire la redimensionner au width ou height de la cells qui elle est carrée et espérer la redimensionner au height ou width sans qu'elle dépasse quelque part SI LE RATION(CELLS/IMG) est différent
 
Dernière édition:

danielco

XLDnaute Accro
Effectivement, je ne compare pas les ratios. Je fixe d'abord la largeur, et si ça ne va pas, je fixe la hauteur :

Et ça fonctionne bien pour les deux premières images. Encore une fois, mon problème est un problème d'alignement, pas de redimensionnement.

Daniel
 

jmfmarques

XLDnaute Accro
Celui qui veut faire les choses comme il convient de les faire s'abstient de s'y prendre comme l'un de mes copains (équilibrer une table basse en s'en prenant à une seule dimension des pieds à la fois).
Il faut savoir décider ! --->>
1) on décide des dimensions et position qu'elle devra avoir
et
2) et seulement alors : on sort sa scie, puis on la place ...
 

danielco

XLDnaute Accro
Concrètement, qu'est-ce qui cloche dans mon code ?
 

jmfmarques

XLDnaute Accro
Concrètement, qu'est-ce qui cloche dans mon code ?
Si tu veux en parler sérieusement, ce n'est pas de code, mais de raisonnement/mécanisme, qu'il faut parler !
Un code, quel qu'il soit, écrit sur la base d'un mécanisme bancale ne sera jamais rien d'autre que ce que serait un emplâtre sur une jambe de bois !
Il ne m'est tout simplement pas possible de commenter ton "code". Pas plus qu'il me serait possible d'envisager de construire un gratte-ciel sur un nénuphar.
 

patricktoulon

XLDnaute Barbatruc
Sans doute, mais je ne vois pas où une de tes réponses parle d'alignement.

Daniel

fait moi plaisir Danielco va voir la ressource que je t'ai donné en lien et essaie de comprendre pourquoi faut il faire cette manœuvre
regarde une image rectangulaire dans une cell carré
je la redimenssionne par le width


une image rectangulaire plus large que haute dans une cells rectangulaire plus haute que large
je la redimentionne par le width


et je te montre pas de l'inverse tu aura compris (du moins je l’espère )
c'est pour cela qu'il faut comparer le ration (Range/img)
IL NE PEUT EN ETRE AUTREMENT!!!!!!!
IL NE PEUT EN ETRE AUTREMENT!!!!!!!
IL NE PEUT EN ETRE AUTREMENT!!!!!!!
IL NE PEUT EN ETRE AUTREMENT!!!!!!!


je continue ou t'a compris
 

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…