Gestion fichiers et dossier depuis macro Excel (erratum) [Résolu]

Signaler
Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020
-
Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020
-
Ce post annule et remplace mon précédent post (Gestion fichiers et dossier depuis macro Excel) car je me suis trompé dans ma demande.

Bonjour à tous,

Si j'expose mon problème ici c'est que j'ai pas mal cherché avant et que je suis dans une impasse.

Voici ma demande :

J'ai un premier dossier nommé "_Rip" qui contient des fichiers musicaux au format FLAC.
Les fichiers musicaux tous stockés à la racine du dossier "_Rip" sont nommé de la sorte :

artiste - titre.flac
exemple : Yael Naїm - New Soul.flac

J'ai un second dossier nommé "_Collection" qui contient des dossiers avec les noms d'artistes, exemple :

Radiohead
The Black Eyed Peas
U2
etc.

Je voudrais que la macro du fichier Excel enregistré à la racine du dossier "_RIP" me déplace les fichiers FLAC enregistrés à la racine du dossier "_RIP" Vers le dossier "_Collection".
Exemple :

Le fichier : "Yael Naїm - New Soul.flac" situé à la racine du dossier "_RIP" devra être déplacé dans le dossier : "_Collection\Yael Naїm\"

Voilà !
Si quelqu'un à la solution, je suis preneur !

Merci à tous

Sébastien

12 réponses

Messages postés
7159
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 janvier 2021
591
Bonjour,

il faut tout d'abord boucler sur les fichiers d'un répertoire:

https://excel.developpez.com/faq/?page=FichiersDir#BoucleFichiers

ensuite intégrer à cette boucle le code pour déplacer les fichiers:

https://excel-malin.com/tutoriels/vba-tutoriels/manipulation-basique-des-fichiers-en-vba/

Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020

Merci pour ta réponse.
Je crois comprendre l'idée, je vais essayer de pondre un truc avec les infos que tu m'as données !
Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020

Bon et bien je ne sais pas comment faire...
Tu trouveras dans ce post le lien vers mon fichier Excel avec ton code qui permet de me créer l'arborescence des dossiers dans "\\DISKSTATION\music\_Collection".
J'ai intégré dans ce fichier ce bout de code :

Sub BoucleFichiers()
Dim Chemin As String, Fichier As String

'Définit le répertoire contenant les fichiers
Chemin = "\\DISKSTATION\music\_RIP\"

'Boucle sur tous les fichiers FLAC du répertoire.
Fichier = Dir(Chemin & "*.FLAC")
'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers :
'Fichier = Dir(Chemin & "*.*")

Do While Len(Fichier) > 0
'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
Debug.Print Chemin & Fichier
Fichier = Dir()
Loop
End Sub


Ensuite, je ne sais pas comment procéder.

https://www.cjoint.com/c/JLnrDptxLkY

Vu que je suis très poli ????, peux-tu m'aider STP ?
Messages postés
7159
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 janvier 2021
591
je ne peux pas créer l'arborescence, il n'y a que toi qui la connaisse!

Voici le code à adapter:

Option Explicit
Sub BoucleFichiers()
    Dim Chemin As String, Fichier As String
 Dim Destination As String
    'Définit le répertoire contenant les fichiers
    Chemin = "C:\_RIP\" 'adapter chemin
 'Définit le répertoire de destination
 Destination = "C:\_Collection\Yael Naïm\" 'adapter chemin
    'Boucle sur tous les fichiers xls du répertoire.
    Fichier = Dir(Chemin & "*.flac")
    'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers :
    'Fichier = Dir(Chemin & "*.*")
 Do While Len(Fichier) > 0
        'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
        'Debug.Print Chemin & Fichier
        Fichier = Dir()
        FileCopy Chemin & Fichier, Destination & Fichier ' copie
    Kill Chemin & Fichier 'supprime
    Loop
End Sub


@+ Le Pivert
Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020

Merci pour ta réponse.
Je vais tester ton code.
Par contre, je n'ai pas du être assez précis ou clair dans mon explication.
L'arborescence est déjà créé grâce à ton code que j'ai trouvé sur ce forum.
Ce que je voudrai, c'est simplement déplacer les fichiers FLAC d'un dossier source où ils sont tous enregistré à la racine du dossier vers un dossier destination qui contient une arborescence.

