Aide création AppleScript

Peux-tu essayer ce script
au lancement il te demande de sélectionner le fichier
C'est pour vérifier s'il s'agit bien d'un problème de chemin
Bloc de code:
tell application "Finder"
    set chemin to choose file with prompt "Sélectionnez le fichier a traiter"
    set extension hidden of chemin to true
    set mondoc to displayed name of chemin
    set extension hidden of chemin to false
end tell

--créer une nouvelle feuille
tell application "Numbers"
    activate
    open chemin
    tell document mondoc
        make new sheet
        tell active sheet
            delete every table
            set thesheet to make new table with properties {row count:2, column count:8}
        end tell
    end tell
    tell the first table of sheet 2 of document mondoc
        remove column 1
        remove row 1
    end tell
    
    -- copier les titres de colonnes
    set colonne to {"A", "B", "C", "D", "E", "F", "G"}
    repeat with i from 1 to 7
        
        set lacolonne to item i of colonne
        
        tell the first table of sheet 1 of document mondoc
            set titre to value of cell (lacolonne & "7")
            
        end tell
        tell the first table of sheet 2 of document mondoc
            set value of cell (lacolonne & "1") to titre
        end tell
    end repeat
end tell

set laligne to 8
set laligneplus to 8
set laligneB to 2

tell application "Numbers"
    activate
    tell the first table of sheet 1 of document mondoc
        set nbligne to count row
    end tell
end tell


-- Concatenner et copier les mouvements
tell application "Numbers"
    activate
    
    repeat
        if laligne > nbligne then exit repeat
        tell the first table of sheet 1 of document mondoc
            set ladate to value of cell ("A" & laligne)
            set nature to value of cell ("B" & laligne)
            
            repeat
                set laligneplus to laligneplus + 1
                if laligneplus > nbligne then exit repeat
                set x to value of cell ("A" & laligneplus)
                
                if x is missing value then
                    set nature to nature & " " & value of cell ("B" & laligneplus)
                else
                    exit repeat
                end if
            end repeat
            set debit to value of cell ("c" & laligne)
            set credit to value of cell ("D" & laligne)
            set devise to value of cell ("E" & laligne)
            set datevaleur to value of cell ("F" & laligne)
            set libelle to value of cell ("G" & laligne)
        end tell
        
        tell the first table of sheet 2 of document mondoc
            add row below last row
            set value of cell ("A" & laligneB) to ladate
            set value of cell ("B" & laligneB) to nature
            set value of cell ("C" & laligneB) to debit
            set value of cell ("D" & laligneB) to credit
            set value of cell ("E" & laligneB) to devise
            set value of cell ("F" & laligneB) to datevaleur
            set value of cell ("G" & laligneB) to libelle
            
        end tell
        
        
        
        set laligneB to laligneB + 1
        set laligne to laligneplus
    end repeat
    
    
    tell the first table of sheet 2 of document mondoc
        set the selection range to column "C"
        set format of selection range to currency
        set the selection range to column "D"
        set format of selection range to currency
        set the selection range to column "A"
        set format of selection range to date and time
        set the selection range to column "F"
        set format of selection range to date and time
        
    end tell
end tell
 
Je ne comprend toujours pas !
Sans avoir l'erreur chez moi, il va m'être difficile de trouver ce qui pêche ....

Juste une question, après l'erreur ou en est le tableau qui devrait se construire sur la feuille 2 de numbers ?
 
Ça part toujours bien, le tableau se construit correctement jusqu'à la ligne 11 des fois 12 ou 19 c'est assez aléatoire mais il s'est rarement arrêté avant la ligne 10.
En général c'est à la fin de la construction de la ligne, dans la colonne libellé mais ça arrive aussi des fois lorsqu'il en est à la colonne débit.
Toujours à l'étape du remplissage de texte, avant de passer à l'étape de formatage des cellules.
 
Bon j'arrête pour ce soir !
je n'ai plus d'idée, pour où chercher ...
 
Bonjour,
Je continue de chercher ...

Une autre question, lorsque tu as l'erreur, peux-tu aller vérifier si dans la feuille 1 de numbers tu as bien le fichier original correct qui est rempli, vérifie bien si chaque mouvement est correct sur cette feuille .

