Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Nom de fichiers dans une combobox

25 réponses
Avatar
JP
Bonjour,

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

Mais m=EAme pas!



Merci=20

JP

10 réponses

1 2 3
Avatar
JP
Pas grave, je vais bien trouver une solution.

JP
Avatar
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


End Sub

Merci

JP
Avatar
JP
Denis,

Peux-tu me donner une piste?

Merci

JP
Avatar
MichD
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
'------------------------------------------------------------------
Avatar
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
Avatar
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
Avatar
JP
Denis,

Jai pour l'image:

'Image selectionnee
NomImage = Dir(Chemin & ComboBox1.Value)

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
Avatar
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
Avatar
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

'Image selectionnee
NomImage = Dir(Chemin & ComboBox1.Value)

'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
Avatar
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.
1 2 3