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 :

Déplacer fichier dans un dossier en fonction du nom [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Déplacer fichier dans un dossier en fonction du nom
    Bonjour,

    je souhaiterais trouver une macro qui me permette de déplacer des fichiers dans un répertoire, en fonction du nom du fichier et du nom du répertoire.

    Je m'explique!
    j'ai des fichiers qui vont se nommer de la façon suivante (les 2 premiers caractères étant le département)
    01-test.xls
    01-test1.xls
    94-test.xls
    95-xls

    et j'aimerais que les fichiers soient déplacés dans le dossier de leur département
    01-test.xls -> dans le dossier '01'
    01-test1.xls -> dans le dossier '01'
    94-test.xls-> dans le dossier '94'
    95-xls-> dans le dossier '95'

    Merci de votre aide

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heuh!...
    bonjour
    voila l'exemple que je te propose

    cousu sur mesure
    il teste si le dossier existe si il existe il enregistre le fichier dedans
    si le dossier n'existe pas il le crée et enregistre le fichier dedans

    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
     
    Sub enregistrement()
      Dim chaine() As String
       chaine = Split(ActiveWorkbook.Name, ".")
     
     
       NomDossier = chaine(0)  'on recupere le nom du fichier
     MsgBox "le nom de dossier sera " & NomDossier
     
        If DossierExiste("C:\" & NomDossier) = False Then
        MkDir "C:\" & NomDossier: GoTo suite
    Else
    suite:
    ActiveWorkbook.SaveAs Filename:="c:\" & NomDossier & "\" & ActiveWorkbook.Name, _
            FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
    End If
    End Sub
     
     
    Function DossierExiste(NomDossier As String) As Boolean
        DossierExiste = Dir(NomDossier, vbSystem + vbDirectory + vbHidden) <> ""
    End Function
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci de ton aide...

    En fait, je voudrais une macro qui aille lire un dossier dans lequel se trouve tous mes fichiers Excels et qui prend les 2 premiers caractères du nom des fichiers excel et si ces 2 premiers caracteres correspondent aux deux premiers caractères d'un dossier (qui se trouve sous un autre chemin ou pas) alors il copie le fichier excel dans ce dossier.

    Tous les dossiers seront crées (1 par département). J'ai besoin d'automatiser ca car j'ai 12.000 fichiers et il y a 106 départements.

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Test ce qui suit. Les dossiers des départements devant recevoir les fichiers doivent tous être dans un même dossier, le dossier de destination :
    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
    39
    40
     
    Sub Deplacer()
     
        'Attention, les dossiers des départements doivent tous être
        'dans le même dossier, le dossier de destination. Adapter
        DeplacerFichiers "D:\DossierOrigine\", "D:\DossierDestination\"
     
    End Sub
     
    Private Sub DeplacerFichiers(DosFichiers As String, _
                                 DosDestination As String)
     
        Dim Fso As Object
        Dim Dos As Object
        Dim Fichier As Object
     
        'crée l'objet FileSystemObject
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        'vérifie que les deux dossiers existe bien sur le disque
        If Fso.FolderExists(DosFichiers) = False Then Exit Sub
        If Fso.FolderExists(DosDestination) = False Then Exit Sub
     
        'récupère la collection des fichiers
        'dans le dossier d'origine
        Set Dos = Fso.GetFolder(DosFichiers)
     
            'parcour la collection en recherchant dans le dossier de destination
            'le dossier correspondant au numéro du département du fichier
            'si le dossier existe, le fichier est déplacé
            For Each Fichier In Dos.Files
     
                If Fso.FolderExists(DosDestination & Left(Fichier.Name, 2)) = True Then
                    Fso.MoveFile DosFichiers & Fichier.Name, _
                                 DosDestination & Left(Fichier.Name, 2) & "\" & Fichier.Name
                End If
     
            Next Fichier
     
    End Sub
    Hervé.

    Oups,

    J'ai oublié de gérer les n° de départements, 2 ou 3 chiffres, donc je reposte :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    Private Sub DeplacerFichiers(DosFichiers As String, _
                                 DosDestination As String)
     
        Dim Fso As Object
        Dim Dos As Object
        Dim Fichier As Object
        Dim I As Integer
     
        'crée l'objet FileSystemObject
        Set Fso = CreateObject("Scripting.FileSystemObject")
     
        'vérifie que les deux dossiers existe bien sur le disque
        If Fso.FolderExists(DosFichiers) = False Then Exit Sub
        If Fso.FolderExists(DosDestination) = False Then Exit Sub
     
        'récupère la collection des fichiers
        'dans le dossier d'origine
        Set Dos = Fso.GetFolder(DosFichiers)
     
            'parcour la collection en recherchant dans le dossier de destination
            'le dossier correspondant au numéro du département du fichier
            'si le dossier existe, le fichier est déplacé
            For Each Fichier In Dos.Files
     
                'département à 2 ou 3 chiffres
                If InStr("0123456789", Mid(Fichier.Name, 3, 1)) <> 0 Then
     
                    I = 3
     
                Else
     
                    I = 2
     
                End If
     
                'départements à 2 chiffres
                If Fso.FolderExists(DosDestination & Left(Fichier.Name, I)) = True Then
     
                    Fso.MoveFile DosFichiers & Fichier.Name, _
                                 DosDestination & Left(Fichier.Name, I) & "\" & Fichier.Name
     
                End If
     
            Next Fichier
     
    End Sub

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci Theze, c'est parfait , c'est exactement ça qu'il me fallait

    J'ai une autre petite question, sans vouloir trop abusé de ton temps,

    Une fois les fichiers placés dans leur dossier par département, j'ai de nouveaux un dispatch à faire des fichiers dans des sous dossiers (nom d'une personne, 1 à 8 caracteres) de chaque dossier par déparatement,

    Je pensais adapter ta macro mais je ne sais pas comment en fait, car il faut que je puisse lire chaque dossier par dept (et les fichiers contenus) et les placer dans le sous dossier de la personne concerné, et cela pour chaque departement

    exemple

    01-Dupont.xls ->01->Dupont
    01-Jean.xls ->01->Jean
    01-Jean_2.xls ->01->Jean
    68-Eric.xls->68->Eric

    Merci d'avance pour ton aide

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour


    il ne faudrais pas oublier que personne n'est ici pour faire le travail d'un autre

    donc si tu veux que l'on t'aide commence dabord par écrire quelques lignes de codes et on t'aidera a le corriger
    mais en aucun cas on fera le travail a ta place


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Bonjour patricktoulon,

    En effet jsuis d'accord avec toi, ce n'est pas ce que je demande qu'on fasse le travail à ma place, mais pour tout avouer je ne suis pas très calé en vb, j'ai réussi à faire quelques macros qui restaient très simples!

    Et sur cette histoire de lire dans les dossier, etc, je coince, de plus il me manque les connaissances des instructions, etc...

    Donc c'est pour cela que je demandais de l'aide car là je suis vraiment coincé!

    Désolé si cela a été mal pris!!

  8. #8
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Teste ce qui suit.
    La proc parcour les dossiers (01, 02, 03, etc...) du dossier de destination et ensuite parcour la collection de fichiers de ces dossiers (fichiers qui ont été déplacés avec l'autre proc). Pour chaque fichier, si le dossier portant le nom du fichier existe alors le fichier est déplacé dedans sinon, le dossier est créé et le fichier est ensuite placé dedans. Dis moi si ça te va ?
    Les fichiers doivent être nommés comme tu l'a indiqué "01-Jean.xls" avec un tiret du 6 :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Sub ReDeplacer()
     
        ReDeplacerFichiers "D:\DossierDestination\"
     
    End Sub
     
    Sub ReDeplacerFichiers(DosDestination As String)
     
        Dim TblDossiers
        Dim Fso As Object
        Dim D As Object
        Dim Dos As Object
        Dim Dossier As Object
        Dim Fichier As Object
        Dim NouvDos As Object
     
        Set Fso = CreateObject("Scripting.FileSystemObject")
        If Fso.FolderExists(DosDestination) = False Then Exit Sub
     
        Set Dos = Fso.GetFolder(DosDestination)
     
        'parcour la collection de dossiers du dossier de destination
        For Each Dossier In Dos.SubFolders
     
            'parcour la collection de fichiers du dossier en cours
             For Each Fichier In Dossier.Files
     
                'si le dossier portant le nom du fichier existe, le fichier est déplacé dans ce dossier
                'sinon, le dossier est créé et le fichier est ensuite placé dedans
                If Fso.FolderExists(Dossier & "\" & Mid(Fichier.Name, InStrRev(Fichier.Name, "-") + 1, Len(Fichier.Name) - InStrRev(Fichier.Name, "-") - 4)) = True Then
     
                    Fso.MoveFile Fichier, _
                                 Dossier & "\" & Mid(Fichier.Name, InStrRev(Fichier.Name, "-") + 1, Len(Fichier.Name) - InStrRev(Fichier.Name, "-") - 4) & "\" & Fichier.Name
     
                Else
     
                    Set NouvDos = Fso.CreateFolder(Dossier & "\" & Mid(Fichier.Name, InStrRev(Fichier.Name, "-") + 1, Len(Fichier.Name) - InStrRev(Fichier.Name, "-") - 4))
     
                    Fso.MoveFile Fichier, _
                                 NouvDos & "\" & Fichier.Name
                End If
     
            Next Fichier
     
        Next Dossier
     
    End Sub
    Hervé.

    Bonjour,

    J'ai oublié de prendre en compte que les classeurs peuvent être des .xlsx ou autres au lieu de .xls, donc (j'ai viré 2 variables inutiles) :
    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
    39
    40
    41
    42
    43
    44
    45
     
    Sub ReDeplacerFichiers(DosDestination As String)
     
        Dim Fso As Object
        Dim Dos As Object
        Dim Dossier As Object
        Dim Fichier As Object
        Dim NouvDos As Object
        Dim Pos1 As Integer
        Dim Pos2 As Integer
     
        Set Fso = CreateObject("Scripting.FileSystemObject")
        If Fso.FolderExists(DosDestination) = False Then Exit Sub
     
        Set Dos = Fso.GetFolder(DosDestination)
     
        'parcour la collection de dossiers du dossier de destination
        For Each Dossier In Dos.SubFolders
     
            'parcour la collection de fichiers du dossier en cours
             For Each Fichier In Dossier.Files
     
                Pos1 = InStrRev(Fichier.Name, "-")
                Pos2 = InStrRev(Fichier.Name, ".")
     
                'si le dossier portant le nom du fichier existe, le fichier est déplacé dans ce dossier
                'sinon, le dossier est créé et le fichier est ensuite placé dedans
                If Fso.FolderExists(Dossier & "\" & Mid(Fichier.Name, Pos1 + 1, Pos2 - Pos1 - 1)) = True Then
     
                    Fso.MoveFile Fichier, _
                                 Dossier & "\" & Mid(Fichier.Name, Pos1 + 1, Pos2 - Pos1 - 1) & "\" & Fichier.Name
     
                Else
     
                    Set NouvDos = Fso.CreateFolder(Dossier & "\" & Mid(Fichier.Name, Pos1 + 1, Pos2 - Pos1 - 1))
     
                    Fso.MoveFile Fichier, _
                                 NouvDos & "\" & Fichier.Name
                End If
     
            Next Fichier
     
        Next Dossier
     
    End Sub
    Hervé.

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Grand merci
    Tout est dans le titre de mon message Merci encore Hervé!

    Je pense que je vais pouvoir m'en sortir maintenant grâce à ton aide

  10. #10
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour asengs,

    Merci du retour. Si tu bute sur quelque chose, reviens on cherchera ensemble.

    Hervé.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/08/2012, 13h20
  2. accéder à des fichiers dans un dossier sans connaitre leurs noms
    Par mkachekh dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 29/03/2010, 13h27
  3. [Upload] upload de fichier dans un dossier creer en ligne
    Par jeanfrancois dans le forum Langage
    Réponses: 1
    Dernier message: 20/03/2006, 14h09
  4. Réponses: 7
    Dernier message: 05/01/2006, 01h06
  5. Pb de comptage de fichiers dans un dossier
    Par oz80 dans le forum Access
    Réponses: 2
    Dernier message: 15/11/2005, 14h26

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