Ce qui me surprend c'est que le script de PBell travaille exclusivement sur le fichier original, pas dans numbers, donc si il a aussi l'erreur c'est que cela provient du fichier original ! ou de ton ordi ...
 
Bonjour @zeltron54

Tout semble correct dans la feuille 1.
Je viens de lancer le dernier script qui a bloqué à la ligne 10 qui a été complètement rempli, dans la feuille 1 cette opération ne révèle rien d'anormal.
Je ferme le fichier numbers créé, je relance le script et là il est allé jusqu'à la ligne 18 intégralement rempli aussi.
Je ferme à nouveau le fichier numbers créé, je relance le script et là il est allé jusqu'à la ligne 16 toujours intégralement rempli.

Mais toujours le même message d'erreur
erreur -1728.webp
 
Bonjour,
nouvelle tentative
Bloc de code:
tell application "Finder"
    set chemin to choose file with prompt "Sélectionnez le fichier a traiter"
    set extension hidden of chemin to true
    set mondoc to displayed name of chemin
    set extension hidden of chemin to false
end tell

--créer une nouvelle feuille
tell application "Numbers"
    activate
    open chemin
    tell document mondoc
        make new sheet
        tell active sheet
            delete every table
            set thesheet to make new table with properties {row count:2, column count:8}
        end tell
    end tell
    tell the first table of sheet 2 of document mondoc
        remove column 1
        remove row 1
    end tell
    
    -- copier les titres de colonnes
    set colonne to {"A", "B", "C", "D", "E", "F", "G"}
    repeat with i from 1 to 7
        
        set lacolonne to item i of colonne
        
        tell the first table of sheet 1 of document mondoc
            set titre to value of cell (lacolonne & "7")
            
        end tell
        tell the first table of sheet 2 of document mondoc
            set value of cell (lacolonne & "1") to titre
        end tell
    end repeat
end tell

set laligne to 8
set laligneplus to 8
set laligneB to 2

tell application "Numbers"
    activate
    tell the first table of sheet 1 of document mondoc
        set nbligne to count row
    end tell
end tell


-- Concatenner et copier les mouvements
tell application "Numbers"
    activate
    
    repeat
        if laligne > nbligne then exit repeat
        tell the first table of sheet 1 of front document
            activate
            set ladate to value of cell ("A" & laligne)
            set nature to value of cell ("B" & laligne)
            
            repeat
                set laligneplus to laligneplus + 1
                if laligneplus > nbligne then exit repeat
                set x to value of cell ("A" & laligneplus)
                
                if x is missing value then
                    set nature to nature & " " & value of cell ("B" & laligneplus)
                else
                    exit repeat
                end if
            end repeat
            set debit to value of cell ("c" & laligne)
            set credit to value of cell ("D" & laligne)
            set devise to value of cell ("E" & laligne)
            set datevaleur to value of cell ("F" & laligne)
            set libelle to value of cell ("G" & laligne)
        end tell
        
        tell the first table of sheet 2 of front document
            activate
            add row below last row
            set value of cell ("A" & laligneB) to ladate
            set value of cell ("B" & laligneB) to nature
            set value of cell ("C" & laligneB) to debit
            set value of cell ("D" & laligneB) to credit
            set value of cell ("E" & laligneB) to devise
            set value of cell ("F" & laligneB) to datevaleur
            set value of cell ("G" & laligneB) to libelle
            
        end tell
        
        
        
        set laligneB to laligneB + 1
        set laligne to laligneplus
    end repeat
    
    
    tell the first table of sheet 2 of front document
        activate
        set the selection range to column "C"
        set format of selection range to currency
        set the selection range to column "D"
        set format of selection range to currency
        set the selection range to column "A"
        set format of selection range to date and time
        set the selection range to column "F"
        set format of selection range to date and time
        
    end tell
end tell
 
J’ai l’impression que c’est l’import csv qui bloque (si on part d’un fichier Numbers ça ne met pas l’erreur et Numbers semble attendre une validation du csv lors de l’import): il faut peut-être ouvrir le csv, l’enregistrer en .numbers puis embrayer sur le reste du script avec ce fichier .numbers ?
 
J'ai juste forcé la mise au premier plan du fichier numbers avant chaque lecture de données...
donc je vais pouvoir te mettre la sélection automatique du fichier dans téléchargement .

