Image insérée dans excel par VBA déformée

Youri

XLDnaute Occasionnel
Bonjour à tous,

J'ai fait quelques recherches sur google sur mon problème mais n'ayant trouvé aucune solution à ce dernier, je me permets de demander de l'aide ici :).

Voila la description de mon problème : j'utilise une macro sur excel 2007 pour insérer une image depuis le web à la première ouverture d'un fichier. Pour une raison qui m'est totalement inconnue, l'image insérée de cette manière est totalement déformée. De plus, lorsque je répète l'opération une fois le fichier ouvert, plus de problème, l'image est insérée avec les bonnes dimensions !

Ma macro, finalement assez simple, est ci-dessous :

Code:
Private Sub Workbook_Open()

If ThisWorkbook.Worksheets(2).Range("A1") = "6FF13203-58D5-BC60-7D59-A9BE16E0E3CE" Then

Application.EnableCancelKey = xlDisabled
Application.EnableEvents = False

    ThisWorkbook.Worksheets(1).Unprotect

    Dim Shp As Shape, Shp2 As Shape
    Dim Fichier As String
    Dim myGUID As String
    Dim gauche As Single, gauche2 As Single
    Dim haut As Single, haut2 As Single
    
    myGUID = GetGUID
    
    Fichier = "https://chart.googleapis.com/chart?cht=qr&chs=400x400&chl=test " & myGUID
    
    gauche = 4470 / 10
    haut = 7558 / 10
    gauche2 = gauche * 2
    haut2 = haut
    
    Set Shp = ThisWorkbook.Worksheets(1).Shapes.AddPicture(Fichier, msoFalse, msoCTrue, gauche, haut, 71, 71)
    Set Shp2 = ThisWorkbook.Worksheets(1).Shapes.AddPicture(Fichier, msoFalse, msoCTrue, gauche2, haut2, 71, 71)
        
    With Shp.PictureFormat
        .CropBottom = 38
        .CropLeft = 38
        .CropRight = 38
        .CropTop = 38
    End With
    
    With Shp2.PictureFormat
        .CropBottom = 38
        .CropLeft = 38
        .CropRight = 38
        .CropTop = 38
    End With
    
    ThisWorkbook.Worksheets(1).Range("P14").Value = Date
    ThisWorkbook.Worksheets(1).Range("CG14").Value = Date
    ThisWorkbook.Worksheets(1).Range("B111").Value = myGUID
    ThisWorkbook.Worksheets(1).Range("BS111").Value = myGUID

    ThisWorkbook.Worksheets(2).Range("A1").Delete
    
    ThisWorkbook.Worksheets(1).Protect
    
Application.EnableCancelKey = xlDisabled
Application.EnableEvents = True

End If

End Sub

J'ai déjà remarqué un comportement similaire sur excel 2007 : si on insère une image près du bord d'une feuille de calcul (en supposant que toutes les autres cellules sont masquées) l'image est déformée automatiquement de sorte à ce que l'image rentre dans la feuille de calcul... Donc, information (peut-être) importante, j'utilise 138 colonnes d'une largeur de 10 pixels chacune de ma feuille de calcul et 112 lignes d'une hauteur de 10 pixels chacune et j'ai masqué toutes les autres cellules.

Donc si vous avez une idée pour résoudre ce problème ou si vous savez ce qui se passe, je vous serais vraiment très reconnaissant de m'aider.

Par avance, grand merci à tous et à toutes :),
Youri
 

Youri

XLDnaute Occasionnel
Re : Image insérée dans excel par VBA déformée

Re-bonjour à tout le monde,

Désolé d'avoir écrit aussi vite mais je crois avoir résolu mon problème... Il s'agit très probablement d'un bug excel car la manière dont je l'ai résolu est la suivante:
- j'ai ouvert mon fichier sans activer les macros
- j'ai affiché toutes les cellules masquées puis j'ai enregistré le fichier et je l'ai fermé
- j'ai de nouveau ouvert le fichier sans activer les macros
- cette fois-ci, j'ai masqué toutes les cellules en trop, j'ai enregistré et j'ai fermé le fichier
Depuis plus de problème... La macro fonctionne...

Toutefois, le problème des cellules masquées et de l'insertion des images subsiste : si on masque toutes les colonnes restantes d'une feuille de calcul excel et qu'on insère une image près de la bordure, cette image est déformée.

Pour la programmation, cela implique de devoir insérer toutes les images avant de masquer une quelconque cellule, ce qui ralentit forcément le fonctionnement de la feuille de calcul. Est-ce que vous savez à quoi ce bug est dû et comment on pourrait le contourner ?

Merci,
Youri
 

chris

XLDnaute Barbatruc
Re : Image insérée dans excel par VBA déformée

Bonjour

Vérifie les propriétés de l'image car il y a 3 options : déplacer et dimensionner avec les cellules, déplacer sans dimensionner ou ne pas déplacer ni dimensionner : je pense que lord de l'insertion, la propriété n'est pas bonne.

Il y a cependant aussi des problèmes liés au masquage : Excel doit garder un certain espace pour les objets graphiques. J'ai remarqué ce cas sur un classeur contenant énormément de commentaires : si on masque trop de colonnes et de lignes Excel envoie un message d'erreur. En manuel on le voit, en VBA ça plante !
 

Youri

XLDnaute Occasionnel
Re : Image insérée dans excel par VBA déformée

Bonjour Chris,

Merci pour ta réponse. J'ai essayé ta solution mais ça ne fonctionne pas. En fait Excel cherche à ce que tous les objets graphiques soient entièrement visibles. Du coup, quand une image "ne rentre pas" dans une feuille, Excel la redimensionne automatiquement pour qu'elle soit de la bonne taille. En ce qui concerne mon cas, je crois qu'il s'agit simplement d'un bug...

J'ai pensé qu'excel insérait peut-être l'image en premier puis la redimensionnait, ce qui expliquerait qu'elle soit déformée mais je me suis souvenu que le bug n'apparaît pas si j'insère une seule image... Donc je pense qu'il s'agit bien d'un bug.

Merci,
Youri