Pour récupérer la même cellule dans plusieurs tableaux d’inventaire, exportez chaque tableau au format CSV, puis lancez un raccourci du Finder qui lit cette position et crée un aperçu. Ce guide récupère B3, conserve le nom de chaque fichier source et refuse d’écraser un résultat existant.

Choisir les bons fichiers avant de créer le raccourci

Ce processus s’adresse aux personnes qui gèrent plusieurs tableaux d’inventaire de même structure et souhaitent obtenir une ligne par tableau dans un aperçu distinct. L’exemple utilise trois fichiers temporaires contenant des quantités fictives. Chaque fichier représente un tableau exporté ; la cellule recherchée se trouve en colonne B, ligne 3, en comptant la ligne d’en-tête.

Distinguez bien trois éléments : le document de tableur, le tableau qu’il contient et le fichier CSV exporté. La documentation de Numbers d’Apple permet d’exporter les tableaux au format CSV dans des fichiers séparés ou de les combiner. Pour cette tâche, choisissez des fichiers séparés : la combinaison des tableaux peut modifier la position de l’enregistrement recherché. Les fichiers CSV contiennent les valeurs des cellules ; l’aperçu obtenu est donc un instantané. Exporter vers d’autres formats de fichier dans Numbers sur Mac.

Le raccourci ci-dessous confie l’extraction à un petit programme Python. Il ne traite pas un document Numbers ou un classeur Excel comme du texte brut et ne suppose pas que le fait d’accepter un fichier de tableur donne accès à ses cellules. Apple explique comment examiner les entrées acceptées et les sorties produites par une action dans son panneau d’informations. Consultez ce panneau pour vérifier les actions disponibles sur votre Mac. Parcourir la liste des actions dans Raccourcis sur Mac.

Consultez ce tableau de décision avant de commencer :

Point de départ Préparation pour ce processus
Un tableau de même structure dans chaque document Numbers Exportez chaque tableau au format CSV.
Plusieurs tableaux de même structure dans un document Exportez des fichiers CSV séparés et identifiez les tableaux concernés.
Fichiers CSV existants délimités par des virgules Vérifiez leur encodage, leur structure et la position recherchée.
Structures différentes ou lignes d’inventaire variables Commencez par uniformiser les exemples temporaires ; une coordonnée fixe ne suffit pas à identifier la quantité recherchée.

Pour l’exemple, chaque fichier source doit contenir Counted units dans A3 et la valeur recherchée dans B3. Vérifier l’étiquette adjacente fournit un diagnostic utile : si la ligne est décalée, l’exécution s’arrête au lieu de récupérer silencieusement une valeur sans rapport. Cela ne permet pas de détecter toutes les erreurs de structure possibles ; vérifiez donc les deux cellules lors de la préparation des fichiers.

Préparer les fichiers d’inventaire temporaires

Python 3 doit être installé séparément pour cet exemple. Avec l’installateur standard disponible sur le site Web de Python, les liens vers les exécutables sont placés dans /usr/local/bin/. Les commandes ci-dessous utilisent explicitement /usr/local/bin/python3, sans dépendre du chemin de recherche de commandes du raccourci. Suivez les instructions d’installation de la version de Python prise en charge, puis vérifiez que cette commande fonctionne. Utiliser Python sur macOS.

/usr/local/bin/python3 --version

Si ce chemin n’existe pas, terminez l’installation de Python avant de continuer. Le programme utilise uniquement la bibliothèque standard de Python ; aucun paquet supplémentaire n’est nécessaire. Le guide du Terminal d’Apple explique que les commandes peuvent être lancées en indiquant le chemin complet de l’exécutable, suivi de ses arguments. Exécuter des commandes et utiliser des outils dans Terminal sur Mac.

Pour créer les fichiers d’exemple, collez cette commande complète dans Terminal. Elle crée le dossier Inventory Demo sur votre bureau et s’arrête si ce dossier existe déjà. Utilisez un nouveau dossier temporaire plutôt que de fusionner ces exemples avec un dossier existant.

/usr/local/bin/python3 - <<'PY'
import csv
from pathlib import Path

root = Path.home() / "Desktop" / "Inventory Demo"
root.mkdir()
examples = [
    ("Birch", "A", "12"),
    ("Cedar", "B", "7"),
    ("Maple", "C", "0"),
]
for name, bin_name, count in examples:
    with (root / f"{name}.csv").open(
        "x", encoding="utf-8", newline=""
    ) as handle:
        csv.writer(handle).writerows([
            ["Item", "Value"],
            ["Bin", bin_name],
            ["Counted units", count],
        ])
print(root)
PY

Pour tester séparément l’étape d’export depuis Numbers, ouvrez un fichier CSV temporaire dans Numbers et exportez-le vers un autre dossier temporaire à l’aide de Fichier > Exporter vers > CSV. Choisissez un fichier par tableau, laissez Inclure les noms des tableaux désactivé et utilisez l’encodage UTF-8. Examinez le tableau exporté pour confirmer que A3 et B3 contiennent toujours l’étiquette et la valeur recherchées. Apple documente ces options d’exportation. Réglages d’exportation de Numbers.