Exemple, j'ai ce fichier enregistré à la racine du dossier source :
Yael Naїm - New Soul.flac

Je voudrais qu'il soit automatiquement déplacé dans le sous dossier "Yael Naїm" du dossier destination. "Yael Naїm" est l'artiste.

Dossier source : "\\DISKSTATION\music\_RIP\"
Dossier destination :" \\DISKSTATION\music\_Collection"

Le dossier destination contient l'ensemble des sous dossiers correspondant aux noms des artistes.
Messages postés
7159
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 janvier 2021
591
L'arborescence est déjà créé grâce à ton code que j'ai trouvé sur ce forum

Quel code???
Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020

celui-ci

Sub CreationDossiers()
On Error Resume Next
i = 1
While Cells(i, 1).Value <> ""
MkDir ActiveWorkbook.Path & "\" & Cells(i, 1).Value
For j = 2 To 7
MkDir ActiveWorkbook.Path & "\" & Cells(i, 1).Value & "\" & Cells(i, j).Value
Next j
i = i + 1
Wend
End Sub
Messages postés
7159
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 janvier 2021
591
Ce code est dépendant des cellules. Il n y a que toi qui peut l adapter!
Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020

lol
Bon je pense que c'est un dialogue de sourd :) je ne dois pas être clair dans ma demande.
Je te remercie en tout de l'intérêt que tu portes à mon cas.

On va mettre de côté le code de ma précédente réponse et tout ce que tu as vu/lu plus haut.

Je vais essayer d'exposer ma demande de façon plus générique.

Soit 2 dossiers :

un dossier source
un dossier destination

Dans le dossier source il y a des fichiers en vrac à la racine de ce dossier, nommés ainsi :

artiste - titre.flac

dans le dossier destination il y a une arborescence déjà crée qui comporte l'ensemble des artistes que l'on peut trouver dans les titres de musique au format flac qu'il y a dans le dossier source.
Je voudrais déplacer les fichiers du dossier source vers un des sous dossier du dossier destination en fonction du nom de l'artiste présent à gauche du symbole "-" présent dans l'ensemble des fichiers du dossier source.

Exemple :

Le fichier "Yael Naїm - New Soul.flac" présent à la racine du dossier source devra être déplacé dans le dossier "Yael Naїm" (déjà créé) du dossier destination

Le fichier "Robbie Williams - Angels.flac" présent à la racine du dossier source devra être déplacé dans le dossier "Robbie Williams" (déjà créé) du dossier destination

etc.
Messages postés
7159
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
5 janvier 2021
591
Je ne peux pas t aider plus
Je t ai donné le code pour déplacer des fichiers d un dossier a un autre
Fais un autre post cela dépasse mes compétences
A + Le Pivert
Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020

Je te remercie beaucoup pour avoir passé du temps à essayer de comprendre ma demande.
Bonne soirée

Sébastien
Messages postés
30502
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
5 janvier 2021
7 185
Bonjour,

Je ne sais pas pourquoi tu veux faire cela sous excel ?

Moi je ferais un script windows, nommé par exemple
transfert.cmd
en changeant les 2 répertoires de traitement :
@echo off
chcp 65001> nul      &rem code page pour accents
set ORIG=\\NASINA\Temp\Musique\_Rip\
set DEST=\\NASINA\Temp\Musique\_Collection\
setlocal EnableDelayedExpansion    &rem utilisé pour gérer les variables entre ! dans boucle for
for %%F in (%ORIG%*.flac) do (
   set X=%%~nxF
   set Y=!X:* - =!
   call set Z=%%X: - !Y!=%%
   echo !X! // !Z! // !Y! 
   if not exist "%DEST%!Z!\" mkdir "%DEST%!Z!\"
   if not exist "%DEST%!Z!\!Y!" copy "%ORIG%!X!" "%DEST%!Z!\!Y!"
)



Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020

