assembler des fichiers pdf à partir d'une base excel

OK
C'est donc normal !
J'ai du mal à avoir toutes les infos!

Bon je regarde pour adapter !
 
Essai ce script et dit moi si c'est bon pour toi !

Bloc de code:
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 & " -maxdepth 1 -name '*.pdf' > " & bureau & "liste.txt"
do shell script commande
set commande to "find " & pdf2 & " -maxdepth 1 -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
    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 newnom to "_" & 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 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
    
    set liste to liste1
    
    if drapeau = 0 then
        
        repeat with i from 1 to nb1
            set lechemin to text item i of liste
            set lechemin to lechemin as string
            set resultat to resultat as string
            set a to (resultat & materiel)
            
            
            set b to (POSIX file lechemin)
            tell application "Finder"
                set b to b as alias
                set lenom to name of b
                --enlever extension
                set nomcourt to text 1 thru ((offset of "." in lenom) - 1) of lenom
            end tell
            
            tell application "Finder"
                if not (exists a) then
                    make new folder at resultat with properties {name:materiel}
                end if
            end tell
            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 & ":" & lenom
            set anciennom to quoted form of POSIX path of anciennom
            set nouveaunom to resultat & materiel & ":" & nomcourt & newnom & ".pdf"
            set nouveaunom to quoted form of POSIX path of nouveaunom
            set commande to "mv " & anciennom & " " & nouveaunom
            
            do shell script commande
        end repeat
    end if
    set drapeau to 0
    set laligne to laligne + 1
end repeat


tell application "Finder"
    do shell script "rm " & bureau & "liste.txt"
    activate
    display dialog "termine"
end tell
 
Bonsoir,

je te précise:
En cas de fichier en double (même nom), un dans le dossier de recherche 1, et un dans le dossier de recherche 2.
lors de la copie le fichier de la recherche 2 écrase le fichier de la recherche 1 donc seul sera présent dans le dossier résultat le deuxième.

Dans ce cas, que veux-tu faire ?
  • laisser comme ça
  • laisser comme ça et ajouter une ligne dans le fichier erreur
  • ajouter quelque chose au nom du deuxième et le copier (si oui ajouter quoi ? exemple: ajouter "double" à la fin du nom)

Bon tests !
 
Dernière édition:
bonjour, j'ai dû louper un truc le script ne fonctionne plus
A la ligne : 2 dans liste = 0 fichier trouvé.
A la ligne : 3 dans liste = 0 fichier trouvé.
A la ligne : 4 dans liste = 0 fichier trouvé.
A la ligne : 5 dans liste = 0 fichier trouvé.
A la ligne : 6 dans liste = 0 fichier trouvé.
A la ligne : 7 dans liste = 0 fichier trouvé.
A la ligne : 8 dans liste = 0 fichier trouvé.
A la ligne : 9 dans liste = 0 fichier trouvé.
A la ligne : 10 dans liste = 0 fichier trouvé.
A la ligne : 11 dans liste = 0 fichier trouvé.
 
Je viens de retester le dernier script que je t'ai mis, je n'ai pas de problème !

curieux !
tu es sur d'avoir sélectionné les bon dossiers?
est ce que le script va au bout, avec le message terminé, ou tu obtiens une erreur de script ?
 
il ne fonction pas ci-dessous mon fichier excel
idnamematerialwidthheightbrandsunitpriceaccessoryrectoversonbsheetNbre R/Vsurface m2qtytotal surface m2
1112198​
SEGMENTATION DANSE CLASSIQUE FILLE G3 1000.00 X 250.00 FR_FR IDCOM2U1112198Double cannelure 3mm
1000​
250​
"STAREVER"
3,98​
AucunRecto
1​
1​
0,25​
1​
0,25​
 
je ne vois pas de raison du non fonctionnement... retester chez moi c'est tout bon !

Le script commence à la ligne 2 du fichier excel, tu n'aurais pas une ligne vide au début du fichier ?

tu es sur d'avoir sélectionné les bon dossiers?
J'ai des doutes sur ça. Et vérifie quand même que les dossiers choisis ont bien des fichiers PDF avec leurs noms contenant , la valeur contenue dans le fichier excel colonne A.

Une question, lorsque le script tourne, avant qu'il arrive à la fin , est ce que tu vois un fichier "liste.txt" se créer sur le bureau ? ce fichier s'efface automatiquement a la fin de traitement.
 
