assembler des fichiers pdf à partir d'une base excel

DEMUYNCK

Membre confirmé
26 Mai 2023
71
1
57
Bonjour à tous,
Je recherche un script qui me permettrait d'assembler des pdfs dans divers dossiers en fonction de plusieurs colonnes dans excel.
exemple dans mon fichier excel j'ai une colonne A1 nommée "id" avec des 6 chiffres 995822 ce chiffre correspond au nom du pdf dans un dossier (995822.pdf)
il faudrait assembler l'ensemble de la colonne ID dans un dossier. Le nouveau dossier doit être nommé par le contenue de la colonne E "material" et compléter le nom du pdf 995822_carton10mm (colonne E) 1000 (colonneF)2620(colonneG)1ex(colonne I)

Pouvez-vous m'aider :)
 
Bonjour,
Je n’ai pas encore les connaissances suffisantes pour donner un script, mais dans un premier temps peux-tu confirmer ce que j’ai cru comprendre de ton objectif.
  • Tous tes pdf sont dans un premier dossier dont le nom importe peu
  • Les noms initiaux de ces pdf sont formés de 6 lettres, et répertoriés dans la colonne À de ton fichier Excel
  • Pour chaque pdf répertorié, tu veux :
- le renommer par concaténation du contenu de divers champs situés sur la même ligne​
- prendre un champ particulier de la ligne pour, s’il n’existe pas déjà, créer un nouveau répertoire portant le nom contenu dans ce champ​
- répéter tout cela jusqu’à avoir passé en revue toutes les données de la première colonne​
Je joins une image de ce que je comprends ci-dessous, en précisant donc que dans cet extrait, sur les 4 pdf qui porteraient les noms listés en dernière colonne, les deux surlignés iraient dans le répertoire "Carton10mm" et les deux autres dans "Visde5mm" ?​
Question subsidiaire : que doivent devenir les pdf originaux ?​
IMG_3726.jpeg
 
Bonjour à tous,
Je recherche un script qui me permettrait d'assembler des pdfs dans divers dossiers en fonction de plusieurs colonnes dans excel.
exemple dans mon fichier excel j'ai une colonne A1 nommée "id" avec des 6 chiffres 995822 ce chiffre correspond au nom du pdf dans un dossier (995822.pdf)
il faudrait assembler l'ensemble de la colonne ID dans un dossier. Le nouveau dossier doit être nommé par le contenue de la colonne E "material" et compléter le nom du pdf 995822_carton10mm (colonne E) 1000 (colonneF)2620(colonneG)1ex(colonne I)

Pouvez-vous m'aider :) ci-joint une image de la structure
 

Fichiers joints

  • arbo_30mai2023.jpg
    arbo_30mai2023.jpg
    104,2 KB · Affichages: 18
Monterey est actuellement en 12.6.5 ;)
dupont_dupond.jpg



C'est déjà 12.6.6.
 
Bonjour,
@DEMUYNCK
C'est réalisable avec un applescript, mais cela va être très long !
Il faudrait connaître le volume à traiter (nombre de lignes de ton fichier excel) pour voir si c'est envisageable, avec un applescript, surtout avec des fichiers a chercher et a déplacer depuis des serveurs.
 
Bonjour,

Je t’ai fait un petit applescript pour tester.

Pour son utilisation:

1 -créer un dossier pour la réception des dossiers et fichiers.
2 - ouvrir le fichier excel, faire un essai avec un fichier excel d’une centaine de ligne pour s’assurer que tout fonctionne comme tu veux. Le fichier doit resté ouvert.


3 - préparer le script pour cela :
Ouvrir Editeur de script qui se trouve dans Application—>Utilitaires
Clic sur le bouton “Nouveau document” en bas à gauche
Dans la fenêtre qui s’ouvre faire un copier coller du script.
Cliquer sur exécuter en haut à gauche

Le script te demande de sélectionner le dossier pour recevoir les résultats (dossier créer juste avant)
Puis il te demande de sélectionner le premier dossier dans lequel sera effectué la recherche
Puis il te demande de sélectionner le deuxième dossier dans lequel sera effectué la recherche