Ne remplacez pas l’exportation d’un tableur en renommant son extension en .csv. Ce programme attend du texte réellement délimité par des virgules. Pour la suite du guide, gardez ensemble les trois fichiers CSV synthétiques d’origine.

Créer le programme qui génère l’aperçu

Enregistrez le programme complet ci-dessous sous le nom overview.py dans Inventory Demo, à l’aide d’un éditeur de texte brut. Vérifiez que le nom de fichier se termine par .py, et non par .py.txt. Le programme accepte les chemins des fichiers sources comme arguments, lit B3 et crée overview.csv dans leur dossier commun.

import csv
import io
import sys
from pathlib import Path

ROW, COLUMN = 2, 1  # Zero-based: B3
LABEL = "Counted units"

def build_overview(arguments):
    if not arguments:
        raise ValueError("Select at least one source CSV.")
    paths = [Path(name).expanduser().resolve(strict=True)
             for name in arguments]
    if len(set(paths)) != len(paths):
        raise ValueError("The same source was supplied twice.")
    if len({path.parent for path in paths}) != 1:
        raise ValueError("Keep all source CSVs in one folder.")
    rows = []
    for path in sorted(paths, key=lambda p: p.name):
        if (not path.is_file() or path.suffix.lower() != ".csv"
                or path.name.casefold() == "overview.csv"):
            raise ValueError(f"Not a source CSV: {path.name}")
        with path.open(encoding="utf-8-sig", newline="") as handle:
            records = list(csv.reader(handle, strict=True))
        if len(records) <= ROW or len(records[ROW]) <= COLUMN:
            raise ValueError(f"{path.name}: B3 does not exist.")
        if records[ROW][0] != LABEL:
            raise ValueError(f"{path.name}: A3 must be {LABEL!r}.")
        value = records[ROW][COLUMN]
        status = "blank" if value.strip() == "" else "present"
        rows.append([path.name, "B3", value, status])
    buffer = io.StringIO(newline="")
    writer = csv.writer(buffer)
    writer.writerow(["Source file", "Cell", "Value", "Status"])
    writer.writerows(rows)
    return paths[0].parent / "overview.csv", buffer.getvalue()

def main(arguments):
    try:
        destination, content = build_overview(arguments)
        with destination.open("x", encoding="utf-8", newline="") as handle:
            handle.write(content)
    except (OSError, ValueError, csv.Error) as error:
        print(f"Stopped: {error}", file=sys.stderr)
        return 1
    print(f"Created: {destination}")
    return 0

if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))

Le programme utilise un analyseur CSV au lieu de découper le texte aux virgules ou aux sauts de ligne. Le lecteur Python renvoie les champs sous forme de chaînes, et sa documentation indique qu’il faut ouvrir les fichiers CSV avec newline="". Cela permet de traiter les champs entre guillemets qui contiennent des virgules ou des sauts de ligne. Le programme conserve la valeur extraite sans l’additionner ni la convertir en nombre. Lecture et écriture de fichiers CSV.

Plusieurs limites délibérées facilitent la vérification du résultat. Chaque fichier d’entrée doit exister, tous les chemins sources résolus doivent se trouver dans un même dossier et les chemins résolus en double sont rejetés. Le programme trie les fichiers par nom plutôt que de se fier à l’ordre de sélection dans le Finder. Il rejette aussi tout fichier d’entrée nommé overview.csv, afin d’éviter d’inclure accidentellement le résultat précédent.

Toutes les sources sont lues et vérifiées avant le début de la création du fichier de sortie. Si B3 est absent ou si l’étiquette dans A3 est inattendue, l’exécution s’arrête. Si B3 existe mais est vide, la ligne porte la mention blank ; une valeur égale à 0 reste 0 et porte la mention present. Ainsi, une cellule absente, une cellule vide et un compte égal à zéro produisent des résultats différents.

Le fichier de sortie est créé en mode exclusif, "x". La documentation de Python précise que ce mode échoue si la destination existe déjà. Le programme ne remplace donc pas l’aperçu précédent et ne crée pas de nom de fichier numéroté. Une erreur pendant l’écriture peut toutefois laisser un nouveau fichier incomplet ; si une erreur d’écriture survient, examinez tout fichier créé avant de réessayer. Modes d’ouverture des fichiers en Python.

Relier le programme à un raccourci du Finder

Créez un raccourci nommé Inventory Overview dans Raccourcis. Ouvrez ses Détails, activez Utiliser comme action rapide et sélectionnez Finder. Dans la configuration des entrées, gardez Fichiers activé et désactivez les types de contenu sans rapport. Apple documente la disponibilité des raccourcis dans le Finder lorsqu’ils acceptent des fichiers ou des dossiers, ainsi que les commandes permettant de limiter les entrées acceptées. Exécuter un raccourci pendant l’utilisation de votre Mac, Limiter les entrées d’un raccourci.

