VBA, comment insérer des images dans des cellules fusionnées ave
Résolu/Fermé
Roseff08
Messages postés
6
Date d'inscription
mercredi 14 janvier 2015
Statut
Membre
Dernière intervention
20 janvier 2015
-
Modifié par Roseff08 le 15/01/2015 à 11:59
Roseff08 Messages postés 6 Date d'inscription mercredi 14 janvier 2015 Statut Membre Dernière intervention 20 janvier 2015 - 20 janv. 2015 à 14:19
Roseff08 Messages postés 6 Date d'inscription mercredi 14 janvier 2015 Statut Membre Dernière intervention 20 janvier 2015 - 20 janv. 2015 à 14:19
A voir également:
- Insérer une image dans une cellule excel vba
- Aller à la ligne dans une cellule excel - Guide
- Insérer une vidéo dans powerpoint - Guide
- Insérer une liste déroulante excel - Guide
- Excel cellule couleur si condition texte - Guide
- Déplacer une colonne excel - Guide
12 réponses
f894009
Messages postés
17205
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
19 octobre 2024
1 709
15 janv. 2015 à 14:20
15 janv. 2015 à 14:20
Bonjour,
je dois rédiger un travail de diplôme Oui, si vos images ne changent pas apres insertion pas besoin de macro pour les inserer, il faut le faire manuellement
je dois rédiger un travail de diplôme Oui, si vos images ne changent pas apres insertion pas besoin de macro pour les inserer, il faut le faire manuellement
Roseff08
Messages postés
6
Date d'inscription
mercredi 14 janvier 2015
Statut
Membre
Dernière intervention
20 janvier 2015
1
16 janv. 2015 à 07:58
16 janv. 2015 à 07:58
Merci pour ton aide. J'ai testé ton code et cela ne fonctionne pas, dsl ! Y faut dire que je suis une étudiante en économie et une pomme en informatique !
Sur Internet, j'ai trouvé un code qui fonctionne super, mais dès que je déplace le fichier, les images ne suivent pas et en plus, je n'arrive pas à mettre une bordure autour de celle-ci !
Sub InsererImage()
Dim myPicture As String, MyRange As Range
myPicture = Application.GetOpenFilename _
("Pictures (.bmp; .gif; .jpg; .png; .tif),.bmp; .gif; .jpg; .png; .tif", _
, "Select Picture to Import")
Set MyRange = Selection
InsertAndSizePic MyRange, myPicture
End Sub
Sub InsertAndSizePic(Target As Range, PicPath As String)
Dim p As Picture
Application.ScreenUpdating = False
On Error GoTo EndOfSubroutine:
Set p = ActiveSheet.Pictures.Insert(PicPath)
If Target.Cells.Count = 1 Then Set Target = Target.MergeArea
With Target
p.Left = .Left
p.Width = .Width
End With
EndOfSubroutine:
End Sub
Sur Internet, j'ai trouvé un code qui fonctionne super, mais dès que je déplace le fichier, les images ne suivent pas et en plus, je n'arrive pas à mettre une bordure autour de celle-ci !
Sub InsererImage()
Dim myPicture As String, MyRange As Range
myPicture = Application.GetOpenFilename _
("Pictures (.bmp; .gif; .jpg; .png; .tif),.bmp; .gif; .jpg; .png; .tif", _
, "Select Picture to Import")
Set MyRange = Selection
InsertAndSizePic MyRange, myPicture
End Sub
Sub InsertAndSizePic(Target As Range, PicPath As String)
Dim p As Picture
Application.ScreenUpdating = False
On Error GoTo EndOfSubroutine:
Set p = ActiveSheet.Pictures.Insert(PicPath)
If Target.Cells.Count = 1 Then Set Target = Target.MergeArea
With Target
p.Left = .Left
p.Width = .Width
End With
EndOfSubroutine:
End Sub
Zoul67
Messages postés
1959
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
30 janvier 2023
149
15 janv. 2015 à 14:56
15 janv. 2015 à 14:56
Bonjour,
Oui, les images restent dans le fichier et ne sont pas appelées (comme ça le serait dans une page web classique).
Même si j'aime bien Excel, je trouve ça curieux de rédiger un document si massif sous Excel.
Tu peux insérer toutes tes images en même temps et définir la bordure pour toutes les images en même temps (toutes images sélectionnées, clic droit, etc.).
Je suis d'accord avec f894009 ; qu'apporterait la macro ? Il faudrait indiquer à la macro quelles images importer et où les placer. C'est plus pénible que de le faire à la souris.
Ce qui peut être intéressant pour toi par macro doit être le redimensionnement (taille et poids du fichier). Des topics existent déjà sans doute sur ce sujet.
A+
Oui, les images restent dans le fichier et ne sont pas appelées (comme ça le serait dans une page web classique).
Même si j'aime bien Excel, je trouve ça curieux de rédiger un document si massif sous Excel.
Tu peux insérer toutes tes images en même temps et définir la bordure pour toutes les images en même temps (toutes images sélectionnées, clic droit, etc.).
Je suis d'accord avec f894009 ; qu'apporterait la macro ? Il faudrait indiquer à la macro quelles images importer et où les placer. C'est plus pénible que de le faire à la souris.
Ce qui peut être intéressant pour toi par macro doit être le redimensionnement (taille et poids du fichier). Des topics existent déjà sans doute sur ce sujet.
A+
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
15 janv. 2015 à 15:12
15 janv. 2015 à 15:12
Bonjour,
Tout a fait d'accord avec vous 2 . Je me suis amusé a faire une macro pour insérer une image dans des cellules fusionnées limitées a une plage.
Comme le dit si bien Zoul67:
Ce qui peut être intéressant pour toi par macro doit être le redimensionnement
Voici le code de recherche du fichier image et redimensionnement suivant les cellules fusionnées:
Tout a fait d'accord avec vous 2 . Je me suis amusé a faire une macro pour insérer une image dans des cellules fusionnées limitées a une plage.
Comme le dit si bien Zoul67:
Ce qui peut être intéressant pour toi par macro doit être le redimensionnement
Voici le code de recherche du fichier image et redimensionnement suivant les cellules fusionnées:
Option Explicit Dim cheminfichier As Variant Dim position Private Sub CommandButton1_Click() open_file detecteFusion End Sub Sub detecteFusion() Dim cellule For Each cellule In Range("A1:M28") 'plage de recherche a adapter If Range(cellule.Address).MergeCells Then cellule.Select position = cellule.Address InsertImage End If Next cellule End Sub Sub InsertImage() If cheminfichier = "" Then Exit Sub ActiveSheet.Pictures.Insert(cheminfichier).Select With Selection.ShapeRange .LockAspectRatio = msoFalse .Left = ActiveCell.Left .Top = ActiveCell.Top .Width = ActiveCell.Width * 2 'a adapter suivant les cellules fusionnées .Height = ActiveCell.Height End With With Worksheets(1).Range(position) With .Borders(xlEdgeLeft) .LineStyle = xlDouble 'bordure double .Weight = xlMedium 'trait moyen .Color = RGB(255, 0, 0) 'rouge End With With .Borders(xlEdgeRight) .LineStyle = xlDouble .Weight = xlMedium .Color = RGB(255, 0, 0) End With With .Borders(xlEdgeTop) .LineStyle = xlDouble .Weight = xlMedium .Color = RGB(255, 0, 0) End With With .Borders(xlEdgeBottom) .LineStyle = xlDouble .Weight = xlMedium .Color = RGB(255, 0, 0) End With End With End Sub Sub open_file() 'Declare a variable as a FileDialog object. Dim fd As FileDialog 'Create a FileDialog object as a File Picker dialog. Set fd = Application.FileDialog(msoFileDialogFilePicker) 'Declare a variable to contain the path 'of each selected item. Even though the path is a String, 'the variable must be a Variant because For Each...Next 'routines only work with Variants and Objects. Dim vrtSelectedItem As Variant 'Use a With...End With block to reference the FileDialog object. With fd 'Add a filter that includes GIF and JPEG images and make it the first item in the list. .Filters.Add "Images", "*.gif; *.jpg; *.jpeg", 1 .Title = "Choisissez une image" .InitialFileName = "C:\" .InitialView = msoFileDialogViewThumbnail 'afficher les miniatures 'Use the Show method to display the File Picker dialog box and return the user's action. 'If the user presses the action button... If .Show = -1 Then 'Step through each string in the FileDialogSelectedItems collection. For Each vrtSelectedItem In .SelectedItems 'vrtSelectedItem is a String that contains the path of each selected item. 'You can use any file I/O functions that you want to work with this path. 'This example simply displays the path in a message box. cheminfichier = vrtSelectedItem Next End If End With End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
16 janv. 2015 à 08:47
16 janv. 2015 à 08:47
Mettre dans la feuille concernée en haut à gauche:
Inserer un module et mettre ceci:
et voici ton code avec les bordures et l'image dimensionnée à la cellule fusionnée:
Il faudra juste sélectionner la cellule avant de lancer la macro.
Pour plus de facilité tu vas dans les propriétés de ton UserForm et tu mets :
ShowModal a False
Si tu as des difficulté je mettrais le fichier sur cjoint
Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) position = Target.Address End Sub
Inserer un module et mettre ceci:
Option Explicit Public position As String
et voici ton code avec les bordures et l'image dimensionnée à la cellule fusionnée:
Option Explicit Private Sub CommandButton1_Click() InsererImage End Sub Sub InsererImage() Dim cellule Dim myPicture As String, MyRange As Range myPicture = Application.GetOpenFilename _ ("Pictures (.bmp; .gif; .jpg; .png; .tif),.bmp; .gif; .jpg; .png; .tif", _ , "Select Picture to Import") Set MyRange = Selection InsertAndSizePic MyRange, myPicture With Worksheets(1).Range(position) With .Borders(xlEdgeLeft) .LineStyle = xlDouble 'bordure double .Weight = xlMedium 'trait moyen .Color = RGB(255, 0, 0) 'rouge End With With .Borders(xlEdgeRight) .LineStyle = xlDouble .Weight = xlMedium .Color = RGB(255, 0, 0) End With With .Borders(xlEdgeTop) .LineStyle = xlDouble .Weight = xlMedium .Color = RGB(255, 0, 0) End With With .Borders(xlEdgeBottom) .LineStyle = xlDouble .Weight = xlMedium .Color = RGB(255, 0, 0) End With End With End Sub Sub InsertAndSizePic(Target As Range, PicPath As String) Dim p As Picture Application.ScreenUpdating = False On Error GoTo EndOfSubroutine: Set p = ActiveSheet.Pictures.Insert(PicPath) If Target.Cells.Count = 1 Then Set Target = Target.MergeArea With Target p.Left = .Left p.Top = .Top p.Width = .Width End With EndOfSubroutine: End Sub
Il faudra juste sélectionner la cellule avant de lancer la macro.
Pour plus de facilité tu vas dans les propriétés de ton UserForm et tu mets :
ShowModal a False
Si tu as des difficulté je mettrais le fichier sur cjoint
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
16 janv. 2015 à 08:51
16 janv. 2015 à 08:51
mais dès que je déplace le fichier, les images ne suivent pas
Je ne comprends pas. Que veux-tu dire par là? Les images que tu as insérées restent sur la feuille et ne sont pas attachées à leur emplacement d'origine
Je ne comprends pas. Que veux-tu dire par là? Les images que tu as insérées restent sur la feuille et ne sont pas attachées à leur emplacement d'origine
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
16 janv. 2015 à 09:02
16 janv. 2015 à 09:02
Si tu change de feuille, il faudra mettre ce code dans toutes tes feuilles:
Changer cette ligne dans le code d'insertion d'image: Sub InsererImage()
par
Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) position = Target.Address End Sub
Changer cette ligne dans le code d'insertion d'image: Sub InsererImage()
With Worksheets(1).Range(position)
par
With ActiveSheet.Range(position)
Roseff08
Messages postés
6
Date d'inscription
mercredi 14 janvier 2015
Statut
Membre
Dernière intervention
20 janvier 2015
1
16 janv. 2015 à 11:07
16 janv. 2015 à 11:07
Re bonjour,
J'accepte avec plaisir ton offre de mettre le fichier sur cjoint et en attendant, je t'envoie ce tout grand MERCI pour ton aide !ü
@+ Rose
J'accepte avec plaisir ton offre de mettre le fichier sur cjoint et en attendant, je t'envoie ce tout grand MERCI pour ton aide !ü
@+ Rose
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
16 janv. 2015 à 11:28
16 janv. 2015 à 11:28
Voici le lien:
http://www.cjoint.com/data3/3AqlKJqtWBV.htm
http://www.cjoint.com/data3/3AqlKJqtWBV.htm
Roseff08
Messages postés
6
Date d'inscription
mercredi 14 janvier 2015
Statut
Membre
Dernière intervention
20 janvier 2015
1
16 janv. 2015 à 13:46
16 janv. 2015 à 13:46
Re re bonjour,
C'est super ! je vais profiter du week-end pour mettre tout cela en place !
Encore un énoooooooooooorme MERCI et un tout beau week-end à toi.
@+ Rose
C'est super ! je vais profiter du week-end pour mettre tout cela en place !
Encore un énoooooooooooorme MERCI et un tout beau week-end à toi.
@+ Rose
Roseff08
Messages postés
6
Date d'inscription
mercredi 14 janvier 2015
Statut
Membre
Dernière intervention
20 janvier 2015
1
19 janv. 2015 à 12:54
19 janv. 2015 à 12:54
Re, re et re,
Tout d'abord un tout grand MERCI pour ta peine. J'ai testé ton fichier, c'est "TOP", ça marche tip-top, mais ça se gâte toutefois, quand je l'importe sur mon fichier, car j'ai une erreur qui apparaît sur la ligne que j'ai marqué en gras:
ub InsererImage()
Dim myPicture As String, MyRange As Range
myPicture = Application.GetOpenFilename _
("Pictures (.bmp; .gif; .jpg; .png; .tif),.bmp; .gif; .jpg; .png; .tif", _
, "Select Picture to Import")
Set MyRange = Selection
InsertAndSizePic MyRange, myPicture
With ActiveSheet.Range(position)
Que faire ?
... et puis, si tu pouvais regarder pour mettre un cadre autour de l'image, mais pas de la cellule !
Encore merci à toi et une toute belle journée.
cordialement.
A+ Rose
Tout d'abord un tout grand MERCI pour ta peine. J'ai testé ton fichier, c'est "TOP", ça marche tip-top, mais ça se gâte toutefois, quand je l'importe sur mon fichier, car j'ai une erreur qui apparaît sur la ligne que j'ai marqué en gras:
ub InsererImage()
Dim myPicture As String, MyRange As Range
myPicture = Application.GetOpenFilename _
("Pictures (.bmp; .gif; .jpg; .png; .tif),.bmp; .gif; .jpg; .png; .tif", _
, "Select Picture to Import")
Set MyRange = Selection
InsertAndSizePic MyRange, myPicture
With ActiveSheet.Range(position)
Que faire ?
... et puis, si tu pouvais regarder pour mettre un cadre autour de l'image, mais pas de la cellule !
Encore merci à toi et une toute belle journée.
cordialement.
A+ Rose
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
19 janv. 2015 à 13:57
19 janv. 2015 à 13:57
J'ai simplifié le code. Si tu veux changer la couleur du fond, tu te sers de l'enregistreur de macro pour avoir le code couleur:
http://www.cjoint.com/data3/3AtoeegU2Rv.htm
http://www.cjoint.com/data3/3AtoeegU2Rv.htm
Roseff08
Messages postés
6
Date d'inscription
mercredi 14 janvier 2015
Statut
Membre
Dernière intervention
20 janvier 2015
1
20 janv. 2015 à 14:19
20 janv. 2015 à 14:19
Re, re, re, re et re,
Je ne sais comment te remercier ! C'est vraiment SUPER de chez SUPER !
Alors encore un tout grand MERCI et une toute belle fin de journée à toi !
Cordialement.
Rose
Je ne sais comment te remercier ! C'est vraiment SUPER de chez SUPER !
Alors encore un tout grand MERCI et une toute belle fin de journée à toi !
Cordialement.
Rose