Il fait le job en faisant des copies des fichiers trouvés et les renomment (fait des copies plutôt que de déplacer afin de préserver l’original et la possibilité de revenir en arrière si besoin)
Il commence à la ligne 2 du fichier excel et s’arrête à la première cellule vide de la colonne A.

S’il trouve des erreurs, il crée sur le bureau un fichier erreurs .txt contenant les erreurs rencontrées, une erreur par ligne, avec numéro de la ligne excel puis le nombre de fichier trouvé en 1ere et en 2ième recherche (ceci pour les fichiers non trouvés et pour fichiers trouvés en plusieurs exemplaires)

A la fin il te met un message terminé.

J'attends ton retour !

Bloc de code:
tell application "Finder"
    set resultat to choose folder with prompt "Sélectionner le dossier pour les resultats"
    set pdf1 to choose folder with prompt "Sélectionner le premier dossier pour la recherche"
    set pdf1 to pdf1 as string
    set pdf1 to quoted form of POSIX path of pdf1 as string
    set pdf2 to choose folder with prompt "Sélectionner le deuxième dossier pour la recherche"
    set pdf2 to pdf2 as string
    set pdf2 to quoted form of POSIX path of pdf2 as string
    
    set laligne to 1
    set drapeau to 0
    repeat
        set liste1 to ""
        set liste2 to ""
        set nb1 to 0
        set nb2 to 0
        tell application "Microsoft Excel"
            activate
            --«event coreslct» sheet "Feuil1"
            set lefichier to value of range ("a" & laligne)
            set materiel to value of range ("b" & laligne)
            set largeur to value of range ("d" & laligne)
            set hauteur to value of range ("e" & laligne)
            set recto to value of range ("i" & laligne)
            set QT to value of range ("m" & laligne)
        end tell
        if lefichier is "" then
            exit repeat
        end if
        
        set lenom to lefichier & "_" & materiel & "_" & largeur & "_" & hauteur & "_" & recto & "_" & QT & "ex"
        
        --Cherche le fichier
        set aa to pdf1
        set commande to "find  " & aa & " -name " & "'" & lefichier & ".pdf" & "'"
        try
            set liste1 to do shell script commande
        on error
            set liste1 to ""
        end try
        
        set AppleScript's text item delimiters to {return}
        set nb1 to count text item of liste1
        
        set aa to pdf2
        set commande to "find  " & aa & " -name " & "'" & lefichier & ".pdf" & "'"
        try
            set liste2 to do shell script commande
        on error
            set liste2 to ""
        end try
        set nb2 to count text item of liste2
        
        if nb1 + nb2 = 0 or nb1 + nb2 > 1 then
            set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
            write "A la ligne : " & laligne & " dans PDF 1 = " & nb1 & "fichier trouvé.  et dans PDF2 = " & nb2 & " fichier trouvé" & return to lelog starting at eof
            close access lelog
            set drapeau to 1
        end if
        
        if nb1 = 1 then
            set liste to liste1
        else
            set liste to liste2
        end if
        if drapeau = 0 then
            
            tell application "Finder"
                set lechemin to text item 1 of liste
                set lechemin to lechemin as string
                set resultat to resultat as string
                set a to (resultat & materiel)
                
                if not (exists a) then
                    make new folder at resultat with properties {name:materiel}
                end if
                
                set a to quoted form of POSIX path of a
                set lechemin to quoted form of POSIX path of lechemin
                do shell script "cp " & lechemin & " " & a
                
                set anciennom to resultat & materiel & ":" & lefichier & ".pdf"
                set anciennom to quoted form of POSIX path of anciennom
                set nouveaunom to resultat & materiel & ":" & lenom & ".pdf"
                set nouveaunom to quoted form of POSIX path of nouveaunom
                set commande to "mv " & anciennom & " " & nouveaunom
                do shell script commande
            end tell
        end if
        set drapeau to 0
        set laligne to laligne + 1
    end repeat
end tell