Dernière édition:
non je ne vois pas de fichier "liste.txt"
recap : j'ouvre mon Excel - j'ouvre le script - j'active le script - il me demande de choisir le dossier pour le résultat - le dossier 1 pour la recherche - le dossier 2 pour la recherche - dans chaque dossier recherche j'ai les pdf avec les 7 numéros .pdf correspondant à la colone A _ un fichier erreurs.txt se crée sur mon bureau - pas de pdf dans mon dossier "resultat" :)
 
je ne comprend pas ce qui se passe chez toi...

je te met un autre script qui traite les fichiers en double, mais j'y crois pas trop !

Si cela ne fonctionne pas, il faudrait me mettre au téléchargement sur un site quelconque, le fichier excel et les 2 dossiers pour la recherche...
Si pas possible j'essaierai de faire un script test, qui sorte un fichier log avec toutes les infos du déroulement...
Bloc de code:
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 & " -maxdepth 1 -name '*.pdf' > " & bureau & "liste.txt"
do shell script commande
set commande to "find " & pdf2 & " -maxdepth 1 -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 nb1 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 newnom to "_" & 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 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
  
    set liste to liste1
  
    if drapeau = 0 then
        repeat with i from 1 to nb1
            set lechemin to text item i of liste
            set lechemin to lechemin as string
            set resultat to resultat as string
            set a to (resultat & materiel)
          
          
            set b to (POSIX file lechemin)
            tell application "Finder"
                set b to b as alias
                set lenom to name of b
                --enlever extension
                set nomcourt to text 1 thru ((offset of "." in lenom) - 1) of lenom
            end tell
          
            tell application "Finder"
                if not (exists a) then
                    make new folder at resultat with properties {name:materiel}
                end if
            end tell
            set a to quoted form of POSIX path of a
            set lechemin to quoted form of POSIX path of lechemin
          
            tell application "Finder"
                set testnom to resultat & materiel & ":" & nomcourt & newnom & ".pdf"
                if (exists testnom) then
                    --display dialog "fichier existe " & testnom
                    set newnom to newnom & "_double" ---- ajout de double --
                else
                    --display dialog "existe pas " & testnom
                end if
            end tell
          
          
            do shell script "cp " & lechemin & " " & a
          
            set anciennom to resultat & materiel & ":" & lenom
            set anciennom to quoted form of POSIX path of anciennom
            set nouveaunom to resultat & materiel & ":" & nomcourt & newnom & ".pdf"
            set nouveaunom to quoted form of POSIX path of nouveaunom
            set commande to "mv " & anciennom & " " & nouveaunom
          
            do shell script commande
        end repeat
    end if
    set drapeau to 0
    set laligne to laligne + 1
end repeat


tell application "Finder"
    do shell script "rm " & bureau & "liste.txt"
    activate
    display dialog "termine"
end tell
 
liste.txt
/Users/mac5/Desktop/dossier01//1326383.pdf
/Users/mac5/Desktop/dossier01//1336593.pdf
/Users/mac5/Desktop/dossier01//132509.pdf
/Users/mac5/Desktop/dossier01//133659.pdf
/Users/mac5/Desktop/dossier01//132622.pdf
 
liste .txt
/Users/mac5/Desktop/dossier01//1326383.pdf
/Users/mac5/Desktop/dossier01//1336593.pdf
/Users/mac5/Desktop/dossier01//132509.pdf
/Users/mac5/Desktop/dossier01//133659.pdf
/Users/mac5/Desktop/dossier01//132622.pdf
/Users/mac5/Desktop/dossier01//115720.pdf
/Users/mac5/Desktop/dossier01//132638.pdf
/Users/mac5/Desktop/dossier01//139178.pdf
/Users/mac5/Desktop/dossier01//131444.pdf
/Users/mac5/Desktop/dossier01//111219.pdf
/Users/mac5/Desktop/dossier02//1326382.pdf
/Users/mac5/Desktop/dossier02//1326383.pdf
/Users/mac5/Desktop/dossier02//1336594.pdf
 
Ceci est donc les fichiers pdf que le script à trouvé dans tes dossiers !

Est ce que ton fichier excel à bien ces même numéros an colonne A
1326383
1336593
132509
etc...
 
AH ! s'il sont à droite dans la cellule c'est que ces numéros sont entrés comme des chiffres et non comme du texte !
Le script cherche du texte pas des nombres.
il faut que la colonne A soit au format texte et que les nombres soit saisie dans ce format !
 
  • J’aime
Réactions: Sly54
Alors questions
-dans ton fichier excel réel il y aura du texte ou des nombres, sinon il faut peut être que le script fasse la transformation ?

- le dernier script ajoute donc "_double" à la fin du nom s'il le fichiers est en double ! cela te convient'il?