IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Récupérer un/des nom(s) de fichier [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 105
    Points : 62
    Points
    62
    Par défaut Récupérer un/des nom(s) de fichier
    Bonjour à toutes et à tous,
    je me retrouve coincé dans le développement de mon projet. Je dois créer une macro qui concatène des .DBF enregistrés dans un dossier.

    Le premier problème est que l'on ne connait pas leur nom.
    Le second est qu'il peut y avoir d'autres .DBF dans le dossier qu'il ne faut pas concaténer avec les premiers.

    Les fichiers à concaténer entre eux ont les 4 premières lettres de leur nom identiques.(Quand je dis que d'autres .DBF sont dans le dossier ce sont d'autres .DBF à concaténer entre eux ultérieurement, ils ont donc aussi les 4 premières lettres de leur nom fichier en commun)

    Pour être clair, nous avons 2 familles de fichier : [NOM1]*.DBF et [NOM2]*.DBF


    Il faudrait avant de concaténer, compter le nombre de fichiers portant les mêmes 4 premières lettres et si ce nombre est égal à celui passé en paramètre de la procedure alors on les concatène dans un nouveau fichier .xls dont le nom est passé en paramètre. ( le nombre de fichier necessaire pour la concaténation est le même pour les 2 familles de fichiers)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Concatener(Chemin As String,NomFicRes As String,NombreFicReq As Integer)
    Chemin indiquant le répertoire dans lequel on effectue la recherche.
    NomFicRes indiquant le nom du fichier résultant de la contènation.
    Nombre de Fichier necessaire pour faire la concatènation.

    N'hésitez pas si vous avez besoin de plus d'information.

    Cordialement Jason T.

  2. #2
    Membre confirmé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Points : 551
    Points
    551
    Par défaut
    Bonjour,

    pour parcourir un dossier, utilise la fonction "dir" (F1 pour savoir utiliser )

    Pour comparer les 4 premières lettres utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcomp("abcd", left(nom_du_fichier, 4),vbtextcompare)
    Cela devrait t'aider à commencer.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Bonjour,

    Sinon, tu peux utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub recherche()
        With Application.FileSearch
            .NewSearch
            .RefreshScopes
            .LookIn = "C:\" 'Ton répertoire
            .Filename = "*.DBF"
            .SearchSubFolders = True 'Cherche dans les sous-répertoires !
            .Execute
            For Ctr = 1 To .FoundFiles.Count
                'Tu fais ce que tu veux 
            Next
        End With
    End Sub
    Ton premier problème est donc réglé par Pour ton deuxième problème, tu le règles ici :
    'Tu fais ce que tu veux
    En gros, tu fais un Left(.FoundFiles(Ctr),4) pour obtenir les 4 premières lettres du nom de chacun de tes fichiers. Après, c'est juste une histoire de comparaison. Tu testes à chaque fois ce que ça te donne et si c'est égal aux 4 premières lettres d'autres fichiers, tu concatènes.

    Pour compter le nombre de fichiers ayant les 4 mêmes premières lettres, tu fais un test sur ces 4 premières lettres et si elles sont équivalentes à ce que tu souhaites (l'histoire de tes paramètres que je n'ai pas bien comprise) alors tu incrémentes un compteur.

    Reviens-nous voir si tu n'y arrives pas mais avec un code et quelques explications (exemples) supplémentaires sur l'histoire des paramètres.

    A+

  4. #4
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 105
    Points : 62
    Points
    62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Function Recherche(Chemin As String, NombreFicReq As Integer) As String
     
    Dim Nom1 As String, Nom2 As String, Nom3 As String
    Dim cpt As Integer, cpt2 As Integer
     
    cpt = 0
    cpt2 = 0
     
        With Application.FileSearch
            .NewSearch
            .RefreshScopes
            .LookIn = Chemin
            .Filename = "*.DBF"
            .SearchSubFolders = False
            .Execute
            For Ctr = 1 To .FoundFiles.Count
            Nom1 = Left(.FoundFiles(1), 4)
            Nom2 = Left(.FoundFiles(Ctr), 4)
            If Nom1 = Nom2 Then
            cpt = cpt + 1
            Else
            Nom3 = Nom2
            cpt2 = cpt2 + 1
            End If
            Next
     
            If x = NombreFicReq Then
            Recherche = Nom1
            Else
            If cpt2 = NombreFicReq Then
            Recherche = Nom2
            End If
            End If
        End With
     
     
     
    End Function
    Avec cette fonction, je récupère le début des noms de fichier à récupérer.
    Dans une procédure, je vais utiliser cette chaîne afin de les concaténer, puis je les supprimerai du repertoire.

    Je pense pouvoir m'en sortir maintenant, je laisse le post ouvert le temps de finir au cas où. Merci

  5. #5
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 105
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    il se trouve que je n'arrive pas à trouver quelle référence ajouter pour que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Application.FileSearch
    passe dans le code.

    Ps : Je travaille sous excel 2007 or il semble que Application.FileSearch ne soit plus implémenter dans les librairies.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Bonjour,

    Et pourquoi le titre du post est-il
    [XL-2000] Récupérer un/des nom(s) de fichier
    ?

    Ca risque pas d'aider... Surtout quand on sait que FileSearch ne marche pas sur Excel2007.

    Bref, regarde du côté de ClassFileSearch (ou un truc du genre, je sais plus exactement). Fais une recherche sur le forum, on en parle plus que nécessaire.

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour tous,
    filesearch n'est plus supporté par le 2007.
    Voir ce tuto
    Par contre, FileSystemObject fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub LireRepertoir2()
    'lire les fichiers d'un répertoir
    Dim fs, F, f1, S, sf
    Dim Ext As String, Chemin As String
        Chemin = "E:\" 'adapter au répertoir où sont situés les fichiers.
        Ext = "xls"
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set F = fs.GetFolder(Chemin)
        Set sf = F.Files
        For Each f1 In sf
            If Right(f1.Name, 3) = Ext Then 'pour être certain que c'est un bon fichier
                'ici tester le nom
                'et en faire ce que l'ont veux
            End If
        Next
    End Sub
    A+

  8. #8
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 105
    Points : 62
    Points
    62
    Par défaut
    Désolé, je n'ai pas dit que j'avais réussi à le faire en Excel 2000.
    Mon Chef m'a demandé de l'adapter sous Excel2007 pour que mon programme survive au passage VISTA.

    Donc là c'était une autre demande de ma part, désolé pour le quiproquo.

    J'ai réussi à me débrouiller avec Classefilesearch.

    Merci à tous de m'avoir consacré du temps !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/03/2013, 22h52
  2. Récupérer espace de nom d'un fichier
    Par Steph0 dans le forum Langage
    Réponses: 6
    Dernier message: 24/05/2012, 16h34
  3. Supprimer caractère des noms de plusieurs fichiers
    Par Jaymerry dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 14/10/2011, 11h54
  4. Réponses: 5
    Dernier message: 02/09/2009, 12h34
  5. modifier des nom de plusieurs fichiers
    Par Daron10 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 18/08/2009, 17h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo