VBA Excel - Listar archivos y características

Finndelle Mensajes publicados 1 Estado Miembro -  
 liryc -
Bonjour,

Tengo una tarea que hacer para mi trabajo como estudiante en la empresa, pero como es larga, me gustaría utilizar una macro con VBA para simplificar la tarea.

De hecho, debo listar en un libro de Excel todas las presentaciones de PowerPoint (.ppt) que están en las carpetas y subcarpetas de la red (hay miles de ellas...), con el título, la ubicación (como hipervínculo si es posible), el tamaño y el número de páginas (diapositivas):
Columna A: Título
Columna B: Número de páginas
Columna C: Tamaño
Columna D: Ubicación (nombre completo y detallado, pero también como hipervínculo)

Descubrí ayer VBA y, con la ayuda de los foros, he logrado hacer esto:
______________________________________________________
Sub Importacionppt()
Dim ScanFic As Office.FileSearch
Dim NomFic As Variant
Dim Diag As String
Dim Nbr As Long
Dim I As Long
Set ScanFic = Application.FileSearch
With ScanFic
.NewSearch
.LookIn = "K:\Dept LIAISONS\DLS\Dossier LS"
.SearchSubFolders = True
.Filename = "ppt"
.MatchTextExactly = True
.FileType = msoFileTypeAllFiles
Nbr = .Execute
Diag = Format(Nbr, "0 ""archivos encontrados""")
I = 0
For Each NomFic In .FoundFiles
I = I + 1
Sheets("Feuil1").Cells(I, 1).Value = NomFic ' adapt the sheet name
Next
MsgBox Diag
End With
End Sub
______________________________________________________
En realidad, solo me muestra la lista de ubicaciones en la columna A… eso es todo, pero ya es bastante para una principiante.
He visto en la ayuda de Visual Basic que se puede agregar DocumentProperty para añadir todo lo que quiero, pero no tengo idea de cómo se escribe eso en el código… y además, para ajustar también mis solicitudes en las columnas correspondientes, ¡es realmente más de lo que puedo manejar como programadora! ;-)

Si alguien experimentado pudiera escribirme el código correspondiente, realmente me salvaría la vida. ¡De lo contrario, será a mano... más tedioso no lo puedo imaginar!
Y además, es para la semana del 11/08/08… ¡AYUDA!
¡Gracias de antemano!

Delphine

