Importer le nom d'un fichier dans une colonne

Résolu
dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   -  
dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'utilise ce code pour importer des infos sur des fichiers présents dans un répertoire choisi.

Je voudrais réduire la sélection à un seul fichier, et ne récupérer que son nom dans la cellule sélectionnées Cells(2, f_Name), puis l'étendre sa valeur à toute la colonne.

Je vous avoue que cela me dépasse, j'ai fait des essais en remplaçant quelques instructions, mais sans succès...

'**********************************************************************************
'   Boite de dialogue chemin d'accès au répertoire sources
'**********************************************************************************

    Dim Repertoire As FileDialog

        Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)

    Repertoire.Show
    chemin = CStr(Repertoire.SelectedItems(1))

'**********************************************************************************
'   Récupère les propriétés défies des fichiers du répertoire
'**********************************************************************************

    Dim f_Name As Integer, f_Size As Integer, f_DateCreated As Integer

        f_Name = Rows(1).Find("Nom importation", , , , xlByRows, xlPrevious).Column
        f_Size = Rows(1).Find("Taille image (Octet)", , , , xlByRows, xlPrevious).Column
        f_DateCreated = Rows(1).Find("Date de prise de vue (jj/mm/aaaa)", , , , xlByRows, xlPrevious).Column
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set Dossier = fs.GetFolder(chemin)
    Ligne = 2

    For Each F In Dossier.Files
        Cells(Ligne, f_Name) = F.NAME
        Cells(Ligne, f_Size) = F.Size
        Cells(Ligne, f_DateCreated) = F.DateCreated
        Ligne = Ligne + 1
    Next


Lo.

4 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    un petit truc au passage
    pour la date de création----> type long et non integer
    par ex: aujourd'hui donne 42166
    idem pour la taille en octet si Integer dépassement de capacité pour un classeur de maxi 32,767 Ko

    Désolé pour le reste: pas compris ce que tu désirais; je te laisse donc dans les mains de notre ami Le Pingou que je salue
    :o)

    0
    1. dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
       
      Bonjour,

      Merci pour cette correction.

      Pour préciser. Je souhaite, dans une boite de dialogue, sélectionner un fichier.
      La macro récupère son nom et colle dans toutes les cellules d'une colonne définie.
      0
  2. dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
     
    Ça avance un peu...
    J'ai déjà récupéré le nom du fichier :

    Sub Nom_Fichier_TIF()
    
        Dim Boîte_de_Dialogue As String
        Dim Chemin_Fichier 'As ?
        Dim Nom_Fichier_TIF 'As ?
    
            Boîte_de_Dialogue = Application.GetOpenFilename(FileFilter:="Fichier TIF(*.tif),*.tif", _
            Title:="Sélectionner le fichier TIFF")
    
            If Boîte_de_Dialogue = "False" Or Boîte_de_Dialogue = "Faux" Then Exit Sub ' !!! Bilingue :< Bug en anglais !!!
            
            Chemin_Fichier = Split(Boîte_de_Dialogue, "\")
            Nom_Fichier_TIF = Chemin_Fichier(UBound(Chemin_Fichier))
    
    MsgBox Nom_Fichier_TIF
    
    End Sub
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Dim Chemin_Fichier 'As ?
      Dim Nom_Fichier_TIF 'As ?
      ce sont des strings

      astuce bien pratique (si tu ne connais pas):
      tu sélectionnes une variable
      débogage
      ajouter un espion
      en parcourant la macro par F8 l'espion te donnera le type et la valeur
      0
      1. dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   > michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Merci pour l'astuce.

        Mais je n'ai pas les types que tu m'as donné...

        Watch :   : Boîte_de_Dialogue : "" : String : Module6.Nom_Fichier_TIF
        Watch : : Chemin_Fichier : Vide : Variant/Empty : Module6.Nom_Fichier_TIF
        Watch : : Nom_Fichier_TIF : Vide : Variant/Empty : Module6.Nom_Fichier_TIF
        0
  3. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    Bonjour,

    il ne faut pas déclarer Boîte_de_Dialogue en chaîne de caractère. C'est un variant.
    Du coup, tu n'as pas besoin de tester sa valeur selon la langue.

    Si tu veux déclarer Chemin_Fichier as string, il faut ajouter des () car c'est un tableau :
    Chemin_Fichier() as string


    Sinon, tu peux réduire le code :
    Sub Nom_Fichier_TIF()
    Dim Boîte_de_Dialogue 'pas "As String". c'est un variant
    Boîte_de_Dialogue = Application.GetOpenFilename(FileFilter:="Fichier TIF(*.tif),*.tif", _
    Title:="Sélectionner le fichier TIFF")
    If Boîte_de_Dialogue = False Then
    MsgBox "pas de fichier sélectionné"
    Else
    MsgBox Split(Boîte_de_Dialogue, "\")(UBound(Split(Boîte_de_Dialogue, "\")))
    End If
    End Sub


    cordialement
    0
  4. dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci JvDo pour ces conseils.

    Voici la macro complète :

    Sub Importation_Nom_Mire()
    
    '**********************************************************************************
    '   Sélectionne et récupère le nom du fichier TIFF
    '**********************************************************************************
    
        Dim Boîte_de_Dialogue As Variant
        Dim Chemin_Fichier As String
        
        Boîte_de_Dialogue = Application.GetOpenFilename(FileFilter:="Fichier TIFF(*.tif),*.tif", _
        Title:="Sélectionner le fichier TIFF")
        
        If Boîte_de_Dialogue = False Then
            Exit Sub
        Else
            Nom_Fichier_TIFF = Split(Boîte_de_Dialogue, "\")(UBound(Split(Boîte_de_Dialogue, "\")))
        End If
    
    '**********************************************************************************
    '   Copier le nom dans toute la colonne "Référence de calibration"
    '**********************************************************************************
    
        Dim Colonne_Mire, Numération, Dernière_Ligne As Long
        
            Colonne_Mire = Rows(1).Find("Référence de calibration", , , , xlByRows, xlPrevious).Column
            Dernière_Ligne = Columns(Colonne_Mire).Offset(, -1).Find("*", , , , xlByColumns, xlPrevious).Row
        
        For Numération = Dernière_Ligne To 2 Step -1
        Cells(Numération, Colonne_Mire).Select
            With ActiveCell
                ActiveCell.Value = Nom_Fichier_TIFF
            End With
        Next Numération
    
    End Sub


    Lo.
    0
    1. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
       
      Bonjour,

      C'est bien de faire profiter le forum du résultat auquel tu es parvenu.
      Beaucoup ne le font pas.

      Dernière remarque : tu peux supprimer
      Dim Chemin_Fichier As String
      dont tu ne te sers plus.

      Cordialement
      0
      1. dhaze Messages postés 113 Date d'inscription   Statut Membre Dernière intervention   > JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention  
         
        Bonjour,

        Ce forum et ces contributeurs m'ont rendu de grands services.
        Cela me semble la moindre de chose...

        Et comme je ne suis pas assez compétente pour résoudre les problèmes des autres, c'est ma façon d'y contribuer tout de même...

        Merci encore.
        Lo.
        0