banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Thu 23 November 2006 12:30

tiyan34
Participant assidu
Lieu: Montpellier
Date d'inscription: 3 Mar 2006
Messages: 158

Lister les .shp

Bonjour,

Je voulais savoir si qqu'un pouvait m'aider à lister tous les fichiers shape se trouvant sur le PC que j'utilise, dans un fichier Excel par exemple, ou un fichier .txt ...
Je pense que ça doit etre faisable assez facilement en VBA pour qqu'un qui s'y connait un peu.
J'ai en fait un tri à faire sur tous les fichiers sur le PC et il y en a énormément qui trainent un peu partout, et avoir la liste sur excel serait très pratique ensuite.

Merci beaucoup, j'espere que quelqu'un pourra m'aider.

Yannick

Hors ligne

 

#2 Thu 23 November 2006 13:33

n314
Participant assidu
Date d'inscription: 6 Sep 2005
Messages: 706

Re: Lister les .shp

Bonjour,
des freeware, en besoin ponctuel,  font cela très bien en leur spécifiant l'extension à rechercher. Je pense notamment à
GWhere http://www.framasoft.net/article2106.html
CDCAT http://www.framasoft.net/article2261.html
Catfish http://www.framasoft.net/article2813.html
AACD (Archiver l'Arborescence des CDROM) http://jlved.club.fr/AACD.htm

Cordialement,
n314

edit:
"CDCAT permet aussi l’exportation du (des) catalogue(s) aux formats CSV ou HTML."
"CatFish possède également une fonction de recherche, de sauvegarde et d’exportation de l’arborescence des données au format texte."
....

Dernière modification par n314 (Fri 24 November 2006 09:50)

Hors ligne

 

#3 Thu 23 November 2006 14:36

tiyan34
Participant assidu
Lieu: Montpellier
Date d'inscription: 3 Mar 2006
Messages: 158

Re: Lister les .shp

J'ai essayé les differents logiciels mais apparemment ça ne fait pas ce que je recherche à faire...Ca cree des catalogues et on peut faire des recherches dans ces catalogues (ex : rechercher les fichiers .shp) mais on ne peut pas exporter ces "recherches", on ne peut exporter que les catalogues..
Il faudrait que je puisse avoir la liste des fichiers shape en .txt, mais seulement les fichiers shape, l'ideal serait d'avoir un fichier Excel avec 1 cellule par .shp existant sur le PC, celà est il possible? (peut etre grâce à un petit programme sous Excel?)

Merci

Hors ligne

 

#4 Fri 24 November 2006 08:14

nico-29
Participant assidu
Lieu: Brest
Date d'inscription: 2 Jun 2006
Messages: 185

Re: Lister les .shp

ce code devrait faire ce que tu veux.
copie ça dans un module VBA excel.
modifie les paramètres de l'appel à la fonction RechercheFichiers, et lance la procedure Main().

Code:

Option Explicit
Option Base 1

sub Main()
  Dim tt() as String
  Dim i as integer

  tt = RechercheFichiers("G:\Geomatique\", "*.shp", True)

  For i=1 to Ubound(tt)
    Celles(i,1)=tt(i)
  Next i

End Sub

'recherche les fichiers correpondant à critere dans rep
'sous_rep=True si on veut chercher aussi dans les sous-repertoires
'renvoie les chemins des fichiers trouvés dans un tableau
Function RechercheFichiers(rep As String, critere As String, sous_rep As Boolean) As String()

    Dim i As Integer
    Dim TabRes() As String
    
    
    With Application.FileSearch
        .NewSearch
        .LookIn = rep
        .SearchSubFolders = sous_rep
        .Filename = critere
        .MatchTextExactly = True
        '.FileType = msoFileTypeAllFiles
        If .Execute() > 0 Then
            For i = 1 To .FoundFiles.Count
                ReDim Preserve TabRes(1 To i)
                TabRes(i) = .FoundFiles(i)
            Next i
        End If
    End With

    RechercheFichiers = TabRes
    
End Function

Hors ligne

 

#5 Fri 24 November 2006 10:36

tiyan34
Participant assidu
Lieu: Montpellier
Date d'inscription: 3 Mar 2006
Messages: 158

Re: Lister les .shp

Lorsque je rentre ça sous excel j'ai un message d'erreur d'affectation de "tt" à un tableau, je suis débutant en VBA donc je ne vois pas trop d'où ça peut venir. Si qqu'un voit d'où vient le problème..?

Merci

Hors ligne

 

#6 Fri 24 November 2006 11:18

nico-29
Participant assidu
Lieu: Brest
Date d'inscription: 2 Jun 2006
Messages: 185

Re: Lister les .shp

dans la boucle for de la procedure Main(), remplacer Celles(i,1)=tt(i) par Cells(i,1)=tt(i)

C'est une erreur de frappe, désolé.

Hors ligne

 

#7 Fri 24 November 2006 11:28

tiyan34
Participant assidu
Lieu: Montpellier
Date d'inscription: 3 Mar 2006
Messages: 158

Re: Lister les .shp

je l'avais changé j'avais vu la faute de frappe mais j'ai toujours le meme message d'erreur concernant l'affectation de "tt" à un tableau

"erreur de compilation

impossible d'affecter à un tableau"

Hors ligne

 

#8 Fri 24 November 2006 12:13

nico-29
Participant assidu
Lieu: Brest
Date d'inscription: 2 Jun 2006
Messages: 185

Re: Lister les .shp

Quelle version d'excel et VB as-tu ?
ici, je teste avec excel 2000 et VB6.3, ça marche parfaitement.

sur quelle ligne il plante ?

Hors ligne

 

#9 Fri 24 November 2006 13:07

tiyan34
Participant assidu
Lieu: Montpellier
Date d'inscription: 3 Mar 2006
Messages: 158

Re: Lister les .shp

Ca plante à la ligne :

tt = RechercheFichiers("G:\Geomatique\", "*.shp", True)
(j'ai bien entendu changé le répertoire chez moi)

mais c'est peut etre à cause de la version d'excel alors, c'est possible? c'est sur excel 97, et le vba editor qui va avec...pourtant j'ai régulièrement utilisé des macros pour excel et ça marchait.. Si chez toi ça marche c'est que ça devrait venir de ma version d'excel, aïe !!..

Hors ligne

 

#10 Fri 24 November 2006 13:59

tiyan34
Participant assidu
Lieu: Montpellier
Date d'inscription: 3 Mar 2006
Messages: 158

Re: Lister les .shp

C'est bon ça marche avec une version plus récente! Merci bcp pour l'aide Nico !

Yannick

Hors ligne

 

#11 Fri 24 November 2006 16:31

Miniopterine
Participant assidu
Date d'inscription: 29 Nov 2005
Messages: 278

Re: Lister les .shp

Bonjour,

Il faut que vous utilisiez l'invit de commande DOS (programme/accessoire)
Placez vous dans le répertorie de votre choix:
D:
cd repertoire
Puis tapez
attrib /s *.shp > fichier.txt

Cela va vous fabriquez un fichier texte listant tous les shapes du répertoire. Ca place le fichier dans le répertoire pour lequel vous avez demandé la recherche.

A+

Dernière modification par Miniopterine (Wed 08 August 2007 22:57)

Hors ligne

 

#12 Fri 24 November 2006 16:32

jmz
Participant actif
Lieu: Anthon
Date d'inscription: 5 Sep 2005
Messages: 142

Re: Lister les .shp

Bonjour,

Si je peux me permettre, pourquoi faire compliqué quand on peut faire simple ? Une routine Dos peut
lister les fichiers comme tu veux faire :

-> creer un fichier "list_Shapes.txt"
-> ouvre le
-> places-y ce texte : dir *.shp /S /b>listing.txt
-> enregistre le fichier
-> change l'extension .txt en .bat
-> place le fichier .bat sur la racine de ton disque
(Csmile
-> double clic le fichier .bat

Et voilà ! Le fichier C:listing.txt contient les informations que tu cherches !!! (tu peux même écrire
1 ligne par volume (C:,D:,E: ...) pour scanner tout le pc d'un seul coup !!!

Cordialement

Julien Muraz

Hors ligne

 

#13 Fri 24 November 2006 16:34

Olivier De LA POMMERAYE
Invité

Re: Lister les .shp

Bonjour,

J'ai un bout de code VB qui fait appel à plusieurs API Win32 que voici :



Je peux vous envoyer le projet VB qui fait ça ou l'exe directement.
Actuellement les resultats sont inscrit dans une liste ce qui est difficile à récupérer, mais on doit pouvoir modifier le code pour écrire ça dans une zone de texte que l'on pourrait copier-coller dans Excel.

Option Explicit
'----------------------------------------
'------Déclarations propres aux API------
'----------------------------------------

'----------------------------------------
'------Déclarations propre au browser----
'----------------------------------------
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
Private Const MAX_PATH = 260 'Car déjà déclarée plus loin

Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As
BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal
pidList As Long, ByVal lpBuffer As String) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal
lpString1 As String, ByVal lpString2 As String) As Long

Private Type BrowseInfo
   hWndOwner      As Long
   pIDLRoot       As Long
   pszDisplayName As Long
   lpszTitle      As Long
   ulFlags        As Long
   lpfnCallback   As Long
   lParam         As Long
   iImage         As Long
End Type


'---Les constantes---
'Private Const MAX_PATH = 260 'Car déjà déclarée plus loin
Private Const INVALID_HANDLE_VALUE = -1
Private Const FILE_ATTRIBUTE_READONLY = &H1
Private Const FILE_ATTRIBUTE_HIDDEN = &H2
Private Const FILE_ATTRIBUTE_SYSTEM = &H4
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const FILE_ATTRIBUTE_ARCHIVE = &H20
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const FILE_ATTRIBUTE_TEMPORARY = &H100
Private Const FILE_ATTRIBUTE_COMPRESSED = &H800

'---Les API---
Private Declare Function FindFirstFile Lib "kernel32" Alias
"FindFirstFileA" _
         (ByVal lpFileName As String, lpFindFileData As
WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias
"FindNextFileA" _
         (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA)
As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As
Long) As Long

'---Les types---
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Type WIN32_FIND_DATA
    dwFileAttributes As Long
    ftCreationTime As FILETIME
    ftLastAccessTime As FILETIME
    ftLastWriteTime As FILETIME
    nFileSizeHigh As Long
    nFileSizeLow As Long
    dwReserved0 As Long
    dwReserved1 As Long
    cFileName As String * MAX_PATH
    cAlternate As String * 14
End Type

'----------------------------------------------
'------Déclarations propres à la fonction------
'----------------------------------------------
Private Type ListeFichier
    Fichiers() As WIN32_FIND_DATA
    Chemin() As String * MAX_PATH
    Nombre As Long
End Type


'--------------------------------------------------------
'---La fonction Rechercher : ---
'--- Cette fonction recherche tous les fichiers dans ---
'--- le répertoire spécifié et ses sous-repertoires ---
'--- Elle retourne le nombre d'occurences trouvées ---
'--------------------------------------------------------
Private Function Rechercher(Chemin As String, FichierR As String, _
        ResultatRecherche As ListeFichier) As Long
'---Déclaration des variables---
Dim lpFindFileData As WIN32_FIND_DATA
Dim hFindFile As Long
Dim lgRep As Long
Dim CheminRep As String
'---Recherche tous les fichiers demandés dans le répertoire Chemin---
hFindFile = FindFirstFile(Chemin & FichierR, lpFindFileData)
If hFindFile <> INVALID_HANDLE_VALUE Then
    Do
        ' Mémorise
        ResultatRecherche.Nombre = ResultatRecherche.Nombre + 1
        ReDim Preserve ResultatRecherche.Chemin(1 To
ResultatRecherche.Nombre)
        ReDim Preserve ResultatRecherche.Fichiers(1 To
ResultatRecherche.Nombre)
        ResultatRecherche.Chemin(ResultatRecherche.Nombre) = Chemin
        ResultatRecherche.Fichiers(ResultatRecherche.Nombre) =
lpFindFileData
        ' Initialise lpFindFileData (Variable texte uniquement)
        lpFindFileData.cAlternate = String$(14, 0)
        lpFindFileData.cFileName = String$(MAX_PATH, 0)
    Loop Until FindNextFile(hFindFile, lpFindFileData) = 0
End If
FindClose hFindFile
'---Recherche dans les sous-répertoires---
hFindFile = FindFirstFile(Chemin & "*.*", lpFindFileData)
If (hFindFile <> INVALID_HANDLE_VALUE) Then
    Do
        ' Si c'est un répertoire on continu le recherche
        If (lpFindFileData.dwFileAttributes And _
            FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
            ' Extraction du nom du répertoire
            CheminRep = Mid$(lpFindFileData.cFileName, 1, _
                        InStr(1, lpFindFileData.cFileName, Chr$(0)) - 1)
            ' Attention dans les sous-répertoire aux
            ' répertoires . et .. (Retour répertoire parent)
            If (CheminRep <> ".") And (CheminRep <> "..")
Then
                CheminRep = Chemin & CheminRep & ""
                Rechercher = Rechercher(CheminRep, FichierR,
ResultatRecherche)
            End If
        End If
    Loop Until FindNextFile(hFindFile, lpFindFileData) = 0
End If
FindClose hFindFile
'---Retourne le nombre d'occurrences trouvées---
Rechercher = ResultatRecherche.Nombre

On Error GoTo Err_Search_Handler

Exit Function
Err_Search_Handler:
MsgBox "Lecteur invalide"

End Function



Private Sub Command1_Click()
' Algorithme récursif
'---Déclaration des variables---
Dim ResultatRecherche As ListeFichier
Dim NombreOccurence As Long
Dim i

If ((Not Text1.Text = "") And (Not Text2.Text = "")) Then

Label6.Caption = ""
List1.Clear
Me.MousePointer = vbHourglass

'---Recherche de tous les fichiers *.frm sur le lecteur D:---
NombreOccurence = Rechercher(Text2.Text, Text1.Text, ResultatRecherche)
' Toutes les informations de la recherche sont dans la variables
ResultatRecherche

Label6.Caption = Str(NombreOccurence) + " fichier(s) trouvé(s)."

'Remplissage de la ListBox
Dim montexte As String
For i = 1 To ResultatRecherche.Nombre
    montexte = Trim(ResultatRecherche.Chemin(i)) &
Trim(ResultatRecherche.Fichiers(i).cFileName)
    List1.AddItem (montexte)
Next i

Me.MousePointer = vbDefault

'MsgBox NombreOccurence & " ont été trouvées (ou a été trouvé)"
& Chr(13) & _
'       "Le premier fichier trouvé est : " &
Trim$(ResultatRecherche.Chemin(1)) & _
'       Trim$(ResultatRecherche.Fichiers(1).cFileName)

Else

MsgBox "Saisir le nom du fichier et la lettre du lecteur.",
vbInformation, "Attention"

End If

End Sub

Private Sub HScroll1_Change()

End Sub




Private Sub Command2_Click()
'Opens a Treeview control that displays the directories in a computer

   Dim lpIDList As Long
   Dim sBuffer As String
   Dim szTitle As String
   Dim tBrowseInfo As BrowseInfo

   szTitle = "This is the title"
   With tBrowseInfo
      .hWndOwner = Me.hWnd
      .lpszTitle = lstrcat(szTitle, "")
      .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
   End With

   lpIDList = SHBrowseForFolder(tBrowseInfo)

   If (lpIDList) Then
      sBuffer = Space(MAX_PATH)
      SHGetPathFromIDList lpIDList, sBuffer
      sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
     
      If (Len(sBuffer) = 3) Then
        Text2 = sBuffer
      Else
        Text2 = sBuffer + ""
      End If
     
      Me.Text2.SetFocus
    End If
End Sub


Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then Command2_Click
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then Command1_Click
End Sub

 

Pied de page des forums

Powered by FluxBB