Bonsoir et merci pour ton script.
Je voulais gérer les fichiers sous Excel par soucis d'homogénéité car je génère déjà les dossiers depuis une macro.
De plus, j'ai la liste de l'ensemble de mes fichiers sous Excel.
Par soucis de simplicité, j'envisageai de tout gérer du même endroit.
Ceci dit, ton script (que je n'ai pas encore essayé semble répondre à mes attentes.
Merci d'avoir pris le temps de me répondre
Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020

je viens de tester et il ne se passe rien.

voilà le script modifié avec les bons chemins :

@echo off
chcp 65001> nul &rem code page pour accents
set ORIG=\\DISKSTATION\music\_RIP\
set DEST=\\DISKSTATION\music\_Collection\
setlocal EnableDelayedExpansion &rem utilisé pour gérer les variables entre ! dans boucle for
for %%F in (%ORIG%*.flac) do (
set X=%%~nxF
set Y=!X:* - =!
call set Z=%%X: - !Y!=%%
echo !X! // !Z! // !Y!
if not exist "%DEST%!Z!\" mkdir "%DEST%!Z!\"
if not exist "%DEST%!Z!\!Y!" copy "%ORIG%!X!" "%DEST%!Z!\!Y!"

Pour rappel les fichiers à déplacer sont nommés de la sorte :

artiste - titre.flac
exemple : Yael Naїm - New Soul.flac

Ce fichier sera à déplacer dans le dossier "Yael Naїm" du dossier de destination.
Messages postés
30502
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
5 janvier 2021
7 185
là il manque la dernière ligne avec
)


derrière rajouter une ligne avec
pause
pour conserver l'affichage.

j'ai essayé avec ton nom de fichier, tu devrais au moins avoir :
Yael Naїm - New Soul.flac // Yael Naїm // New Soul.flac
Appuyez sur une touche pour continuer...

et s'il n'existe pas déjà avant, la copie
Yael Naїm - New Soul.flac // Yael Naїm // New Soul.flac
1 fichier(s) copié(s).
Appuyez sur une touche pour continuer...
Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020

Avec ce code là, voilà ce qu'il se passe :

1/ ça ne déplace pas le fichier mais ça le copie. Il faudrait le déplacer et non le copier
2/ ça copie le fichier en ne gardant que la partie droite du "-" soit le titre
Je me retrouve avec ce fichier "New Soul.flac" dans le dossier "Yael Naїm" alors que le fichier devrait garder son nom, à savoir : "Yael Naїm - New Soul.flac"
On progresse !

Voici le code que j'ai corrigé avec tes indications

@echo off
chcp 65001> nul &rem code page pour accents
set ORIG=\\DISKSTATION\music\_RIP\
set DEST=\\DISKSTATION\music\_Collection\
setlocal EnableDelayedExpansion &rem utilisé pour gérer les variables entre ! dans boucle for
for %%F in (%ORIG%*.flac) do (
set X=%%~nxF
set Y=!X:* - =!
call set Z=%%X: - !Y!=%%
echo !X! // !Z! // !Y!
if not exist "%DEST%!Z!\" mkdir "%DEST%!Z!\"
if not exist "%DEST%!Z!\!Y!" copy "%ORIG%!X!" "%DEST%!Z!\!Y!"
)
pause


Merci une fois de plus de m'aider
Messages postés
30502
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
5 janvier 2021
7 185
C'est normal pour la copie, je suis prudent, un move avec des noms mal constitués et le fichier est perdu.

Et j'ai compris que tu ne voulais que la chanson en final, pas le nom original.

@echo off
chcp 65001> nul      &rem code page pour accents
set ORIG=\\NASINA\Temp\Musique\_Rip\
set DEST=\\NASINA\Temp\Musique\_Collection\
setlocal EnableDelayedExpansion    &rem utilisé pour gérer les variables entre ! dans boucle for
for %%F in (%ORIG%*.flac) do (
   set X=%%~nxF
   set Y=!X:* - =!
   call set Z=%%X: - !Y!=%%
   echo !X! // !Z! // !Y! 
   if not exist "%DEST%!Z!\" mkdir "%DEST%!Z!\"
   if not exist "%DEST%!Z!\!X!" move "%ORIG%!X!" "%DEST%!Z!\"
)
pause
Messages postés
11
Date d'inscription
dimanche 13 décembre 2020
Statut
Membre
Dernière intervention
13 décembre 2020

Yes !

Ca marche !

C'est génial !

Merci !