# Automator renommer depuis xls



## François P (16 Février 2022)

Salut à tous.

Je désirerais renommer des milliers de fichiers sons car il sont inutilisables tel quel:






J'ai un doc excel qui possède les informations que j'aimerais ajouter aux fichiers .wav





En prenant comme exemple le premier son, je souhaiterais qu'il soit renommer ainsi :
"ADDING MACHINE      ANTIQUE: SINGLE BUTTON, OFFICE, CALCULATOR.wav"

Je suis une buse totale en script donc il me faudrait une solution automator ou quelque chose de simple à mettre en place.
Merci beaucoup


----------



## zeltron54 (16 Février 2022)

Bonjour,

Je vois au moins 2 raisons pour que cela ne fonctionne pas !
1 - Tu as plusieurs fois le même nom (ligne 1,2,3 puis ligne 4,5,6,7)
2 - Il ne peut pas y avoir de : (deux points) dans un nom de fichier.


----------



## François P (16 Février 2022)

zeltron54 a dit:


> Bonjour,
> 
> Je vois au moins 2 raisons pour que cela ne fonctionne pas !
> 1 - Tu as plusieurs fois le même nom (ligne 1,2,3 puis ligne 4,5,6,7)
> 2 - Il ne peut pas y avoir de : (deux points) dans un nom de fichier.


Salut. 
Merci pour votre réponse. Concernant le : ce n'est pas un problème car ce n'est pas essentiel. 
Pour le premier point, ne peut-il y avoir une automation qui permette de rajouter 1,2,3...derrière les occurences identiques ?


----------



## zeltron54 (17 Février 2022)

Bonjour,

Pour faire cela …

Les prérequis à confirmer
1 - Les fichiers à renommer se trouvent tous dans un même dossier (pas de sous-dossier) ?
2 - Le nom des fichiers sont en colonne “B” du fichier excel ? A partir de la ligne 1 ?
3 - Le nouveau nom des fichiers sont en colonne “D” du fichier excel ?
4 - Il n’y a pas de ligne vide dans le fichiers Excel ? (le traitement s’arrête à la première cellule vide de la colonne “B”)

Si ces 4 conditions sont remplies, on pourra faire un script…
-Le script crée un dossier “Nouveau nom” sur le bureau qui contiendra les fichiers avec le nouveau nom.
-Le script crée un dossier “Les renommes” sur le bureau qui contiendra les fichiers originaux qui ont été renommés. (possibilité si problème de revenir en arrière)

Eventuellement il crée un fichier “les erreurs.txt” sur le bureau qui contient le nom des fichiers de la liste qui n’ont pas été trouvés dans le dossier des originaux.
Il restera donc dans le dossier original les éventuels fichiers qui n’ont pas été traités, (qui n’étaient pas dans la liste voir une erreur dans le nom).

-Le nouveau nom sera traité pour remplacer les “:” deux points par un “.” point, supprimer les espace en début et fin de nom ainsi que supprimer les espaces à l’intérieur du nom s’il y en a plusieurs consécutifs.
il ajoutera un numéro au nouveau nom si celui ci existe déjà.

Après confirmation des prérequis et si le processus te convient, je pourrai essayer de te faire le script.


----------



## François P (17 Février 2022)

zeltron54 a dit:


> Bonjour,
> 
> Pour faire cela …
> 
> ...


Salut et merci de prendre le temps de me répondre.
Pour les prérequis, c'est ok. 
Dois-je te donner le chemin exact du dossier et du fichier excel ou je les pointerai via automator?
Concernant les ":" et les espaces consécutifs, si il était possible de les remplacer par espace tiret espace, ce serait le summum de la perfection. Ce qui donnerai un truc dans le genre:
ADDING MACHINE - ANTIQUE - SINGLE BUTTON, OFFICE, CALCULATOR

Pour le détail du script et la création de dossier, je me repose entièrement sur toi


----------



## zeltron54 (17 Février 2022)

Bonjour,
un essai !
pour utiliser le script
Ouvrir l’application “Editeur de script” qui est dans Application—>Utilitaires
Choisir le bouton en bas à gauche “Nouveau document”, dans la fenêtre qui s’ouvre faire un copier-coller du script.
Cliquer sur le bouton en haut à gauche “Exécuter”

Le script te demande de choisir le dossier à traiter...
puis il te demande de choisir le fichier excel de la liste

Il crée sur le bureau 1 dossier "Nouveau nom" qui recevra les fichiers renommés
Il crée sur le bureau 1 dossier "Les renommes" qui recevra les fichiers traités originaux

Attendre que le script te prévienne qu’il à terminé.
A la fin
le dossier original contient les fichiers non traités (pas dans la liste excel)
le dossier "Nouveau nom" contient les fichiers renommés
le dossier "Les renommes" contient les fichiers originaux qui ont été traité
Si une erreur à eut  lieu il y a un fichier “les erreurs.txt” qui est créé sur le bureau qui contient une ligne par erreurs rencontrée.(fichiers de la liste non trouvés dans le dossier otiginal)

Dis moi si c'est bon !


