Insertion automatique d'images sous Excel 2007

Utilisateur anonyme - 16 juin 2009 à 16:07
 Utilisateur anonyme - 29 juin 2009 à 08:55
Bonjour,

Je cherche à insérer une image dans la colonne 2 d'un fichier excel à partir d'informations qui seraient saisies dans la colonne 1 de ce même fichier.

Je pensais avoir trouvé mon bonheur avec l'exemple ci-dessous, mais le code ne marche pas chez moi ?

http://www.vbfrance.com/forum/sujet-INSERTION-IMAGE-VBA-EXCEL-2007-PARTIR-TABLEAU-DONNEES_1215670.aspx

Merci,
Aurore

13 réponses

Utilisateur anonyme
16 juin 2009 à 16:11
J'ai oublié de préciser : Avec ce code, il me met "400" comme erreur (rien de plus, uniquement le chiffre 400 lorsque j'essaye d'exécuter le code).
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
18 juin 2009 à 19:52
Salut,

Peux-tu envoyer le code et aussi me dire à quelle instruction se produit l'erreur 400 ?

Amicalement
0
Utilisateur anonyme
19 juin 2009 à 09:10
Bonjour,

J'ai essayé le code qui a été validé "correct" de la page 2 de ce fil, c'est à dire le code ci-dessous :

Sub j_espere_que_ca_marche()
    Dim i As Integer, path As String, sep As String, img As String
    sep = Application.PathSeparator
    path = ActiveWorkbook.path & sep & "images" & sep
' balaye les 700 lignes
    For i = 1 To 700
' indique à Excel où insérer l'image
        Cells(i, 2).Select