Réglez le comportement en l’absence d’entrée sur Arrêter et répondre, avec un message comme Sélectionnez les fichiers CSV sources dans le Finder. Cela évite qu’une sélection vide entraîne une exécution ambiguë. Apple décrit cette option et le champ de réponse dans son guide sur la configuration des entrées. Choisir la réponse en l’absence d’entrée.

Ajoutez l’action Exécuter un script Shell. Réglez Shell sur /bin/zsh, reliez son Entrée à Entrée du raccourci et réglez Transmettre l’entrée sur en tant qu’arguments. Remplacez l’exemple de script par cette commande complète :

/usr/local/bin/python3 "$HOME/Desktop/Inventory Demo/overview.py" "$@"

Gardez les guillemets. L’expression entre guillemets "$@" transmet séparément les arguments reçus et préserve ainsi les noms de fichiers contenant des espaces. Le chemin du script est également entre guillemets pour la même raison. Le manuel de zsh documente les paramètres positionnels et l’expansion séparée des éléments d’un tableau entre guillemets ; le guide du Terminal d’Apple explique aussi comment encadrer les chemins entre guillemets. Paramètres, Indiquer des fichiers et des dossiers dans Terminal.

Si Raccourcis exige l’activation des scripts, choisissez Raccourcis > Réglages > Avancé, puis sélectionnez Autoriser l’exécution de scripts. Apple documente ce réglage dans les instructions permettant d’autoriser l’exécution de scripts depuis un raccourci. Réglages avancés de Raccourcis.

Le processus configuré est le suivant : les objets fichier sélectionnés sont transmis au raccourci, leurs chemins deviennent des arguments du script Shell, puis Python lit ces fichiers et écrit l’aperçu. Le résultat textuel de l’action Shell en cas de réussite est un message Created: contenant le chemin de destination. Ce message n’est pas le fichier CSV lui-même. Aucune action d’enregistrement supplémentaire n’est nécessaire puisque le programme a déjà créé le fichier.

Dans le Finder, sélectionnez uniquement Birch.csv, Cedar.csv et Maple.csv. Cliquez sur la sélection en maintenant la touche Contrôle enfoncée et choisissez Actions rapides > Inventory Overview. Si le raccourci est absent, utilisez Plus > Personnaliser pour examiner les extensions du Finder activées, puis vérifiez à nouveau les types d’entrées acceptés. Apple documente la personnalisation des actions rapides du Finder et l’ajout de raccourcis à ce menu. Effectuer des actions rapides dans le Finder sur Mac.

Vérifier le résultat et gérer les exécutions répétées

Ouvrez overview.csv dans le dossier de démonstration avec Numbers. Avec les fichiers synthétiques fournis, son contenu doit être le suivant :

Source file,Cell,Value,Status
Birch.csv,B3,12,present
Cedar.csv,B3,7,present
Maple.csv,B3,0,present

Vérifiez que chaque source sélectionnée correspond à une ligne de sortie et que les noms des fichiers désignent les tableaux attendus. Les valeurs de l’exemple sont fictives et ne correspondent pas à des résultats d’inventaire mesurés. Le programme indique si une valeur est présente ; il ne vérifie pas qu’il s’agit d’un compte valide.

Suivez cette séquence de diagnostic si le résultat diffère :

  1. Raccourci absent du Finder : vérifiez le réglage Finder, l’entrée Fichiers acceptée et l’extension activée.
  2. Exécutable ou script introuvable : vérifiez le chemin de Python et assurez-vous que overview.py se trouve toujours dans le dossier de démonstration indiqué.
  3. B3 absent ou A3 incorrect : examinez les enregistrements exportés de la source et les options d’exportation avant de modifier le programme.
  4. Valeur vide inattendue : examinez B3 ; le programme laisse volontairement les valeurs vides telles quelles.
  5. La destination existe déjà : renommez l’aperçu temporaire précédent ou déplacez-le hors du dossier source avant de réessayer.

Vous pouvez aussi lancer le même raccourci depuis Terminal pour vérifier le cheminement des entrées. Apple documente -i pour transmettre des fichiers en entrée ; transmettre un chemin par un tube envoie du texte. Utilisez les fichiers explicites ci-dessous, sans option de sortie, car la création du fichier de sortie est gérée par le programme Python. La même règle de conflit de nom s’applique. Exécuter des raccourcis depuis la ligne de commande.

shortcuts run "Inventory Overview" -i \
  "$HOME/Desktop/Inventory Demo/Birch.csv" \
  "$HOME/Desktop/Inventory Demo/Cedar.csv" \
  "$HOME/Desktop/Inventory Demo/Maple.csv"

Chaque nouvel aperçu correspond aux fichiers CSV sélectionnés pour cette exécution. Toute modification d’un tableur nécessite une nouvelle exportation et une nouvelle exécution. En conservant les noms des fichiers sources, en vérifiant l’étiquette adjacente et en distinguant les valeurs vides de zéro, vous pourrez vérifier plus facilement ce petit aperçu avant de l’utiliser lors de votre prochain bilan d’inventaire.

Sources