[RESOLU]Recherche dans dossier et affichage

alienox

XLDnaute Occasionnel
Bonjour le forum,

j'aimerai avoir un code de base faisant ceci, car je ne sais pas par quoi commencer!!!

Explication:

avec un userform, j'ai quatre combobox, seul deux ici m'intéresse, j'aimerai qu'avec ces 2, je puisse rechercher dans un dossier (contenant des images .jpeg) et m'affiche dans une listview les résultats.

Avez-vous une idée pour commencer :eek:

Merci
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Recherche dans dossier et affichage

Re

alienox
Toujours ce problème de lunettes ;)
Dans le lien du précédent message c'était le point 3) qui de te donnait le nom du fondateur du site.

Sinon pour ta question, c'est ici le changement
Chemin ="C:\Prescriptions" ' mettre le vrai chemin de ton dossier

Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.GetFolder(Chemin)
 

alienox

XLDnaute Occasionnel
Re : Recherche dans dossier et affichage

Re,

Ok pour le fondateur, mais es-tu administrateur? parce que tu es mega barbatruc ;)

Sinon, comment te dire, même avec des lunettes, cela ne change rien, il m'affiche toujours "recherche dossier"??
J'ai encore zappé un truc dit-moi???
 

Staple1600

XLDnaute Barbatruc
Re : Recherche dans dossier et affichage

Re

alienox
Je ne suis qu'un membre du forum, comme toi, mais depuis plus longtemps ;)
C'est tout ce qui nous distingue... le temps passé sur le forum.

Sinon pour t'expliquer, regarde ce petit exemple
Code VB:
Sub petit_test()
Const Chemin As String = "C:\Temp"
'adaptes Chemin avec le nom du dossier de ton choix
'pour faire un test
Dim fso
Dim fldr
Dim Files
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.GetFolder(Chemin)
Set Files = fldr.Files
For Each oFile In Files
MsgBox oFile.Name
Next
End Sub





Ensuite il faut utiliser la même logique pour adapter le code dans Userform_Initialize
pour remplir ta listview

Tu vois donc désormais quels changements il faut faire, non?

NB: Il y avait bien un lien avec le fil que je citais dans le message #27
https://www.excel-downloads.com/threads/constante-commune-et-activeworkbook-path.165958/
L'utilisation de Const pour définir le chemin* en dur
(* ou path en VBA ou autre langage de programmation)
 
Dernière édition:

alienox

XLDnaute Occasionnel
Re : Recherche dans dossier et affichage

re,

pufffffff, Si je te dis "oui", je vais te mentir, et si je te dis "non", tu vas me dire "mets tes lunettes".....

Ok, mais je mets ou ça, et il doit y avoir certainement des choses à supprimer dans le code????
Code:
Const Chemin As String = "C:\Temp"
'adaptes Chemin avec le nom du dossier de ton choix
'pour faire un test

Bon, je n'y suis plus, je regarderai cela à tête reposée, car je n'y arrive pas, BOULET que je suis....

merci pour cet apprentissage

A+
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Recherche dans dossier et affichage

Re

alienox
Avec tes lunettes sur le nez, prends le temps surtout d'être un peu attentif...
Remplace la procédure UserForm_Initialize de l'userform par celle en mettant le chemin exact du dossier
Prescriptions

Code:
Private Sub UserForm_Initialize()
'mixage d'un code rédigé par cytop
'et du code cité dans mon fil précédent
Dim fso As Object
Dim fldr As Object
Dim Files As Object
Dim oFile As Object
Dim li As ListItem

Const Chemin As String = "C:\Prescriptions"

On Error GoTo ErrHandler

'Définit les entêtes de colonnes
With ListView1
With .ColumnHeaders
.Clear 'Supprime les anciens entêtes
'Ajout des colonnes
.Add , , "Nom", 200
.Add , , "Type", 85, lvwColumnLeft
.Add , , "Taille", 75, lvwColumnRight
End With

.View = lvwReport 'affichage en mode Rapport
.Gridlines = True 'affichage d'un quadrillage
.FullRowSelect = True 'Sélection des lignes complètes
End With

Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.GetFolder(Chemin)
Set Files = fldr.Files

For Each oFile In Files
Set li = ListView1.ListItems.Add(, , oFile.Name)
li.SubItems(1) = oFile.Type
li.SubItems(2) = Format$(oFile.Size, "0")
Next

EndProc:

On Error Resume Next
Set li = Nothing
Set oFile = Nothing
Set fldr = Nothing
Set fso = Nothing

Exit Sub

ErrHandler:

MsgBox "ERROR: " & Err.Description, vbExclamation, "Error"
Resume EndProc

End Sub
Et tu laisses évidemment les autres codes en place, puis tu affiches ton userform
Les images s'affichent bien , non ?

NB: Pour que cela fonctionne il faut que le code de ListView1_ItemClick soit modifié comme indiqué dans le message #19.
(ce qui normalement est déjà le cas, non ?)
https://www.excel-downloads.com/threads/resolu-recherche-dans-dossier-et-affichage.220408/
 
Dernière édition:

alienox

XLDnaute Occasionnel
Re : Recherche dans dossier et affichage

Salut Staple,

Ok pour moi, les images s'affichent dans ma Lv, Par contre elles ne s'affiche pas lorsque je clique dessus???

MErci pour le code entier, c'est cool.

Autre chose, les images s'affichent directement, mais j'aimerai, par la suite, quelles s'affiche en fonction de la recherche de l'une ou l'autre et les deux combobox. (avec prise en compte le orthographe erroné si entrée manuelle de mots dans combo), je regarde cela car j'ai déjà, si adaptation possible, un code qui ressemble à ça.

Je ne te remercierai jamais assez pour le boulot que tu fais et que tu partages. :eek:

Merci
 

alienox

XLDnaute Occasionnel
Re : Recherche dans dossier et affichage

Re,

Et bien oui, les codes sont tel que tu me les as fourni, je viens de refaire un copier/coller, des deux; et non rien ne s"affiche..

J'ai une erreur ici :
MsgBox "ERROR: " & Err.Description, vbexclmation, "Error"
Resume EndProc

Que je transforme par :
Code:
vbexclamation

Mise à part ça, je ne vois pas
 

Staple1600

XLDnaute Barbatruc
Re : Recherche dans dossier et affichage

Re

alienox
Tu es sur que ton code VBA ressemble à ceci dans ton Userform ?
(Je viens de retester sur mon PC et cela fonctionne toujours)

NB
: Penses à adapter Chemim avec le nom du dossier que contient les images
(Désolé pour la coquille pour vbExclamation mais cela était secondaire)
Code:
Option Explicit
Const Chemin As String = "C:\Temp"

'AFFICHAGE DES IMAGES dans userform après click sur Lv1
Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
 Dim i, Image As String
   If Item <> "" Then
     Item.ForeColor = IIf(Item.ForeColor = RGB(0, 0, 255), RGB(0, 0, 0), RGB(0, 0, 255))
     For i = 1 To Item.ListSubItems.Count
       Item.ListSubItems(i).ForeColor = Item.ForeColor
     Next
   End If
  Item.Selected = 0
  Image1.Picture = LoadPicture()
  If ListView1.ListItems.Count > 0 Then
On Error Resume Next
Image = Chemin & "\" & ListView1.SelectedItem
Image1.Picture = LoadPicture(Image)
End If
End Sub

Private Sub UserForm_Initialize()
'mixage d'un code rédigé par cytop
'et du code cité dans mon fil précédent
Dim fso As Object
Dim fldr As Object
Dim Files As Object
Dim oFile As Object
Dim li As ListItem

On Error GoTo ErrHandler

'Définit les entêtes de colonnes
With ListView1
With .ColumnHeaders
.Clear 'Supprime les anciens entêtes
'Ajout des colonnes
.Add , , "Nom", 200
.Add , , "Type", 85, lvwColumnLeft
.Add , , "Taille", 75, lvwColumnRight
End With

.View = lvwReport 'affichage en mode Rapport
.Gridlines = True 'affichage d'un quadrillage
.FullRowSelect = True 'Sélection des lignes complètes
End With

Set fso = CreateObject("Scripting.FileSystemObject")
Set fldr = fso.GetFolder(Chemin)
Set Files = fldr.Files

For Each oFile In Files
Set li = ListView1.ListItems.Add(, , oFile.Name)
li.SubItems(1) = oFile.Type
li.SubItems(2) = Format$(oFile.Size, "0")
Next

EndProc:
On Error Resume Next
Set li = Nothing
Set oFile = Nothing
Set fldr = Nothing
Set fso = Nothing
Exit Sub

ErrHandler:
MsgBox "ERROR: " & Err.Description, vbExclamation, "Error"
Resume EndProc
End Sub
 
Dernière édition:

alienox

XLDnaute Occasionnel
Re : Recherche dans dossier et affichage

Re,

Oui, il y avais des erreurs??? pourtant j'ai copier coller!!!!

Voici ce que j'ai trouvé:
Code:
Const Chemin As String = "C:\Temp"
je ne l'avais pas déclaré en début de procédure

Code:
Dim i, Image As String
Dim i, oui c'était bon mais pas le reste

Donc maintenant c'est bon, ça fonctionne, mais quand je regarde les codes plus haut, ces choses n'étaient pas mentionner..enfin bref...

Petite aparté, pour info, les images s'affichent mais je n'ai qu'un bout de l'image dans la vue, mais ça je vais regardé car ça ne doit pas être bien compliqué à régulariser..

MErci monsieur
 

Staple1600

XLDnaute Barbatruc
Re : Recherche dans dossier et affichage

Re

alienox
Une lecture plus attentive du fil ou sa relecture aurait peut-être fait fonctionner les choses plus vite.
Mais c'est pas grave, car nous sommes en week-end.

Je pense avoir mis suffisamment d'exemples d'explications, de copie d'écran dans le fil.

Par contre, tu as posé peu de questions ...ce qui laissait supposer que tu comprenais les codes que je te soumettais ;)

Mais comme le dit toi même tu débutes ;)