tell application "Finder"
    activate
    display dialog "termine"
end tell
 
Oups !
Erreur, le script commence à la ligne 1 de la colonne À, pour changer modifier la 9 ième ligne du script:
Bloc de code:
set laligne to 1
par
Bloc de code:
set laligne to 2
 
Je viens de faire des essais chez un ami qui possède un serveur, les temps d'accès et de recherche sont très, très, très long !!!

Si je lance la recherche sur l'ordinateur, pas de problème !
peut être faudrait ' il déplacer les fichiers ?
A voir chez toi!
 
Dernière édition:
Bonjour,
Suite au problème de lenteur, je t'ai fait un autre script qui, à la place de faire une recherche sur le serveur à chaque fichier, crée sur le bureau la liste des fichiers des serveurs et fait la recherche dans ce fichier texte.
donc pour utiliser , comme le précédent:
1 -créer un dossier pour la réception des dossiers et fichiers.
2 - ouvrir le fichier excel, faire un essai avec un fichier excel d’une centaine de ligne pour s’assurer que tout fonctionne comme tu veux. Le fichier doit resté ouvert.


3 - préparer le script pour cela :
Ouvrir Editeur de script qui se trouve dans Application—>Utilitaires
Clic sur le bouton “Nouveau document” en bas à gauche
Dans la fenêtre qui s’ouvre faire un copier coller du script.
Cliquer sur exécuter en haut à gauche

Le script te demande de sélectionner le dossier pour recevoir les résultats (dossier créer juste avant)
Puis il te demande de sélectionner le premier dossier dans lequel sera effectué la recherche
Puis il te demande de sélectionner le deuxième dossier dans lequel sera effectué la recherche

J'attends ton retour .

Bloc de code:
tell application "Finder"
    set resultat to choose folder with prompt "Sélectionner le dossier pour les resultats"
    set pdf1 to choose folder with prompt "Sélectionner le premier fichier pour la recherche"
    set pdf1 to pdf1 as string
    set pdf1 to quoted form of POSIX path of pdf1 as string
    set pdf2 to choose folder with prompt "Sélectionner le deuxième dossier pour la recherche"
    set pdf2 to pdf2 as string
    set pdf2 to quoted form of POSIX path of pdf2 as string
    set bureau to POSIX path of (path to desktop folder as text)
    
    set commande to "find " & pdf1 & " -name '*.pdf' > " & bureau & "liste.txt"
    do shell script commande
    set commande to "find " & pdf2 & " -name '*.pdf' > " & bureau & "liste1.txt"
    do shell script commande
    
    set commande to "cat " & bureau & "liste1.txt >> " & bureau & "liste.txt"
    do shell script commande
    
    do shell script "rm " & bureau & "liste1.txt"
    
    set laligne to 2
    set drapeau to 0
    repeat
        set liste1 to ""
        set liste2 to ""
        set nb1 to 0
        set nb2 to 0
        tell application "Microsoft Excel"
            activate
            set lefichier to value of range ("a" & laligne)
            set materiel to value of range ("b" & laligne)
            set largeur to value of range ("d" & laligne)
            set hauteur to value of range ("e" & laligne)
            set recto to value of range ("i" & laligne)
            set QT to value of range ("m" & laligne)
        end tell
        if lefichier is "" then
            exit repeat
        end if
        
        set lenom to lefichier & "_" & materiel & "_" & largeur & "_" & hauteur & "_" & recto & "_" & QT & "ex"
        
        --Cherche le fichier
        set commande to "grep " & lefichier & "  " & bureau & "liste.txt"
        try
            set liste1 to do shell script commande
        on error
            set liste1 to ""
        end try
        
        set AppleScript's text item delimiters to {return}
        set nb1 to count text item of liste1
        
        if nb1 = 0 or nb1 > 1 then
            set lelog to open for access ((path to desktop folder as text) & "les erreurs.txt") as text with write permission
            write "A la ligne : " & laligne & " dans liste = " & nb1 & "fichier trouvé. " & return to lelog starting at eof
            close access lelog
            set drapeau to 1
        end if
        
        if nb1 = 1 then
            set liste to liste1
        end if
        if drapeau = 0 then
            
            tell application "Finder"
                set lechemin to text item 1 of liste
                set lechemin to lechemin as string
                set resultat to resultat as string
                set a to (resultat & materiel)
                
                if not (exists a) then
                    make new folder at resultat with properties {name:materiel}
                end if
                
                set a to quoted form of POSIX path of a
                set lechemin to quoted form of POSIX path of lechemin
                
                do shell script "cp " & lechemin & " " & a
                
                set anciennom to resultat & materiel & ":" & lefichier & ".pdf"
                set anciennom to quoted form of POSIX path of anciennom
                set nouveaunom to resultat & materiel & ":" & lenom & ".pdf"
                set nouveaunom to quoted form of POSIX path of nouveaunom
                set commande to "mv " & anciennom & " " & nouveaunom
                do shell script commande
            end tell
        end if
        set drapeau to 0
        set laligne to laligne + 1
    end repeat