Voilà avec le nom "monfichier" sur la première ligne , tu sauras changer cela à ta convenance.

J'attends tes nouveaux tests, en espérant que ce soit bon ! je croise les doigts

Bloc de code:
set mondoc to "monfichier"
set chemin to ((path to home folder) & "downloads:" & mondoc & ".csv") as string
set chemin to chemin as alias

--créer une nouvelle feuille
tell application "Numbers"
    activate
    open chemin
    tell document mondoc
        make new sheet
        tell active sheet
            delete every table
            set thesheet to make new table with properties {row count:2, column count:8}
        end tell
    end tell
    tell the first table of sheet 2 of document mondoc
        remove column 1
        remove row 1
    end tell
   
    -- copier les titres de colonnes
    set colonne to {"A", "B", "C", "D", "E", "F", "G"}
    repeat with i from 1 to 7
       
        set lacolonne to item i of colonne
       
        tell the first table of sheet 1 of document mondoc
            set titre to value of cell (lacolonne & "7")
           
        end tell
        tell the first table of sheet 2 of document mondoc
            set value of cell (lacolonne & "1") to titre
        end tell
    end repeat
end tell

set laligne to 8
set laligneplus to 8
set laligneB to 2

tell application "Numbers"
    activate
    tell the first table of sheet 1 of document mondoc
        set nbligne to count row
    end tell
end tell


-- Concatenner et copier les mouvements
tell application "Numbers"
    activate
   
    repeat
        if laligne > nbligne then exit repeat
        tell the first table of sheet 1 of front document
            activate
            set ladate to value of cell ("A" & laligne)
            set nature to value of cell ("B" & laligne)
           
            repeat
                set laligneplus to laligneplus + 1
                if laligneplus > nbligne then exit repeat
                set x to value of cell ("A" & laligneplus)
               
                if x is missing value then
                    set nature to nature & " " & value of cell ("B" & laligneplus)
                else
                    exit repeat
                end if
            end repeat
            set debit to value of cell ("c" & laligne)
            set credit to value of cell ("D" & laligne)
            set devise to value of cell ("E" & laligne)
            set datevaleur to value of cell ("F" & laligne)
            set libelle to value of cell ("G" & laligne)
        end tell
       
        tell the first table of sheet 2 of front document
            activate
            add row below last row
            set value of cell ("A" & laligneB) to ladate
            set value of cell ("B" & laligneB) to nature
            set value of cell ("C" & laligneB) to debit
            set value of cell ("D" & laligneB) to credit
            set value of cell ("E" & laligneB) to devise
            set value of cell ("F" & laligneB) to datevaleur
            set value of cell ("G" & laligneB) to libelle
           
        end tell
       
       
       
        set laligneB to laligneB + 1
        set laligne to laligneplus
    end repeat
   
   
    tell the first table of sheet 2 of front document
        activate
        set the selection range to column "C"
        set format of selection range to currency
        set the selection range to column "D"
        set format of selection range to currency
        set the selection range to column "A"
        set format of selection range to date and time
        set the selection range to column "F"
        set format of selection range to date and time
       
    end tell
end tell
 
Je crois que tu as réussi.
Donc le problème était qu'au bout d'un moment le fichier n'était plus au premier plan et il perdait son chemin d'accès, en gros ?
En tous les cas et en espérant ne pas créer à nouveau une erreur, bravo et merci infiniment pour le temps passé à résoudre cela.
 
Content pour toi !
Il suffit de persévérer mais dur dur quand on n’ arrive pas à reproduire l’erreur.
 
Déjà très compliqué sans le fichier source, mais avec ce genre de documents sensibles il était compliqué de te le fournir.
Étrange que tu n'ai pas rencontres pas ce problème avec ton PC.

Tiens, petit casse tête plus simple je pense :yum:
 
@zeltron54 tout fonctionne bien mais je me suis aperçu de petits détails.
Peuvent-ils être réglés dans le script?
  1. Dans nature de l'opération de la feuille 2 le texte a été modifié ne le rendant pas identique à l'écriture initiale 304 est devenu 304,0. Puisque une image vaut mieux que des mots je t'ai fait une capture d'écran pour te montrer le phénomène.premier point.webp
  2. Est-il possible de faire en sorte que les colonnes débit et crédit affiche les devises avec la séparation des milliers?
