J'ai des fichiers .JPG dans le dossier D:\CTX\INFORMATIQUE\Gestion de stock=
\Logos
J'ai cr=E9=E9 un userform dans lequel j'ai mis une combobox et un controle =
image.
La finalit=E9 est de mettre les noms de fichier dans la combobox est en fon=
ction du nom du fichier faire apparaitre le logo dans le contr=F4le image.
Deux pr=E9cisions, mon fichier excel est dans le dossier Gestion de stock. =
D:\CTX\INFORMATIQUE\Gestion de stock)
et le nombres de fichiers JPG est variable.
J'aurai aim=E9 en voir apparaitre au moins un avec ce code.
Private Sub UserForm_Initialize()
Dim Chemin As String
Chemin =3D "D:\CTX\INFORMATIQUE\Gestion de stock\Logos"
ComboBox1.AddItem Chemin \ Files.Name
End Sub
J'ai encore besoin de tes lumières. J'essuie un erreur 1004: Impossible de lire la propriété de la classe p ictures. Dans la ligne: Set Image = Worksheets(Feuille).Pictures.Insert(NomImage) Je voudrais que la sous procédure que tu me proposes soit plutôt dans u n bouton _click. Voilà ce que j'ai fait (certainement moins académique):
Dim Chemin As String Dim fic As String Dim NomImage As String
Private Sub ComboBox1_Change() Me.cadre.Picture = LoadPicture(Chemin & Me.ComboBox1.Value) NomImage = Dir(Chemin & Me.ComboBox1.Value) End Sub Private Sub UserForm_Initialize() Chemin = Workbooks(ActiveWorkbook.Name).Path & "logos" fic = Dir(Chemin & "*.jpg") Do While fic <> "" Me.ComboBox1.AddItem fic fic = Dir Loop End Sub
Private Sub Insere_Image_Click() Dim Feuille As String Dim RgImage As Range Dim Image As Picture Dim Rg As Range Feuille = "BLEnt" Set Rg = Worksheets(Feuille).Range("D3") With Rg Largeur = 160 '.Offset(, 1)(, .Columns.Count).Left - .Left Hauteur = 80 '.Offset(.Rows.Count).Top - .Item(1).Top Set Image = Worksheets(Feuille).Pictures.Insert(NomImage) End With With Image .ShapeRange.LockAspectRatio = msoFalse .Left = Rg.Left .Top = Rg.Top + 2 'Largeur de l'image Image.Width = Largeur 'Hauteur de l'image Image.Height = Hauteur 'Est-ce que l'image doit se déplacer avec les cellules 'voici les 3 constantes possibles .Placement = xlFreeFloating 'or xlmove or xlMoveAndSize 'Verrouillé ou pas .Locked = True 'or False End With Set Rg = Nothing
End Sub
Merci
JP
Denis,
J'ai encore besoin de tes lumières.
J'essuie un erreur 1004: Impossible de lire la propriété de la classe p ictures.
Dans la ligne:
Set Image = Worksheets(Feuille).Pictures.Insert(NomImage)
Je voudrais que la sous procédure que tu me proposes soit plutôt dans u n bouton _click.
Voilà ce que j'ai fait (certainement moins académique):
Dim Chemin As String
Dim fic As String
Dim NomImage As String
Private Sub ComboBox1_Change()
Me.cadre.Picture = LoadPicture(Chemin & Me.ComboBox1.Value)
NomImage = Dir(Chemin & Me.ComboBox1.Value)
End Sub
Private Sub UserForm_Initialize()
Chemin = Workbooks(ActiveWorkbook.Name).Path & "logos"
fic = Dir(Chemin & "*.jpg")
Do While fic <> ""
Me.ComboBox1.AddItem fic
fic = Dir
Loop
End Sub
Private Sub Insere_Image_Click()
Dim Feuille As String
Dim RgImage As Range
Dim Image As Picture
Dim Rg As Range
Feuille = "BLEnt"
Set Rg = Worksheets(Feuille).Range("D3")
With Rg
Largeur = 160 '.Offset(, 1)(, .Columns.Count).Left - .Left
Hauteur = 80 '.Offset(.Rows.Count).Top - .Item(1).Top
Set Image = Worksheets(Feuille).Pictures.Insert(NomImage)
End With
With Image
.ShapeRange.LockAspectRatio = msoFalse
.Left = Rg.Left
.Top = Rg.Top + 2
'Largeur de l'image
Image.Width = Largeur
'Hauteur de l'image
Image.Height = Hauteur
'Est-ce que l'image doit se déplacer avec les cellules
'voici les 3 constantes possibles
.Placement = xlFreeFloating 'or xlmove or xlMoveAndSize
'Verrouillé ou pas
.Locked = True 'or False
End With
Set Rg = Nothing
J'ai encore besoin de tes lumières. J'essuie un erreur 1004: Impossible de lire la propriété de la classe p ictures. Dans la ligne: Set Image = Worksheets(Feuille).Pictures.Insert(NomImage) Je voudrais que la sous procédure que tu me proposes soit plutôt dans u n bouton _click. Voilà ce que j'ai fait (certainement moins académique):
Dim Chemin As String Dim fic As String Dim NomImage As String
Private Sub ComboBox1_Change() Me.cadre.Picture = LoadPicture(Chemin & Me.ComboBox1.Value) NomImage = Dir(Chemin & Me.ComboBox1.Value) End Sub Private Sub UserForm_Initialize() Chemin = Workbooks(ActiveWorkbook.Name).Path & "logos" fic = Dir(Chemin & "*.jpg") Do While fic <> "" Me.ComboBox1.AddItem fic fic = Dir Loop End Sub
Private Sub Insere_Image_Click() Dim Feuille As String Dim RgImage As Range Dim Image As Picture Dim Rg As Range Feuille = "BLEnt" Set Rg = Worksheets(Feuille).Range("D3") With Rg Largeur = 160 '.Offset(, 1)(, .Columns.Count).Left - .Left Hauteur = 80 '.Offset(.Rows.Count).Top - .Item(1).Top Set Image = Worksheets(Feuille).Pictures.Insert(NomImage) End With With Image .ShapeRange.LockAspectRatio = msoFalse .Left = Rg.Left .Top = Rg.Top + 2 'Largeur de l'image Image.Width = Largeur 'Hauteur de l'image Image.Height = Hauteur 'Est-ce que l'image doit se déplacer avec les cellules 'voici les 3 constantes possibles .Placement = xlFreeFloating 'or xlmove or xlMoveAndSize 'Verrouillé ou pas .Locked = True 'or False End With Set Rg = Nothing
'------------------------------------------------------------------ Private Sub Insere_Image_Click()
Dim Fichier As String, NomFeuille As String Dim NomImage As String
'Chemin + nom du fichier + extension du fichier image NomImage = "c:CheminImage.jpg"
'Nom de l'onglet de la feuille où insérer l'image NomFeuille = "Feuil1"
'Étendue de la plage de cellule où l'image doit apparaitre 'dans la feuille Plage = "D7:G23"
InsérerImage NomFeuille, Range(Plage), NomImage
End Sub
'------------------------------------------------------------------ Sub InsérerImage(Feuille As String, RgImage As Range, _ NomImage As String) Dim Rg As Range, Image As Picture Set Rg = Worksheets(Feuille).Range(RgImage.Address) With Rg Largeur = .Offset(, 1)(, .Columns.Count).Left - .Left Hauteur = .Offset(.Rows.Count).Top - .Item(1).Top Set Image = Worksheets(Feuille).Pictures.Insert(NomImage) End With With Image .ShapeRange.LockAspectRatio = msoFalse .Left = Rg.Left .Top = Rg.Top 'Largeur de l'image Image.Width = Largeur 'Hauteur de l'image Image.Height = Hauteur 'Est-ce que l'image doit se déplacer avec les cellules 'voici les 3 constantes possibles .Placement = xlFreeFloating 'or xlmove or xlMoveAndSize 'Verrouillé ou pas .Locked = True 'or False End With Set Rg = Nothing End Sub '------------------------------------------------------------------
Bonjour,
'------------------------------------------------------------------
Private Sub Insere_Image_Click()
Dim Fichier As String, NomFeuille As String
Dim NomImage As String
'Chemin + nom du fichier + extension du fichier image
NomImage = "c:CheminImage.jpg"
'Nom de l'onglet de la feuille où insérer l'image
NomFeuille = "Feuil1"
'Étendue de la plage de cellule où l'image doit apparaitre
'dans la feuille
Plage = "D7:G23"
InsérerImage NomFeuille, Range(Plage), NomImage
End Sub
'------------------------------------------------------------------
Sub InsérerImage(Feuille As String, RgImage As Range, _
NomImage As String)
Dim Rg As Range, Image As Picture
Set Rg = Worksheets(Feuille).Range(RgImage.Address)
With Rg
Largeur = .Offset(, 1)(, .Columns.Count).Left - .Left
Hauteur = .Offset(.Rows.Count).Top - .Item(1).Top
Set Image = Worksheets(Feuille).Pictures.Insert(NomImage)
End With
With Image
.ShapeRange.LockAspectRatio = msoFalse
.Left = Rg.Left
.Top = Rg.Top
'Largeur de l'image
Image.Width = Largeur
'Hauteur de l'image
Image.Height = Hauteur
'Est-ce que l'image doit se déplacer avec les cellules
'voici les 3 constantes possibles
.Placement = xlFreeFloating 'or xlmove or xlMoveAndSize
'Verrouillé ou pas
.Locked = True 'or False
End With
Set Rg = Nothing
End Sub
'------------------------------------------------------------------
'------------------------------------------------------------------ Private Sub Insere_Image_Click()
Dim Fichier As String, NomFeuille As String Dim NomImage As String
'Chemin + nom du fichier + extension du fichier image NomImage = "c:CheminImage.jpg"
'Nom de l'onglet de la feuille où insérer l'image NomFeuille = "Feuil1"
'Étendue de la plage de cellule où l'image doit apparaitre 'dans la feuille Plage = "D7:G23"
InsérerImage NomFeuille, Range(Plage), NomImage
End Sub
'------------------------------------------------------------------ Sub InsérerImage(Feuille As String, RgImage As Range, _ NomImage As String) Dim Rg As Range, Image As Picture Set Rg = Worksheets(Feuille).Range(RgImage.Address) With Rg Largeur = .Offset(, 1)(, .Columns.Count).Left - .Left Hauteur = .Offset(.Rows.Count).Top - .Item(1).Top Set Image = Worksheets(Feuille).Pictures.Insert(NomImage) End With With Image .ShapeRange.LockAspectRatio = msoFalse .Left = Rg.Left .Top = Rg.Top 'Largeur de l'image Image.Width = Largeur 'Hauteur de l'image Image.Height = Hauteur 'Est-ce que l'image doit se déplacer avec les cellules 'voici les 3 constantes possibles .Placement = xlFreeFloating 'or xlmove or xlMoveAndSize 'Verrouillé ou pas .Locked = True 'or False End With Set Rg = Nothing End Sub '------------------------------------------------------------------
JP
Denis,
Toujours la même erreur. J'essuie un erreur 1004: Impossible de lire la propriété de la classe p ictures. Dans la ligne: Set Image = Worksheets(Feuille).Pictures.Insert(NomImage)
JP
Denis,
Toujours la même erreur.
J'essuie un erreur 1004: Impossible de lire la propriété de la classe p ictures.
Dans la ligne:
Set Image = Worksheets(Feuille).Pictures.Insert(NomImage)
Toujours la même erreur. J'essuie un erreur 1004: Impossible de lire la propriété de la classe p ictures. Dans la ligne: Set Image = Worksheets(Feuille).Pictures.Insert(NomImage)
JP
MichD
J'ai testé à nouveau cette procédure et tout est OK.
NomImage = "c:CheminImage.jpg"
Si le chemin et le nom du fichier sont inexistants, c'est sûr que cela ne fonctionnera pas.
Tu peux tester si le fichier existe comme ceci :
NomImage = "c:CheminImage.jpg"
If dir(NomImage) = "" then Msgbox "Ce fichier est inexistant dans le chemin indiqué." Exit sub end if
'Le reste du code
J'ai testé à nouveau cette procédure et tout est OK.
NomImage = "c:CheminImage.jpg"
Si le chemin et le nom du fichier sont inexistants, c'est sûr que cela ne
fonctionnera pas.
Tu peux tester si le fichier existe comme ceci :
NomImage = "c:CheminImage.jpg"
If dir(NomImage) = "" then
Msgbox "Ce fichier est inexistant dans le chemin indiqué."
Exit sub
end if
et j'ai pour le chemin: Chemin = Workbooks(ActiveWorkbook.Name).Path & "logos"
Est-ce qu'il y a un problème?
En suivant ligne par ligne (touche F8) NomImage prend bien le nom de l'imag e de la combobox. Tout semble normal de ce coté.
JP
MichD
D'abord, il faut passer les commandes par ordre :
================================== C'est OK si le fichier ActiveWorkbook a été enregistré au moins une fois sinon le "Path" du fichier sera égale à "" Chemin = Workbooks(ActiveWorkbook.Name).Path & "logos" 'Image selectionnee
Est-ce que les extensions de fichiers sont présentes dans le combobox? Si elles sont absentes, il faut les ajouter
if ComboBox1.Value <> "" then NomImage = Dir(Chemin & ComboBox1.Value & ".jpg") Else Msgbox "Choisir d'abord l'image dans la liste du combobox." Exit sub end if
If dir(NomImage) = "" then Msgbox "Cette image & """ & NomImage & """ est inexistante dans le répertoire indiqué." Exit sub End if ==================================
MichD
D'abord, il faut passer les commandes par ordre :
================================== C'est OK si le fichier ActiveWorkbook a été enregistré au moins une fois
sinon le "Path" du fichier sera égale à ""
Chemin = Workbooks(ActiveWorkbook.Name).Path & "logos"
'Image selectionnee
Est-ce que les extensions de fichiers sont présentes dans le combobox?
Si elles sont absentes, il faut les ajouter
if ComboBox1.Value <> "" then
NomImage = Dir(Chemin & ComboBox1.Value & ".jpg")
Else
Msgbox "Choisir d'abord l'image dans la liste du combobox."
Exit sub
end if
If dir(NomImage) = "" then
Msgbox "Cette image & """ & NomImage & """ est inexistante dans le
répertoire indiqué."
Exit sub
End if
==================================
================================== C'est OK si le fichier ActiveWorkbook a été enregistré au moins une fois sinon le "Path" du fichier sera égale à "" Chemin = Workbooks(ActiveWorkbook.Name).Path & "logos" 'Image selectionnee
Est-ce que les extensions de fichiers sont présentes dans le combobox? Si elles sont absentes, il faut les ajouter
if ComboBox1.Value <> "" then NomImage = Dir(Chemin & ComboBox1.Value & ".jpg") Else Msgbox "Choisir d'abord l'image dans la liste du combobox." Exit sub end if
If dir(NomImage) = "" then Msgbox "Cette image & """ & NomImage & """ est inexistante dans le répertoire indiqué." Exit sub End if ==================================
MichD
JP
Denis,
Je viens de contrôler à nouveau. Le path est bien dans la variable chem in, la combobox contient bien les noms des images avec l'extension JPG.
Pour que tu aies une vision globale, le code complet pour cet userform est:
Dim Chemin As String Dim fic As String Dim NomImage As String
Private Sub ComboBox1_Change() Me.cadre.Picture = LoadPicture(Chemin & Me.ComboBox1.Value) NomImage = Dir(Chemin & Me.ComboBox1.Value) End Sub
Private Sub UserForm_Initialize() Chemin = Workbooks(ActiveWorkbook.Name).Path & "logos" fic = Dir(Chemin & "*.jpg") Do While fic <> "" Me.ComboBox1.AddItem fic fic = Dir Loop End Sub
Private Sub Insere_Image_Click()
' variables Dim Fichier As String, NomFeuille As String Dim NomImage As String
'Nom de l'onglet de la feuille où insérer l'image NomFeuille = "BLEnt"
'étendue de la plage ou l'image doit apparaitre Plage = "D3:G5" ' Vers sous procédure InsérerImage NomFeuille, Range(Plage), NomImage End Sub
Sub InsérerImage(Feuille As String, RgImage As Range, NomImage As String) Dim Rg As Range, Image As Picture Set Rg = Worksheets(Feuille).Range(RgImage.Address) With Rg Largeur = .Offset(, 1)(, .Columns.Count).Left - .Left Hauteur = .Offset(.Rows.Count).Top - .Item(1).Top Set Image = Worksheets(Feuille).Pictures.Insert(NomImage) End With With Image .ShapeRange.LockAspectRatio = msoFalse .Left = Rg.Left .Top = Rg.Top + 2 'Largeur de l'image Image.Width = Largeur 'Hauteur de l'image Image.Height = Hauteur 'Est-ce que l'image doit se déplacer avec les cellules 'voici les 3 constantes possibles .Placement = xlFreeFloating 'or xlmove or xlMoveAndSize 'Verrouillé ou pas .Locked = True 'or False End With Set Rg = Nothing End Sub
L'erreur serait-elle dans l'événement combobox_change?
JP
Denis,
Je viens de contrôler à nouveau. Le path est bien dans la variable chem in, la combobox contient bien les noms des images avec l'extension JPG.
Pour que tu aies une vision globale, le code complet pour cet userform est:
Dim Chemin As String
Dim fic As String
Dim NomImage As String
Private Sub ComboBox1_Change()
Me.cadre.Picture = LoadPicture(Chemin & Me.ComboBox1.Value)
NomImage = Dir(Chemin & Me.ComboBox1.Value)
End Sub
Private Sub UserForm_Initialize()
Chemin = Workbooks(ActiveWorkbook.Name).Path & "logos"
fic = Dir(Chemin & "*.jpg")
Do While fic <> ""
Me.ComboBox1.AddItem fic
fic = Dir
Loop
End Sub
Private Sub Insere_Image_Click()
' variables
Dim Fichier As String, NomFeuille As String
Dim NomImage As String
'Nom de l'onglet de la feuille où insérer l'image
NomFeuille = "BLEnt"
'étendue de la plage ou l'image doit apparaitre
Plage = "D3:G5"
' Vers sous procédure
InsérerImage NomFeuille, Range(Plage), NomImage
End Sub
Sub InsérerImage(Feuille As String, RgImage As Range, NomImage As String)
Dim Rg As Range, Image As Picture
Set Rg = Worksheets(Feuille).Range(RgImage.Address)
With Rg
Largeur = .Offset(, 1)(, .Columns.Count).Left - .Left
Hauteur = .Offset(.Rows.Count).Top - .Item(1).Top
Set Image = Worksheets(Feuille).Pictures.Insert(NomImage)
End With
With Image
.ShapeRange.LockAspectRatio = msoFalse
.Left = Rg.Left
.Top = Rg.Top + 2
'Largeur de l'image
Image.Width = Largeur
'Hauteur de l'image
Image.Height = Hauteur
'Est-ce que l'image doit se déplacer avec les cellules
'voici les 3 constantes possibles
.Placement = xlFreeFloating 'or xlmove or xlMoveAndSize
'Verrouillé ou pas
.Locked = True 'or False
End With
Set Rg = Nothing
End Sub
L'erreur serait-elle dans l'événement combobox_change?
Je viens de contrôler à nouveau. Le path est bien dans la variable chem in, la combobox contient bien les noms des images avec l'extension JPG.
Pour que tu aies une vision globale, le code complet pour cet userform est:
Dim Chemin As String Dim fic As String Dim NomImage As String
Private Sub ComboBox1_Change() Me.cadre.Picture = LoadPicture(Chemin & Me.ComboBox1.Value) NomImage = Dir(Chemin & Me.ComboBox1.Value) End Sub
Private Sub UserForm_Initialize() Chemin = Workbooks(ActiveWorkbook.Name).Path & "logos" fic = Dir(Chemin & "*.jpg") Do While fic <> "" Me.ComboBox1.AddItem fic fic = Dir Loop End Sub
Private Sub Insere_Image_Click()
' variables Dim Fichier As String, NomFeuille As String Dim NomImage As String
'Nom de l'onglet de la feuille où insérer l'image NomFeuille = "BLEnt"
'étendue de la plage ou l'image doit apparaitre Plage = "D3:G5" ' Vers sous procédure InsérerImage NomFeuille, Range(Plage), NomImage End Sub
Sub InsérerImage(Feuille As String, RgImage As Range, NomImage As String) Dim Rg As Range, Image As Picture Set Rg = Worksheets(Feuille).Range(RgImage.Address) With Rg Largeur = .Offset(, 1)(, .Columns.Count).Left - .Left Hauteur = .Offset(.Rows.Count).Top - .Item(1).Top Set Image = Worksheets(Feuille).Pictures.Insert(NomImage) End With With Image .ShapeRange.LockAspectRatio = msoFalse .Left = Rg.Left .Top = Rg.Top + 2 'Largeur de l'image Image.Width = Largeur 'Hauteur de l'image Image.Height = Hauteur 'Est-ce que l'image doit se déplacer avec les cellules 'voici les 3 constantes possibles .Placement = xlFreeFloating 'or xlmove or xlMoveAndSize 'Verrouillé ou pas .Locked = True 'or False End With Set Rg = Nothing End Sub
L'erreur serait-elle dans l'événement combobox_change?
JP
MichD
Écoute, tu as tout le code requis pour pouvoir écrire la procédure. Il ne faut pas faire seulement du copier-coller des propositions faites vers l'application, il faut essayer de comprendre ce que l'on fait. L'apprentissage est un long processus et demande un certain temps!
Par exemple, à quoi sert la ligne de code NomImage = Dir(Chemin & Me.ComboBox1.Value) dans cette procédure. '--------------------------------------- Private Sub ComboBox1_Change() Me.cadre.Picture = LoadPicture(Chemin & Me.ComboBox1.Value) NomImage = Dir(Chemin & Me.ComboBox1.Value) End Sub '---------------------------------------
L'événement "Change" est souvent problématique pour bien des contrôles. Mais comme contrôle à plusieurs événements possibles, il est possible d'en essayer d'autres comme : '--------------------------------------- Private Sub ComboBox1_Click()
End Sub '---------------------------------------
Tu peux utiliser des points d'arrêt dans le code et exécuter pas à pas les lignes de code avec la touche F8 pour identifier là où ça ne va pas.
Au-delà de tout le code exemple que je t'ai suggéré, je n'ai rien d'autre à ajouter sur cette question.
Écoute, tu as tout le code requis pour pouvoir écrire la procédure.
Il ne faut pas faire seulement du copier-coller des propositions
faites vers l'application, il faut essayer de comprendre ce que l'on
fait. L'apprentissage est un long processus et demande un certain
temps!
Par exemple, à quoi sert la ligne de code
NomImage = Dir(Chemin & Me.ComboBox1.Value)
dans cette procédure.
'---------------------------------------
Private Sub ComboBox1_Change()
Me.cadre.Picture = LoadPicture(Chemin & Me.ComboBox1.Value)
NomImage = Dir(Chemin & Me.ComboBox1.Value)
End Sub
'---------------------------------------
L'événement "Change" est souvent problématique pour bien des contrôles.
Mais comme contrôle à plusieurs événements possibles, il est possible
d'en essayer d'autres comme :
'---------------------------------------
Private Sub ComboBox1_Click()
End Sub
'---------------------------------------
Tu peux utiliser des points d'arrêt dans le code et exécuter pas à pas
les lignes de code avec la touche F8 pour identifier là où ça ne va pas.
Au-delà de tout le code exemple que je t'ai suggéré, je n'ai rien
d'autre à ajouter sur cette question.
Écoute, tu as tout le code requis pour pouvoir écrire la procédure. Il ne faut pas faire seulement du copier-coller des propositions faites vers l'application, il faut essayer de comprendre ce que l'on fait. L'apprentissage est un long processus et demande un certain temps!
Par exemple, à quoi sert la ligne de code NomImage = Dir(Chemin & Me.ComboBox1.Value) dans cette procédure. '--------------------------------------- Private Sub ComboBox1_Change() Me.cadre.Picture = LoadPicture(Chemin & Me.ComboBox1.Value) NomImage = Dir(Chemin & Me.ComboBox1.Value) End Sub '---------------------------------------
L'événement "Change" est souvent problématique pour bien des contrôles. Mais comme contrôle à plusieurs événements possibles, il est possible d'en essayer d'autres comme : '--------------------------------------- Private Sub ComboBox1_Click()
End Sub '---------------------------------------
Tu peux utiliser des points d'arrêt dans le code et exécuter pas à pas les lignes de code avec la touche F8 pour identifier là où ça ne va pas.
Au-delà de tout le code exemple que je t'ai suggéré, je n'ai rien d'autre à ajouter sur cette question.