Donc c'est logique que tout ne soit pas évident ;)

PS: Le code fonctionnait mais tu as voulu avoir le chemin en dur, et c'est là que les difficultés commencèrent ;;)
 

alienox

XLDnaute Occasionnel
Re : Recherche dans dossier et affichage

Bonjour Staple1600, et la communauté Excel,

C'est sur, mais trop d'ambiguïté, pour un débutant...et merci de m'avoir aiguillé.

Pour la compréhension, je cherche de mon côté, et c'est bon, cela évite de trop te sollicité, je pense que tu a certainement d'autres choses à faire que de résoudre des lacunes.

En tout cas, j'ai appris à mettre un chemin en dur, chose que je ne savais pas....

Revenons à nos moutons:

Taille de l'image, c'est bon j'ai trouvé c'était dans les propriétés, donc rien de bien compliqué.

Et pour la recherche via combobox, je cherche de mon côté, et revient t'exposer ce que j'ai trouvé, :rolleyes:

Bon weekend
 

alienox

XLDnaute Occasionnel
Re : Recherche dans dossier et affichage

Bonjour le forum et Staple1600,

Après revue du code, et ajout de facilités.

Je joins le nouveau fichier avec les modifs

Par contre j'ai un souci, quand je lance la recherche, il m'affiche directement dans la listview, la recherche sans même passer via combobox et la liste qui s'y trouve.

Comment faire pour le recherche débute que lorsqu'un critère est sélectionner dans le combo.

A+
 

Pièces jointes

  • Recherche dans dossier.xlsm
    31.9 KB · Affichages: 60
  • Recherche dans dossier.xlsm
    31.9 KB · Affichages: 73
  • Recherche dans dossier.xlsm
    31.9 KB · Affichages: 56

alienox

XLDnaute Occasionnel
Re : Recherche dans dossier et affichage

Bonjour Staple et le forum,

Après une recherche et un acharnement d'une semaine, de quoi se tirer les cheveux...Je reviens vers vous car j'ai encore et encore besoin de votre aide....

MErci d'avance

A+
 

Staple1600

XLDnaute Barbatruc
Re : Recherche dans dossier et affichage

Bonsoir à tous

alienox
Test OK sur mon PC. (pour le critère 1)
Je le laisse poursuivre les investigations et tests pour le reste.
Code:
Option Explicit
Option Compare Text
Const Chemin As String = "C:\Temp"

Private Sub BoutonLancer_Click()
 Dim fso As Object
 Dim fldr As Object
 Dim Files As Object
 Dim oFile As Object
 Dim li As ListItem
 Dim c As Range

 On Error GoTo ErrHandler
 'Définit les entêtes de colonnes
 With ListView1
 With .ColumnHeaders
 .Clear 'Supprime les anciens entêtes
 'Ajout des colonnes
 .Add , , "Nom", 200
 .Add , , "Type", 85, lvwColumnLeft
 .Add , , "Taille", 75, lvwColumnRight
 End With

 .View = lvwReport 'affichage en mode Rapport
 .Gridlines = True 'affichage d'un quadrillage
 .FullRowSelect = True 'Sélection des lignes complètes
 End With

 Set fso = CreateObject("Scripting.FileSystemObject")
 Set fldr = fso.GetFolder(Chemin)
 Set Files = fldr.Files

 For Each oFile In Files
 If oFile.Name Like "*" & prescriptions.Value & "*" Then
 Set li = ListView1.ListItems.Add(, , oFile.Name)
 li.SubItems(1) = oFile.Type
 li.SubItems(2) = Format$(oFile.Size, "0")
End If
 Next

EndProc:

 On Error Resume Next
 Set li = Nothing
 Set oFile = Nothing
 Set fldr = Nothing
 Set fso = Nothing

 Exit Sub

ErrHandler:

MsgBox "ERROR: " & Err.Description, vbExclamation, "Error"
Resume EndProc

End Sub

'AFFICHAGE DES IMAGES dans userform après click sur Lv1
Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
  Dim i, Image As String
    If Item <> "" Then
      Item.ForeColor = IIf(Item.ForeColor = RGB(0, 0, 255), RGB(0, 0, 0), RGB(0, 0, 255))
      For i = 1 To Item.ListSubItems.Count
        Item.ListSubItems(i).ForeColor = Item.ForeColor
      Next
    End If
   Item.Selected = 0
   Image1.Picture = LoadPicture()
   If ListView1.ListItems.Count > 0 Then
       
     On Error Resume Next
     ' Pensez à créer un dossier "\Prescriptions\" avec les photos, dans le même dossier que fichier excel
    Image = Chemin & "\" & ListView1.SelectedItem
     Image1.Picture = LoadPicture(Image)
End If
End Sub

Private Sub UserForm_Initialize()
prescriptions.List = Feuil2.Range("A1", Feuil2.[A1000].End(xlUp)).Value
End Sub
 

Discussions similaires

Réponses
5
Affichages
1 K

Statistiques des forums

Discussions
312 361
Messages
2 087 626
Membres
103 610
dernier inscrit
Guelim