```
tell application "Finder"
    set cheminsource to choose folder with prompt "Sélectionnez le dossier contenant les fichiers à renommer"
    set laliste to choose file with prompt "Sélectionnez le fichier Excel contenant la liste"
    make new folder at (path to desktop folder) with properties {name:"Nouveau nom"}
    make new folder at (path to desktop folder) with properties {name:"Les renommes"}
   
    set dossiersource to cheminsource as string
    set laliste to laliste as string
    set lesrenommes to (path to desktop folder) & "Les renommes" as string
    set nouveaunom to (path to desktop folder) & "Nouveau nom" as string
   
    tell application "Microsoft Excel"
        open laliste -- ouvre le fichier
        select sheet 1 -- sélectionne la feuille contenant les cellules à copier quitte si erreur plus de feuille
        set ligne to 1
        repeat
            set lacasenom to "B" & ligne
            set lacasenew to "D" & ligne
            set lavaleur1 to value of range lacasenom --cellule à copier
            set lavaleur2 to value of range lacasenew --cellule à copier
            if lavaleur1 is "" then
                exit repeat
            else
                tell application "Finder" --traitement
                    set lefichier to dossiersource & lavaleur1
                    if not (exists lefichier) then
                        set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
                        write "Le fichier : " & lavaleur1 & " de la ligne : " & ligne & " n'existe pas" & return to lelog starting at eof
                        close access lelog
                    else
                       
                        set AppleScript's text item delimiters to "."
                        set lextension to (last text item of lavaleur1) as string
                        set AppleScript's text item delimiters to ""
                       
                        set new to lavaleur2
                        set lesblancs to count character in new
                        repeat --supprime espace fin
                            if character lesblancs of new is not " " then
                                exit repeat
                            end if
                            set new to text 1 thru (lesblancs - 1) of new
                            set lesblancs to count characters in new
                        end repeat
                        repeat --supprime espace debut
                            if character 1 of new is not " " then
                                exit repeat
                            end if
                            set new to text 2 thru lesblancs of new
                            set lesblancs to count characters in new
                        end repeat
                       
                        set nb to count characters of new
                       
                        repeat with i from 1 to nb --remplace : par " "
                            if item i of new is ":" then
                                set a1 to text items 1 thru (i - 1) of new & " "
                                set a2 to text items (i + 1) thru -1 of new
                                set new to a1 & a2 as string
                            end if
                        end repeat
                       
                        set i to 1
                        repeat
                            if character i of new is " " then --suprime les blancs qui se suivent et met " - "
                                if character (i + 1) of new is " " then
                                    set j to i
                                    set nbblanc to 2
                                    repeat
                                        if character (j + nbblanc) of new is " " then
                                            set nbblanc to nbblanc + 1
                                        else
                                            exit repeat
                                        end if
                                    end repeat
                                    set new to text 1 thru (i - 1) of new & " - " & text (i + nbblanc) thru nb of new
                                    set nb to nb - (nbblanc - 3)
                                    set i to i - 1
                                end if
                            end if
                            set i to i + 1
                            if i = nb then exit repeat
                        end repeat
                       
                        -- nouveau nom est new
                       
                        duplicate lefichier to nouveaunom -- duplique le fichier pour le renommer
                        move lefichier to lesrenommes -- déplace le fichier il a été traité
                        set chemin to nouveaunom & ":" & lavaleur1 as alias
                       
                        --verifier si nom existe pour numéro
                        set lenew to nouveaunom & ":" & new & "." & lextension
                        repeat
                            if (exists lenew) then
                                set aa to last character of new
                                try
                                    set aa to aa as number
                                on error
                                    set aa to 0
                                    set new to text 1 thru -1 of new & aa
                                end try
                                set numero to aa + 1
                                set new to text 1 thru -2 of new & numero
                                set lenew to nouveaunom & ":" & new & "." & lextension
                            else
                                exit repeat
                            end if
                        end repeat
                       
                        set name of chemin to new & "." & lextension --renomme le fichier
                    end if
                   
                   
                end tell -- fin traitement
            end if --cellule vide
            set ligne to ligne + 1
        end repeat -- ligne suivante
    end tell
   
   
   
end tell
tell application "Finder"
    activate
    (display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
```


----------



## zeltron54 (17 Février 2022)

Bonsoir,

J'y pense, si tu veux tester sur quelques fichiers tu insères une ligne blanche dans ton fichier excel, le script fera les première lignes et s'arrêtera à cette ligne blanche.

Pour recommencer  de zéro, il suffit de remettre les fichiers du dossier "les renommes" dans le dossier original, et d'effacer les 2 dossiers qui ont créés sur le bureau plus éventuellement le fichier "Les erreurs.txt" ...

Lorsque le script est terminé, il affiche une boite de dialogue et attend une validation, si on tarde trop à valider il met une erreur "event système", rien de grave...

Bon tests !


----------



## François P (19 Février 2022)

zeltron54 a dit:


> Bonsoir,
> 
> J'y pense, si tu veux tester sur quelques fichiers tu insères une ligne blanche dans ton fichier excel, le script fera les première lignes et s'arrêtera à cette ligne blanche.
> 
> ...


Salut et encore merci. Je suis désolé d'avoir mis autant de temps à répondre mais l'ami covid vient de me rendre visite et il est pas du genre sympa. Je vais tester ça dès que possible. Merci +++


----------