Tu dois penser que je chipote mais l'explication est la suivante, j'ai besoin que cela soit exactement la même chose car le tableau dans lequel je copie-colle les résultats du scripts détecte les doublons, si l'écriture est pas identique que les relevés précédents il ne voit pas de doublons.
 
Pour le problème de la colonne "nature" c'est parce que la cellule originale ne contient qu'un nombre, donc numbers le prend comme format nombre, je regarde pour régler cela.
Pour les colonnes débit et crédit elles affichent le montant, suivant le format défini "devises", soit le nombre avec une virgule et 2 chiffres derrière la virgule. qu'appelles-tu "séparation des milliers", que voudrais-tu obtenir exactement ?
 
Pour le problème de la colonne "nature" c'est parce que la cellule originale ne contient qu'un nombre, donc numbers le prend comme format nombre, je regarde pour régler cela.
J'ai essayé et cela fonctionne mais cela ne doit pas être la meilleure solution, j'ai dit de définir la colonne B de la feuille 1 en texte.
J'ai inséré cela ligne 48:
set the selection range to column "B"
set format of selection range to text
Pour les colonnes débit et crédit elles affichent le montant, suivant le format défini "devises", soit le nombre avec une virgule et 2 chiffres derrière la virgule. qu'appelles-tu "séparation des milliers", que voudrais-tu obtenir exactement ?
Je voudrais que 1000,00 € devienne 1 000,00€. Ce qui est obtenu en en cochant cette case

Séparateur des milliers.webp
 
Pour le problème de la colonne "Nature" ton code est bon mais il faut le mettre dès l'ouverture du fichier.

Pour les séparateurs de milliers je n'ai pas trouver comment l'ajouter en format dans applescript. La seule solution que je vois est de créer un fichier modèle avec tous les formats que l'on veut et d'ouvrir ce modèle comme nouveau document et de travailler dessus en lieu et place de la feuille 2.

je te met le script qui résout le problème de la colonne "nature" et je vais regarder pour le reste la faisabilité.

Bloc de code:
set mondoc to "monfichier"
set chemin to ((path to home folder) & "downloads:" & mondoc & ".csv") as string
set chemin to chemin as alias

--créer une nouvelle feuille
tell application "Numbers"
    activate
    open chemin
    delay 1
    tell the first table of sheet 1 of front document
        activate
        set the selection range to column "B"
        set format of selection range to text
    end tell
    
    tell document mondoc
        make new sheet
        tell active sheet
            delete every table
            set thesheet to make new table with properties {row count:2, column count:8}
        end tell
    end tell
    tell the first table of sheet 2 of document mondoc
        remove column 1
        remove row 1
    end tell
    
    -- copier les titres de colonnes
    set colonne to {"A", "B", "C", "D", "E", "F", "G"}
    repeat with i from 1 to 7
        
        set lacolonne to item i of colonne
        
        tell the first table of sheet 1 of document mondoc
            set titre to value of cell (lacolonne & "7")
            
        end tell
        tell the first table of sheet 2 of document mondoc
            set value of cell (lacolonne & "1") to titre
        end tell
    end repeat
end tell

set laligne to 8
set laligneplus to 8
set laligneB to 2

tell application "Numbers"
    activate
    tell the first table of sheet 1 of document mondoc
        set nbligne to count row
    end tell
end tell


