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...)
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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 ?
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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...
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...
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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
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 ?