' insère une image jpg
            img = path & Cells(i, 1).Value & ".jpg"
            If Dir(img) = "" Then
               MsgBox "Image """ & img & """ non trouvée"
            Else
               ActiveSheet.Pictures.Insert(path & Cells(i, 1).Value & ".jpg").Select
            End If
' ajuste la hauteur de la ligne, avec une marge inférieure de 10 pts
            Rows(i).RowHeight = Selection.Height + 10
    Selection.Top = Cells(i, 2).Top
Selection.Left = Cells(i, 2).Left
    Next
End Sub

Pour l'erreur "400", je suis malheureusement débutante totale et je n'ai pas compris comment faire pour savoir à quoi elle correspond ? Il m'affiche simplement une fenêtre d'erreur lors de l'exécution du code qui indique "400", et rien de plus ?

Par contre, ce matin j'ai une nouvelle erreur (en plus de "400"), il me dit :
"c....\images\.jpg non trouvée" ?
J'ai pourtant bien un dossier images avec des .jpg à l'intérieur ? (et d'ailleurs, hier encore il ne m'indiquait pas cette erreur...)

Merci pour ton aide !!
Aurore
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
20 juin 2009 à 00:07
Bonjour Aurore

Merci pour le code.

Peux-tu exécuter le Sub en mode pas-à-pas et me dire sur quelle instruction se produit l'erreur ?

Qu'y a-t-il dans la variable img lorsque l'erreur se produit ?

Quelle est ta version d'Excel ?

Le message "c....\images\.jpg non trouvée" indique que la boucle a atteint une ligne où la colonne 1 est vide. Par exemple si seules les cellules A1-A40 de ta feuille de calcul contiennent un nom d'image, tu dois remplacer l'instruction For i 1 To 700 par For i 1 To 40 ; ok ?

désolé pour le délai de réponse : décalage horaire.

Amicalement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
22 juin 2009 à 09:46
Bonjour,

Ok je dois donc modifier le code en fonction du nombre de ligne remplie sur mon document ? Y a-t-il possitilité de faire ça automatiquement ou pas ?

Pour l'erreur 400, en faisant F8 en pas à pas, il bloque sur cette ligne :

Rows(i).RowHeight = Selection.Height + 10

Et il me marque "erreur 1004" : j'ai regardé dans l'aide, et rien sur cette erreur ?

Je suis sous Excel 2007.


Pour les tests, j'utilise seulement 3 imagers .jpg.


Amicalement,


Aurore


PS : désolée pour le délai de réponse : week-end
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
23 juin 2009 à 21:46
Bonjour

J'ai modifié le code pour que le programme s'adapte automatiquement au nombre de lignes :

Sub j_espere_que_ca_marche()
    Dim i As Integer, path As String, sep As String, img As String
    sep = Application.PathSeparator
    path = ActiveWorkbook.path & sep
    i = 1
' balaye la colonne A jusqu'à cellule vide
    Do Until Cells(i, 1).Value = ""
' indique à Excel où insérer l'image
            Cells(i, 2).Select
' insère une image jpg
            img = path & Cells(i, 1).Value & ".jpg"
            If Dir(img) = "" Then
               MsgBox "Image """ & img & """ non trouvée"
            Else
               ActiveSheet.Pictures.Insert(path & Cells(i, 1).Value & ".jpg").Select
            End If
' ajuste la hauteur de la ligne, avec une marge inférieure de 10 pts
            Rows(i).RowHeight = Selection.Height + 10 ' mettre en commentaire
            Selection.Top = Cells(i, 2).Top
            Selection.Left = Cells(i, 2).Left
            i = i + 1
    Loop
End Sub

Je rencontre la même erreur que toi, pourtant je suis sous la même version (Excel 2003) que lorsque j'ai écrit ce code ; bizarre ! Je n'ai pas encore trouvé pourquoi la méthode RowHeight ne fonctionne pas ; je cherche...

Chez moi, si je mets la ligne en cause en commentaire, le programme tourne sans erreur, mais évidemment les images se chevauchent. C'est la même chose chez toi ?

Amicalement
0
Utilisateur anonyme
24 juin 2009 à 10:56
Bonjour,

Oui, ça me fait exactement la même chose !!


Amicalement,
Aurore
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
24 juin 2009 à 20:14
Bon, il ne reste plus qu'à régler le problème de dimensionnement vertical. Je te recontacte dès que j'ai la solution.
0
Utilisateur anonyme
25 juin 2009 à 08:35
Ok merci !!
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
25 juin 2009 à 21:20
Bonjour

C'est semble-t-il un problème d'hauteur d'image, dépassant le maximum autorisé pour la propriété RowHeight (maximum dont la doc en ligne ne parle pas, semble-t-il).

Chez moi, la propriété RowHeight ne peut pas dépasser 409.5, et l'erreur se produit pour l'image nénuphars.jpg du répertoire Echantillons d'images, cette image faisant 450 de haut. Par contre, pour collines.jpg qui fait 144 points, il n'y a pas de problème.

Peux-tu réactiver l'instruction (enlever le commentaire) et essayer de faire tourner le programme avec de petites images pour valider cette explication ?

Si cette explication est correcte, il y a deux solutions possibles : soit réduire toutes les images dans une même proportion, soit réduire seulement les images qui dépassent une limite, qui reste à déterminer...

A te lire
0
Utilisateur anonyme
26 juin 2009 à 11:09
Bonjour,

C'est curieux, car mes trois images tests sont plus petites que cette limite ?

Et par contre les images avec lesquelles j'aurais souhaité utiliser ce code seront plus grandes et sans possibilité de les réduire puisque j'en aurais toujours besoin "taille réelle"... donc impossibilité d'utiliser ce code pour moi alors...


Aurore
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
26 juin 2009 à 20:23
Bonjour

Effectivement, avec ces contraintes, ce code ne peut pas faire l'affaire.

En revanche, le code ci-dessous te permet d'insérer tes images l'une au-dessous de l'autre, mais sans redimensionner les lignes d'Excel. Est-ce que ça te convient ?

Sub j_espere_que_ca_marche()
    Dim i As Integer, path As String, sep As String, img As String, h As Long
    sep = Application.PathSeparator
    path = ActiveWorkbook.path & sep
    h = 10 ' La variable h détermine la position verticale de chaque image
    i = 1
' balaye la colonne A jusqu'à cellule vide
    Do Until Cells(i, 1).Value = ""
' indique à Excel où insérer l'image
            Cells(i, 2).Select
' insère une image jpg
            img = path & Cells(i, 1).Value & ".jpg"
            If Dir(img) = "" Then
               MsgBox "Image """ & img & """ non trouvée"
            Else
               ActiveSheet.Pictures.Insert(path & Cells(i, 1).Value & ".jpg").Select
            End If
            Selection.Top = h
            Selection.Left = Cells(i, 2).Left
            h = h + Selection.Height + 10
            i = i + 1
    Loop
End Sub

Amicalement
0
Utilisateur anonyme
29 juin 2009 à 08:55
Bonjour,

Malheureusement non, puisque les images de mes dossiers sont de tailles différentes, il me faut donc un moyen d'adapter leur taille aux cellules...

Mais peut-être est-ce possible de donner une taille maximale aux images et dans ce cas de définir la taille des cellules manuellement avant d'utiliser le code ?

Cordialement,
Aurore
0
Rejoignez-nous