Excel : regrouper des fichiers |
Bienvenue invité ( Connexion | Inscription )
Excel : regrouper des fichiers |
3 Apr 2017, 16:08
Message
#1
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 902 Inscrit : 28 Oct 2004 Lieu : Belgium Membre no 25 982 |
Bonjour à tous,
J'utilise Excel tous les jours, et je synchronise plusieurs dossiers avec 2 autres personnes. J'ai un dossier qui contient plusieurs centaines de fichiers, dans 2 colonnes, A & B (la colonne B peut aller jusqu'à la ligne 500) Je voudrais faire un fichier ALL.xls qui regrouperait l'ensemble des fichiers, afin de pouvoir faire des recherches. Comment puis-je faire ? Merci pour votre aide, -------------------- iMac 5K iPhone 11Pro 256GB Watch SE --------\\\ /// ------ ( @ @ ) ....o00o.(_).o00o.. |
|
|
3 Apr 2017, 16:51
Message
#2
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 4 198 Inscrit : 1 Jan 2008 Lieu : Toulouse.cong Membre no 103 942 |
Dossiers, fichiers,... Sachant qu'Excel utilise des classeurs contenants des feuilles, est-ce que tu peux décrire précisément le contexte et ce que tu veux faire ?
Tel que je crois le comprendre, si tu veux faire la liste des classeurs contenus dans un dossier, il suffit d'aller dans le dossier, de tout sélectionner (Commande A), de copier (Commande C) puis d'ouvrir un classeur Excel et de coller la liste complète (Commande V). Si ça ne répond pas à ta question, merci de donner des précisions... Ce message a été modifié par Aliboron - 3 Apr 2017, 16:53. -------------------- |
|
|
3 Apr 2017, 17:49
Message
#3
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 902 Inscrit : 28 Oct 2004 Lieu : Belgium Membre no 25 982 |
Merci de te réponse, je vais t'expliquer....
J'ai donc un dossier sur mon MAC, qui s'appelle "commandes". Dans mon dossier commandes, j'ai plusieurs fichiers XLS (classeurs), qui s'appellent : commande1.xls, commande2.xls, etc. Au moins 500 classeurs. Tous ces classeurs Excel n'ont qu'une seule feuille et ont toujours la meme structure, colonne A : infos du client, date du jour, etc. ; colonne B : les numéros de série de la commande du client. Ce que je voudrais faire dans un fichier ALL.xls, c'est rassembler toutes les informations (les colonnes A & B de chaque classeur) dans ce fichier (classeur ALL.xls) afin de pouvoir recherche des données. Merci, -------------------- iMac 5K iPhone 11Pro 256GB Watch SE --------\\\ /// ------ ( @ @ ) ....o00o.(_).o00o.. |
|
|
3 Apr 2017, 23:15
Message
#4
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 4 198 Inscrit : 1 Jan 2008 Lieu : Toulouse.cong Membre no 103 942 |
Si tu veux récupérer des données dans 500 classeurs, il va te falloir passer par un peu de programmation. Soit en VBA dans Excel, soit en AppleScript ou Automator (à toi de voir en fonction de tes habitudes/goûts).
Ceci dit, si tu veux quelques éléments complémentaires, il serait peut-être temps de préciser un peu le contexte (version de Mac OS X, version et niveau de mise à jour d'Excel, par exemple)... -------------------- |
|
|
4 Apr 2017, 04:28
Message
#5
|
|
Macbidouilleur d'Or ! Groupe : Modérateurs Messages : 19 361 Inscrit : 22 Jul 2004 Lieu : Louvain-la-Neuve (Gaule Gelbique) Membre no 21 291 |
Autrement, l'affaire serait plus simple si tu avais 500 feuilles dans un classeur…
(OK, ça peut être lourd au quotidien.) -------------------- ¶ MacBook Pro 14’’ 2021, M1 Pro, 16 Go/1 To – macOS 12.6 “Monterey” ¶ MacBook Pro 15’’ mi-2010 Core i5 2,53 GHz, 8 Go/SSD Samsung 860EVO 1 To – Mac OSX 10.6.8 ¶ Power Macintosh G3 beige de bureau, rev.1 @ 233MHz, 288 Mo/4Go – MacOS 9.1 + carte PCI IDE/ATA Tempo 66 Acard 6260 avec HD interne Maxtor 80 Go + graveur interne CDRW/DVD LG GCC-4520B + tablette A4 Wacom UD-0608-A + LaCie ElectronBlueIV 19" + HP ScanJet 6100C ¶ B-Box 3 + HP LaserJet 4000 N
¶ La recherche dans MacBidouille vous paraît obscure ? J'ai rédigé une proposition de FAQ. Le moteur logiciel a un peu changé depuis mais ça peut aider quand même. … Les corsaires mettent en berne… |
|
|
4 Apr 2017, 10:03
Message
#6
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 902 Inscrit : 28 Oct 2004 Lieu : Belgium Membre no 25 982 |
Je suis sous Mac OS 10.12 sur un iMac 5K, MS Office 2011
Que ce soit en VBA, Applescript ou automator, je suis ouvert à tout... Que proposez vous ? -------------------- iMac 5K iPhone 11Pro 256GB Watch SE --------\\\ /// ------ ( @ @ ) ....o00o.(_).o00o.. |
|
|
4 Apr 2017, 10:12
Message
#7
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 4 198 Inscrit : 1 Jan 2008 Lieu : Toulouse.cong Membre no 103 942 |
Que proposez vous ? ... de t'aider. (n'inversons pas le sens des choses). Pour les macros VBA, Excel 2011 permet d'enregistrer ce qu'on fait, ce qui donne un bon début de programmation VBA (il faut évidemment y apporter pas mal de modifications quand on veut généraliser l'enregistrement se contentant "bêtement" de prendre note de ce qu'on fait, pas des intentions qu'on a). -------------------- |
|
|
4 Apr 2017, 12:17
Message
#8
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 902 Inscrit : 28 Oct 2004 Lieu : Belgium Membre no 25 982 |
J'avais trouvé ça sur un autre post, en Apple script mais sans explications de ce qu'il faudrait modifier. Et je ne pense pas que ça fonctionne encore sur Excel 2011 ou plus récent...
Code tell application "Finder" to set t_files to (document files of (choose folder) whose name starts with "feuille" and name extension is "xls") as alias list
set a to 2 tell application "Microsoft Excel" set t_book to make new workbook set name of sheet 1 to "index" repeat with i in t_files set currBook to open workbook workbook file name (i as string) with read only copy range (range "$A$2:$K$22" of sheet 1 of currBook) destination (row a of sheet "index" of t_book) close currBook saving no set a to a + 21 end repeat end tell -------------------- iMac 5K iPhone 11Pro 256GB Watch SE --------\\\ /// ------ ( @ @ ) ....o00o.(_).o00o.. |
|
|
4 Apr 2017, 14:24
Message
#9
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 5 674 Inscrit : 3 Nov 2003 Lieu : CUL (Communauté Urbaine de Lille !) Bon Appartement Chaud Membre no 11 246 |
Rien à voir, mais j'aime bien ta signature !
-------------------- iMac 27" Retina 5K 1To Fusion drive 8 Go RAM Intel Core I5 quadricœur à 3,5 GHz Mojave 10.14.6 , iMac Intel Core I5 3,1 GHz 1To (El Capitan 10.11.6 depuis le 13/9/2016) en rade carte mère !, MacBook Pro 17" 500 Go Snow Leopard, iMac G5 20" PPC Tiger 250 Go Rev A, iPhone 14 128Go OS 16.1.1 et SONY pour la photo numérique Minolta pour l'argentique Pink #FD3F92 Breton MB Attention aux huîtres, SURTOUT celles qui mangent des oiseaux ! How much wood would a woodchuck chuck if a woodchuck could chuck wood ? |
|
|
4 Apr 2017, 16:01
Message
#10
|
|
Adepte de Macbidouille Groupe : Membres Messages : 204 Inscrit : 4 Jun 2004 Lieu : Marne la Vallée Membre no 19 597 |
Bonjour.
Quelques idées qui peuvent être un autre regard... Tu veux regrouper tes tableaux dans un seul classeur pour faire tes recherches... ce qui veut dire : 1 - Soit que tes données vont exister en double, et là tu t'expose à des problème de mise à jour (dans quelle feuille mettre les nouvelles données, quelle est la dernière synchro...) 2 - Soit que toutes tes données se retrouvent dans une feuille : avec le problème de poids et de taille de la feuille... Pourquoi ne pas faire dans une feuille à part, une recherche qui va fouiller les autres feuilles une par une, sans les recopier ? Voir un exemple qui me semble assez proche : https://forum.excel-pratique.com/excel/rech...ets-t21464.html Bon courage -------------------- Guillaume
Membre du club des AIPBP (Anciens Inscrits Pas Beaucoup de Posts) Voir la liste |
|
|
5 Apr 2017, 23:29
Message
#11
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 4 198 Inscrit : 1 Jan 2008 Lieu : Toulouse.cong Membre no 103 942 |
J'avais trouvé ça sur un autre post, en Apple script mais sans explications de ce qu'il faudrait modifier. Et je ne pense pas que ça fonctionne encore sur Excel 2011 ou plus récent... Cet AppleScript fonctionne très bien dans Excel 2011 et Excel 2016 pour Mac. Il convient évidemment d'adapter la première partie en remplaçant "feuille" par quelque chose d'adapté à ton contexte (à moins que les classeurs concernés ont des noms commençant par "feuille", évidemment) ainsi que l'extension .xls puisqu'on pense bien que tes classeurs sont maintenant en .xlsx -------------------- |
|
|
11 Apr 2017, 19:22
Message
#12
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 902 Inscrit : 28 Oct 2004 Lieu : Belgium Membre no 25 982 |
J'ai simplement remplacé 2 choses dans ce script, "enco" car tous mes fichiers commencent par ENCO.
Et j'ai modifié la table a copier (pour aller jusqu'à 500) Code tell application "Finder" to set t_files to (document files of (choose folder) whose name starts with "enco" and name extension is "xls") as alias list set a to 2 tell application "Microsoft Excel" set t_book to make new workbook set name of sheet 1 to "index" repeat with i in t_files set currBook to open workbook workbook file name (i as string) with read only copy range (range "$A$2:$K$501" of sheet 1 of currBook) destination (row a of sheet "index" of t_book) close currBook saving no set a to a + 500 end repeat end tell Puis-je définir la fin du copy range à la cellule "A11" ? A11 est égal au nombre de ligne contenue dans mes encodages. Si A11 est égal à 300, le fichier ira jusqu'à la ligne L301 (300+1) Je peux également automatiser le script Apple afin qu'il se lance automatiquement chaque fin de journée (via Calendrier) Mais, serait-il possible de définir le nom du fichier contenant tous les encodages à ALL.XLS ? Et donc, d'incrémenter ce fichier ALL.XLS chaque jour ? Encore mieux, serait-il possible d'incrémenter ce fichier ALL.XLS dès qu'un nouveau fichier arrive dans le dossier des encodages (par exemple, dès qu'un nouveau fichier encoxxxx.xls arrive dans "HDD/Commandes/") ? Ce message a été modifié par b00ss - 11 Apr 2017, 19:23. -------------------- iMac 5K iPhone 11Pro 256GB Watch SE --------\\\ /// ------ ( @ @ ) ....o00o.(_).o00o.. |
|
|
12 Apr 2017, 13:51
Message
#13
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 4 198 Inscrit : 1 Jan 2008 Lieu : Toulouse.cong Membre no 103 942 |
Puis-je définir la fin du copy range à la cellule "A11" ? A11 est égal au nombre de ligne contenue dans mes encodages. Si A11 est égal à 300, le fichier ira jusqu'à la ligne L301 (300+1) Bien sûr. Il faut affecter la valeur de la cellule A11 à une variable, puis utiliser la variable dans la boucle. Quelque chose comme ceci : Code tell application "Finder" to set t_files to (document files of (choose folder) whose name starts with "Banque" and name extension is "xls") as alias list set a to 2 tell application "Microsoft Excel" set t_book to make new workbook set name of sheet 1 to "index" repeat with i in t_files set currBook to open workbook workbook file name (i as string) with read only set maVar to value of range "$A$11" as integer set maPlage to "$A$2:$K$" & maVar copy range (range maPlage) destination (row a of sheet "index" of t_book) close currBook saving no set a to a + maVar end repeat end tell Mais, serait-il possible de définir le nom du fichier contenant tous les encodages à ALL.XLS ? Oui, vu que c'est toi qui décides du nom au moment de l'enregistrement... Et donc, d'incrémenter ce fichier ALL.XLS chaque jour ? Oui, il te faut déterminer la première cellule libre dans ta feuille et coller à partir de cet emplacement et donner à la variable a la valeur de la première ligne libre au lieu de 2. Par contre, je t'engage vivement à penser sérieusement à passer au format OpenXML, et donc à ALL.XLSX. Ça ne fait jamais que dix ans que c'est le format natif d'Excel... serait-il possible d'incrémenter ce fichier ALL.XLS dès qu'un nouveau fichier arrive dans le dossier des encodages (par exemple, dès qu'un nouveau fichier encoxxxx.xls arrive dans "HDD/Commandes/") ? Puisque tu es dans les AppleScripts, regarde comment fonctionnent les "Actions de dossier" de Mac OS X. Ce message a été modifié par Aliboron - 12 Apr 2017, 14:07. -------------------- |
|
|
12 Apr 2017, 15:53
Message
#14
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 902 Inscrit : 28 Oct 2004 Lieu : Belgium Membre no 25 982 |
Super, un grand merci pour ta réponse...
D'après toi, tout est faisable, puisque tu réponds "Oui" à l'ensemble des mes questions... Après, je "sais" lire le code (ou le déchiffrer) mais je ne sais pas coder.... Donc pour faire, ces étapes, quel serait le code ? 😃 Merci, -------------------- iMac 5K iPhone 11Pro 256GB Watch SE --------\\\ /// ------ ( @ @ ) ....o00o.(_).o00o.. |
|
|
12 Apr 2017, 15:59
Message
#15
|
|
Macbidouilleur d'Or ! Groupe : Membres Messages : 4 198 Inscrit : 1 Jan 2008 Lieu : Toulouse.cong Membre no 103 942 |
Après, je "sais" lire le code (ou le déchiffrer) mais je ne sais pas coder.... Excellente occasion pour apprendre, alors. Concernant AppleScript, tu trouveras plein de choses sur le site MacScripter. Sans oublier, bien entendu ce site-ci et ce site-là qui ont le grand avantage de causer français... -------------------- |
|
|
12 Apr 2017, 19:37
Message
#16
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 902 Inscrit : 28 Oct 2004 Lieu : Belgium Membre no 25 982 |
Si je récapitule, il faudrait arriver à quelque chose comme ça...
Qui peut m'aider à transformer ce brouillon en Apple script ? Code tell application "Finder" to set ceDossier to "Macintosh HD:Utilisateurs:macbook:Bureau:TEST"
--Dis à l'application Finder, de définir le dossier TEST du bureau comme variable ceDossier on adding folder items to ceDossier after receiving itemsajoutes --Si des fichiers sont ajoutés dans ceDossier, alors exectuter le script --Comment faire, si des fichiers sont simplement modifiés ? -- Si pas, affiche -- display dialog "Aucun fichier ajoutés aujourd'hui" tell application "Finder" to set t_files to (document files of (choose folder) whose name starts with "enco" and name extension is "xlsx") as alias list --Définir la liste à executer dans le dossier set a to 2 --définir la destination finale à la première cellule libre dans ta feuille et coller à partir de cet emplacement et donner à la variable a la valeur de la première ligne libre au lieu de 2 tell application "Microsoft Excel" --set t_book to open ALL.XLSX dans dossier "Macintosh HD:Utilisateurs:macbook:Bureau:TEST" repeat with i in t_files set currBook to open workbook workbook file name (i as string) with read only set maVar to value of range "$A$11" as integer set maPlage to "$A$2:$K$" & maVar copy range (range maPlage) destination (row a of sheet "ALLenco" of t_book) close currBook saving no set a to a + maVar end repeat --fin du script de selection et de copie des cellules save --Enregistrer le fichier ALL.XLSX --Envoie d'un email pour confirmation avec le fichier en PJ :) end tell end adding folder items to -------------------- iMac 5K iPhone 11Pro 256GB Watch SE --------\\\ /// ------ ( @ @ ) ....o00o.(_).o00o.. |
|
|
12 Apr 2017, 20:26
Message
#17
|
|
Macbidouilleur de vermeil ! Groupe : Membres Messages : 902 Inscrit : 28 Oct 2004 Lieu : Belgium Membre no 25 982 |
Peut etre devrais-je déplacer ce post dans PROGRAMMATION ?
> Forums MacBidouille > Général > Programmation > Technologies Apple Est-ce qu'un admin peut m'aider ? Merci -------------------- iMac 5K iPhone 11Pro 256GB Watch SE --------\\\ /// ------ ( @ @ ) ....o00o.(_).o00o.. |
|
|
12 Apr 2017, 22:49
Message
#18
|
|
Macbidouilleur d'Or ! Groupe : Modérateurs Messages : 19 361 Inscrit : 22 Jul 2004 Lieu : Louvain-la-Neuve (Gaule Gelbique) Membre no 21 291 |
Déplacé.
-------------------- ¶ MacBook Pro 14’’ 2021, M1 Pro, 16 Go/1 To – macOS 12.6 “Monterey” ¶ MacBook Pro 15’’ mi-2010 Core i5 2,53 GHz, 8 Go/SSD Samsung 860EVO 1 To – Mac OSX 10.6.8 ¶ Power Macintosh G3 beige de bureau, rev.1 @ 233MHz, 288 Mo/4Go – MacOS 9.1 + carte PCI IDE/ATA Tempo 66 Acard 6260 avec HD interne Maxtor 80 Go + graveur interne CDRW/DVD LG GCC-4520B + tablette A4 Wacom UD-0608-A + LaCie ElectronBlueIV 19" + HP ScanJet 6100C ¶ B-Box 3 + HP LaserJet 4000 N
¶ La recherche dans MacBidouille vous paraît obscure ? J'ai rédigé une proposition de FAQ. Le moteur logiciel a un peu changé depuis mais ça peut aider quand même. … Les corsaires mettent en berne… |
|
|
13 Apr 2017, 08:28
Message
#19
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 264 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Bonjour,
Je me permets juste un petit conseil: avant de mettre ton script sous forme d'action de dossier, je te conseille fortement de la faire en direct pour la mise au point. En effet les actions de dossiers sont lancées en tâche de fond et les erreurs de mise au point seront difficilement traçables. Donc tu fais ton script avec un "choose file" et un "choose folder" qui sélectionnent le dossier et les fichiers Excel prétendument ajoutés. Une fois mis au point, tu remplaces les 2 "choose..." par le handler "on adding folder..." J'ai fais de nombreux folder actions et c'est finalement la méthode la plus efficace. Par ailleurs, si tu ne connais pas le nombre de lignes à copier de ton fichier Excel, tu peux le trouver avec : CODE set DerLigne to count of rows of used range of active sheet La variable DerLigne contient les nombre de ligne. Si ton bloc de données débute en ligne 2, alors tes données sont de A2 à B(Derligne+1). Je te suggère de nommer ton fichier résultant avec date_heure de type aaaa_mm_jj-hh_mm ce sera plus facile de trouver le dernier. Cordialement -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
7 May 2020, 08:33
Message
#20
|
|
Nouveau Membre Groupe : Membres Messages : 22 Inscrit : 17 May 2001 Membre no 257 |
Bonjour
j'ai la meme question. Finalement est ce que tu as pu finaliser ?? merci |
|
|
8 May 2020, 07:28
Message
#21
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 264 Inscrit : 7 Dec 2013 Lieu : Ile de France Membre no 188 169 |
Bonjour,
Voici le script que j'avais fait à l'époque pour tester l'idée. Il combine à la fois les actions de dossier et tu peux aussi le lancer en direct. Dans ce cas, il va te demander de sélectionner le dossier avec les fichiers Excel à regrouper. Dans les 2 cas, il filtre les xlsx et les fichier commençant par "enco" comme demandé par b00ss. Le fichier de regroupement est fixe (première ligne du handler "fusion_excel". Code (* le programme principal est le handler fusion_excel Lors d'un run classique (handler on run), l'utiisateur doit choisir le dossier des fichiers Excel Lors d'un appel via action de dossier, l'action de dossier fourni la liste de Excel ajoutés *) --**************************** on run -- sélection du dossier des fichiers Excel à regrouper tell application "Finder" to set liste to (document files of (choose folder "selectionner le dossier contentant les fichiers Excel à regrouper") whose name starts with "enco" and name extension is "xlsx") as alias list fusion_excel(liste) end run --**************************** on adding folder items to ceDossier after receiving fichiers -- il faut filtrer les fichiers de type xlsx commençant par "enco" set liste to {} tell application "Finder" repeat with un_fichier in fichiers set f to file un_fichier if ((name of f) starts with "enco") and (name of f ends with "xlsx") then set end of liste to un_fichier end repeat end tell fusion_excel(liste) end adding folder items to --**************************** on fusion_excel(listeXL) -- regroupe sur 1 fichier Excel les contenus de fichiers Excel de la liste listeXL set ALLXL to "Users:imac27:Desktop:Groupe_Excel:ALL.xlsx" -- fichier Excel de regroupement tell application "System Events" to set ALL_OK to exists file ALLXL -- vérifie que le fichier ALLXL existe déjà tell application "Microsoft Excel" activate if ALL_OK then -- Le fichier existe, ouverture et position de la prochaine ligne vide open ALLXL set all_wb to active workbook set der_ligne to (count of rows of used range of active sheet) + 1 else -- Le fichier n'existe pas. On le crée et l'enregistre. La prochaine ligne est 1 set all_wb to make new workbook save workbook as all_wb filename ALLXL set der_ligne to 1 end if repeat with unXL in listeXL set curr_wb to open workbook workbook file name (unXL as string) with read only set Nb_lignes to count of rows of used range of sheet 1 of curr_wb copy range (used range of sheet 1 of curr_wb) close curr_wb saving no activate all_wb paste worksheet sheet 1 destination range ("A" & der_ligne) set der_ligne to der_ligne + Nb_lignes end repeat close all_wb saving yes end tell end fusion_excel Cordialement -------------------- iiMac 24 M1 16Go/1To 13.5.1
iMac 27 i5 3,1GHz 8Go/1To 10.11.6 / 10.6.8 iMac 20 C.Duo 2,6Ghz 8Go/350Go 10.6.8 / 10.11 Mini C.Duo 2,0Ghz 2Go/500Go 10.6.8 |
|
|
Nous sommes le : 26th April 2024 - 20:29 |