end tell

tell application "Finder"
    do shell script "rm " & bureau & "liste.txt"
    activate
    display dialog "terminé"
end tell
 
J'ai repris le premier script il fonction super merci beaucoup
est il possible d'avoir le nom de la colonne C pour les dossiers ex double cannelure
 
Bonjour,

Curieux, chez moi cela fonctionne !

Et que dis le fichier erreur ?
Il liste les erreurs (1 par ligne), et il donne le numéro de la ligne du fichier excel et le nombre de fichiers pdf trouvés dans les 2 dossiers choisis pour la recherche.
 
est il possible d'avoir le nom de la colonne C pour les dossiers ex double cannelure
Pourtant les dossiers créés dans le dossier des résultats portent bien le nom du contenu de la colonne C ?

Sinon j'ai pas compris ta demande !

Edit: le dernier script sera beaucoup plus rapide que le premier car il ne fait la recherche dans les serveurs qu'une seule fois, vérifie si tu as bien fait le choix des dossiers !
je viens de retester chez moi tout est OK !
 
Avec le premier script le fichier erreurs :
A la ligne : 2 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 59 fichier trouvé
A la ligne : 3 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 90 fichier trouvé
A la ligne : 4 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 22 fichier trouvé
A la ligne : 5 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 99 fichier trouvé
A la ligne : 6 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 77 fichier trouvé
A la ligne : 7 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 108 fichier trouvé
A la ligne : 8 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 70 fichier trouvé
A la ligne : 9 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 32 fichier trouvé
A la ligne : 10 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 47 fichier trouvé
A la ligne : 11 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 62 fichier trouvé
A la ligne : 12 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 34 fichier trouvé
A la ligne : 13 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 34 fichier trouvé
A la ligne : 14 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 26 fichier trouvé
A la ligne : 15 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 32 fichier trouvé
A la ligne : 16 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 28 fichier trouvé
A la ligne : 20 dans PDF 1 = 0fichier trouvé. et dans PDF2 = 4 fichier trouvé
il m'assemble 3 lignes sur 20 la 17,18,19
 
D'après les erreurs , dans le dossier de ton choix 2 , il trouve plus que 1 fichier avec ce nom, donc il ne peut pas copier le fichier, il ne sait pas lequel !
Je précise, que lors de la recherche il cherche dans le dossier ET ses sous-dossier...
 
es-tu partie de ce fichier excel :
idnamematerialwidthheightbrandsunitpriceaccessoryrectoversonbsheetNbre R/Vsurface m2qtytotal surface m2lien vignette PClien vignette Mac
787553DECATHLON OCCASIONS SECONDE VIE HABILLAGE BOIS 960.00 X 2620.00 FR_FR IDCOM2U787553Bâche PVC Star-Flex SFB-10 SWP M1 Riou9602620"CONCEPT"26.1AucunRecto112.51523280.4864\\IMPRESSION\impression\vignettedecathlon/787553.pdf../../../Volumes/impression/vignettedecathlon/787553.pdf