2 respuestas

  1. lucoli
     
    Hola,
    Si no es demasiado tarde o si el tema todavía le interesa, estoy dispuesta a ayudarle ya que estoy jubilada y he trabajado mucho con VBA.
    Atentamente
    0
    1. GESNOF
       
      Lo siento, no puedo ayudar con eso.
      0
    2. alain3741
       
      Bonjour,
      Me permito solicitarle, ya que encontré en un sitio que respondió a alguien sobre una macro de Excel.
      También estoy buscando una macro de Excel que permita:

      Listar los archivos de directorios y subdirectorios, y mostrar para cada archivo en una columna diferente:
      el nombre del archivo
      el camino
      el tamaño del archivo
      la fecha de creación o última modificación,
      la extensión del archivo,
      ...

      ¿Tiene algo que podría ayudarme?
      Le agradezco de antemano la atención que prestará a mi solicitud.
      SLT
      AAT
      amial@hotmail.fr
      0
      1. Polux31 Mensajes publicados 7219 Estado Miembro 1 204 > alain3741
         
        Hola,

        Un ejemplo aquí : https://www.cjoint.com/?jjqeU1YwYK

        Me inspiré en la FAQ de VB6 del sitio https://vb.developpez.com/

        ;o)
        --
        «Lo que se concibe bien se enuncia claramente, Y las palabras para decirlo llegan fácilmente.»
        Nicolas Boileau
        0
      2. amial Mensajes publicados 1 Estado Miembro > Polux31 Mensajes publicados 7219 Estado Miembro
         
        Polux31,
        Le agradezco mucho por su archivo, me ha permitido avanzar bien.
        De hecho, recuperé lo que necesitaba.

        Aproveché para agregar en la página de resultados (hoja2) una comparación condicional que me permitió colorear una fila cuando es idéntica a la de arriba o abajo (según el orden). De modo que puedo clasificar los archivos similares en los distintos directorios.

        Ahora me encuentro con un archivo que a veces tiene una o varias filas coloreadas seguidas y siempre una fila normal (no coloreada).



        ¿Tienen alguna solución para quedarse solo con las filas idénticas (coloreadas y la fila comparada no coloreada)?

        Le agradezco de antemano por su ayuda.
        SLT
        amial@hotmail.fr
        0
    3. Mike
       
      Bonjour, je suis à la recherche d'une macro qui me permettrait de récupérer la taille d'un dossier réseau en octets (peu importe), dans une cellule.

      À ce jour, j'ai trouvé cela, mais j'ai un bug et je ne sais pas pourquoi...

      Sub NombreOctetsRepertoire()
      Dim Rep As Object
      Set Rep = CreateObject("Scripting.FileSystemObject")
      Range("H3") = Rep.GetFolder("\\nom-du-serveur\").Size
      End Sub
      0
  2. liryc
     
    Bonjour,

    Soyez assuré que votre code peut effectivement être optimisé pour améliorer son efficacité lors de la recherche de fichiers. Voici quelques suggestions pour réduire le temps de traitement :

    1. **Limiter la profondeur de recherche** : Vous pouvez limiter la profondeur de recherche dans les sous-dossiers si vous n'avez pas besoin de parcourir tous les niveaux.
    2. **Utiliser des filtres dès le début** : Vous pouvez essayer de filtrer les fichiers dès que vous les trouvez au lieu de les stocker tous d'abord, puis de filtrer.
    3. **Utiliser des tableaux dynamiques** : Au lieu d'ajouter des éléments un par un, vous pourriez ajouter directement dans un tableau dynamique, puis écrire toutes les valeurs dans la feuille d'un coup à la fin.
    4. **Désactiver les mises à jour écran** : Bien que vous le fassiez déjà avec `Application.ScreenUpdating`, assurez-vous également de désactiver d'autres fonctionnalités comme `Application.Calculation` pendant l'exécution de votre script.
    5. **Utiliser des objets Collection ou Dictionnaires** : Ces structures de données peuvent être plus efficaces pour stocker et gérer des listes de fichiers.

    Voici une version modifiée de votre code intégrant certaines de ces suggestions :

    ```vba
    Option Explicit

    Sub ScanClasseursOptimise()
    Dim Dossier As Object, Fichier As Object
    Dim Chemin As String, CeFichier As String
    Dim ExtFichier As String
    Dim TabDossiers As Variant
    Dim Resultats() As Variant
    Dim L As Long, D As Long
    Dim InitSB As Boolean

    InitSB = Application.DisplayStatusBar
    Application.DisplayStatusBar = True
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    Chemin = "Z:\Mon travail\Bibliothèque\Produits intérieurs\EMH Trolleys\CH200"
    If Chemin = "" Then Exit Sub
    ThisWorkbook.Sheets("ListeDFT").Range("A2:C65536").Clear
    CeFichier = ThisWorkbook.Name
    ExtFichier = UCase(Trim(ThisWorkbook.Sheets("ListeDFT").Range("Extension").Text))

    L = 0
    TabDossiers = lstDossiers(Chemin, True)
    For D = 1 To UBound(TabDossiers)
    Chemin = TabDossiers(D)
    Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
    For Each Fichier In Dossier.Files
    If Fichier.Name <> CeFichier Then
    If ExtFichier = "" Or UCase(Right(Fichier.Name, 4)) = ".DFT" Then
    L = L + 1
    ReDim Preserve Resultats(1 To 3, 1 To L)
    Resultats(1, L) = Chemin
    Resultats(2, L) = Fichier.Name
    Resultats(3, L) = Fichier.DateCreated
    Application.StatusBar = "ligne traitée : " & L
    End If
    End If
    Next
    Next D

    ' Écrit tous les résultats d'un coup
    If L > 0 Then
    With ThisWorkbook.Sheets("ListeDFT")
    .Range("A2").Resize(L, 3).Value = Application.Transpose(Resultats)
    For i = 1 To L
    .Hyperlinks.Add Anchor:=.Cells(i + 1, 2), Address:=Resultats(1, i) & Resultats(2, i), _
    TextToDisplay:=Resultats(2, i)
    Next i
    End With
    End If

    Columns("B:B").Select
    Range("A1:C65536").Sort Key1:=Range("B1"), Order1:=xlAscending, Header:=xlGuess
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    MsgBox L & " fichiers trouvés !"
    Application.StatusBar = False
    Application.DisplayStatusBar = InitSB
    End Sub

    Private Function lstDossiers(Chemin As String, Optional Debut As Boolean) As Variant
    Dim Dossier As Object, D As Object
    Static TabTemp() As String
    If Debut Then
    ReDim TabTemp(1 To 1)
    TabTemp(1) = Chemin
    End If
    Set Dossier = CreateObject("Scripting.FileSystemObject").GetFolder(Chemin)
    For Each D In Dossier.subfolders
    ReDim Preserve TabTemp(1 To UBound(TabTemp) + 1)
    TabTemp(UBound(TabTemp)) = D.Path
    lstDossiers D.Path
    Next
    lstDossiers = TabTemp()
    Set Dossier = Nothing
    End Function
    ```

    En implémentant ces changements, vous devriez constater une amélioration significative du temps de traitement de votre script. N'hésitez pas à adapter ce code en fonction de vos besoins spécifiques.
    Merci d'avance pour vos réponses.
    0