-- Concatenner et copier les mouvements
tell application "Numbers"
    activate
    
    repeat
        if laligne > nbligne then exit repeat
        tell the first table of sheet 1 of front document
            activate
            set ladate to value of cell ("A" & laligne)
            set nature to value of cell ("B" & laligne)
            
            repeat
                set laligneplus to laligneplus + 1
                if laligneplus > nbligne then exit repeat
                set x to value of cell ("A" & laligneplus)
                
                if x is missing value then
                    set nature to nature & " " & value of cell ("B" & laligneplus)
                else
                    exit repeat
                end if
            end repeat
            set debit to value of cell ("c" & laligne)
            set credit to value of cell ("D" & laligne)
            set devise to value of cell ("E" & laligne)
            set datevaleur to value of cell ("F" & laligne)
            set libelle to value of cell ("G" & laligne)
        end tell
        
        tell the first table of sheet 2 of front document
            activate
            add row below last row
            set value of cell ("A" & laligneB) to ladate
            set value of cell ("B" & laligneB) to nature
            set value of cell ("C" & laligneB) to debit
            set value of cell ("D" & laligneB) to credit
            set value of cell ("E" & laligneB) to devise
            set value of cell ("F" & laligneB) to datevaleur
            set value of cell ("G" & laligneB) to libelle
            
        end tell
        
        
        
        set laligneB to laligneB + 1
        set laligne to laligneplus
    end repeat
    
    
    tell the first table of sheet 2 of front document
        activate
        set the selection range to column "C"
        set format of selection range to currency
        set the selection range to column "D"
        set format of selection range to currency
        set the selection range to column "A"
        set format of selection range to date and time
        set the selection range to column "F"
        set format of selection range to date and time
        
    end tell
end tell
 
Pour pouvoir régler le problème de séparateur de milliers je n’ai pas trouver d’autre solution que de passer par la création d’un modèle dans numbers.

Pour faire ça :
Ouvrir numbers et préparer un document comme sur cette capture d’écran.
Formater la colonne B au format texte
Les colonnes C et D au format devise avec la case séparateur de milliers cochée
La colonne G au format texte

Enregistrer ce document sur le bureau avec le nom « Pour modèle » pour qu'il ait ce nom

Puis menu -->fichier « Enregistrer comme modèle …» puis clic sur bouton —> Ajouter à la liste des modèles valider
on peut supprimer le fichier qui est sur le bureau

Ensuite il faudra utiliser ce nouveau script

Tu devrais obtenir ce que tu veux …
A tester

Copie écran:
Capture d’écran 2025-02-11 à 17.30.32.webp
Bloc de code:
set mondoc to "monfichier"
set chemin to ((path to home folder) & "downloads:" & mondoc & ".csv") as string
set chemin to chemin as alias


tell application "Numbers"
    activate
    open chemin
    delay 1
    tell the first table of sheet 1 of front document
        activate
        set the selection range to column "B"
        set format of selection range to text
    end tell
    make new document with properties {document template:template "Pour modèle"}
end tell


set laligne to 8
set laligneplus to 8
set laligneB to 2

tell application "Numbers"
    activate
    tell the first table of sheet 1 of document mondoc
        set nbligne to count row
    end tell
end tell

-- Concatenner et copier les mouvements
tell application "Numbers"
    activate
   
    repeat
        if laligne > nbligne then exit repeat
       
        tell the first table of sheet 1 of document mondoc
            activate
            set ladate to value of cell ("A" & laligne)
            set nature to value of cell ("B" & laligne)
           
            repeat
                set laligneplus to laligneplus + 1
                if laligneplus > nbligne then exit repeat
                set x to value of cell ("A" & laligneplus)
               
                if x is missing value then
                    set nature to nature & " " & value of cell ("B" & laligneplus)
                else
                    exit repeat
                end if
            end repeat
            set debit to value of cell ("c" & laligne)
            set credit to value of cell ("D" & laligne)
            set devise to value of cell ("E" & laligne)
            set datevaleur to value of cell ("F" & laligne)
            set libelle to value of cell ("G" & laligne)
        end tell
       
       
       
        tell the first table of sheet 1 of document "sans titre"
            activate
           
            set value of cell ("A" & laligneB) to ladate
            set value of cell ("B" & laligneB) to nature
            set value of cell ("C" & laligneB) to debit
            set value of cell ("D" & laligneB) to credit
            set value of cell ("E" & laligneB) to devise
            set value of cell ("F" & laligneB) to datevaleur
            set value of cell ("G" & laligneB) to libelle
            add row below last row
        end tell
       
       
       
       
        set laligneB to laligneB + 1
        set laligne to laligneplus
    end repeat
   
    tell the first table of sheet 1 of document "sans titre"
        activate
        remove row laligneB
    end tell
   
    tell the first table of sheet 1 of document "sans titre"
        activate
        set the selection range to column "C"
        set format of selection range to currency
        set the selection range to column "D"
        set format of selection range to currency
    end tell
end tell