Excel récupération de données

corso

Membre actif
14 Avril 2007
219
44
Suisse
Voici mon problème, J’ai un document Excel avec des centaines de feuilles.
Chacune des feuilles est nommée par une date. Dans chaque feuille j’ai 2 montants qui sont toujours dans les cellules F18 et F47.

J’aimerais créer une feuille supplémentaire ou il y aurait tous ces montants à la suite.

Ex. Nouvelle feuille - cellule A1 = Feuille 1 (nommée 01.04.10) - cellule F18
Nouvelle feuille - cellule A2 = Feuille 1 (nommée 01.04.10) - cellule F47
Nouvelle feuille - cellule A3 = Feuille 2 (nommée 02.04.10) - cellule F18
Nouvelle feuille - cellule A4 = Feuille 2 (nommée 02.04.10) - cellule F47
Nouvelle feuille - cellule A5 = Feuille 3 (nommée 03.04.10) - cellule F18
Nouvelle feuille - cellule A6 = Feuille 3 (nommée 03.04.10) - cellule F47

etc....

Donc, il faudrait que je récupère ces données de manière automatique et je ne sais comment faire.

J’espère avoir été clair.

Bonne soirée.
 
Bonsoir,

Un petit applescript devrait faire l'affaire...
 
Vous avez la fonction INDIRECT qui permet de donner la valeur d'une cellule dont l'adresse est définie avec du texte et le complément la fonction ADDRESS

Il y a aussi la fonction =

En VBA si cela existe en excel mac

Set NS= application.worksheets.add
K=0
For each ws in application.worksheets
if ws.name<> ns.name then
K=K+1
NS.cells(K,1).value=K
NS.cells(K,2).value=WS.name
NS.cells(K,3).value=ws.cells(17,6)
NS.cells(K,4).value=ws.cells(46,6)

endif
next ws

BG
 
Vous avez la fonction INDIRECT qui permet de donner la valeur d'une cellule dont l'adresse est définie avec du texte
L'idée n'est pas mauvaise mais peut poser un léger problème (extrait de l'aide pour la fonction INDIRECT) :

• Si l'argument réf_texte fait référence à un autre classeur (une référence externe), ce dernier doit être ouvert. Si le classeur auxiliaire ne l'est pas, la fonction INDIRECT renvoie la valeur d'erreur #REF!

Ensuite, en effet, il faut probablement passer par de la programmation. Il faudrait savoir dans ce cas si la version d'Excel est la 2004 ou la 2008, puisque dans cette dernière il n'y a pas de VBA. On peut certainement (dans les deux cas, d'ailleurs) adapter ta boucle Macro en AppleScript (ce sont en gros les mêmes commandes, avec une syntaxe différente). Si j'ai un peu de temps demain j'y jetterai un oeil...
 
Alors, pour le problème exposé (où il est spécifié qu'il veut que ça soit dans une feuille supplémentaire du même classeur), dans la feuille supplémentaire ( les crochets symbolisent la cellule, ne pas les taper):

En A1 [xxx] (date servant de nom à la première feuille)
En B1 [="Feuil"&A1&"!F18"]
En C1 [="Feuil"&A1&"!F47"]
En D1 [=Indirect(B1)]
En E1 [=Indirect(C1)]

Ensuite, une recopie incrémentale de ces cinq cellules vers le bas (sélection des cinq cellules, puis placer le curseur de la souris sur le petit carré dans le coin en bas à droite de la sélection, et en maintenant la touche "alt" enfoncée, draguer vers le bas jusqu'à ce que la valeur reproduite en A soit le nom de la dernière feuille de données), puis, si toutes les dates ne sont pas consécutives, trier la feuille sur la colonne D ou la colonne E, supprimer toutes les lignes donnant des "#REF" (qui seront, grâce au tri, réunies en un seul bloc), puis trier de nouveau la feuille sur la colonne A.

Pour faire plus joli ensuite, les colonnes A à C peuvent être masquées.

Maintenant, si l'objectif est juste d'additionner toutes ces valeurs, il serait plus simple de procéder par une somme "3D" !
 
Alors, pour le problème exposé (où il est spécifié qu'il veut que ça soit dans une feuille supplémentaire du même classeur),
:rose::rose::rose: Décidément, je me surpasse en ce moment ! Heureusement qu'il y en a qui lisent mieux les exposés que moi :D

(je n'ose même pas dire que je ne recommencerai plus) :rose:
 
voila un petit applescript qui devrait pouvoir le faire !
script à copier et coller dans l'éditeur d'applescript
commenté de manière à pouvoir le modifier à ta façon...

-- cree une nouvelle feuille "NEW" vierge
--en colonne A mettra les cellule F18 et F47

tell application "Finder"
set lefichier to choose file with prompt "Sélectionnez le fichier à Traiter"
set nom to lefichier as string
set lerang to 1 -- initialise le numero de ligne pour la copie
end tell

tell application "Microsoft Excel"
open nom -- ouvre le fichier
tell active workbook to make worksheet at end with properties {name:"NEW"} -- cree nouvelle feuille "new"
set i to 1 -- initialise le numéro de la feuille à copier

repeat
try
select sheet i -- sélectionne la feuille contenant les cellules à copier quitte si erreur plus de feuille
on error
exit repeat
end try
set lavaleur1 to value of range "f18" --cellule à copier
set lavaleur2 to value of range "f47" --cellule à copier
select sheet "new" -- sélectionne la feuille new pour le resultat
set lacase to "A" & lerang as string -- numero de la cellule à remplir
set value of range lacase to lavaleur1 --ecrit valeur f18
set lerang to lerang + 1 -- cellule suivante
set lacase to "A" & lerang as string -- numero de la cellule à remplir
set value of range lacase to lavaleur2 --ecrit valeur f47

set lerang to lerang + 1 -- cellule suivante
set i to i + 1 -- feuille suivante

end repeat

end tell

tell application "Finder"
activate
(display dialog ("waouou ... Ca y est c'est fait !") buttons {"Salut !"})
end tell
 
Tout d'abord, je vous remercie pour l'aide.

J'ai essayé la méthode de Pascal 77 et bien je n'arrive pas à la faire fonctionner. J'ai mis en pièce jointe des prints d'écran avec le contenu de la cellule et son résultat. Il il y aussi le printscreen du nom des feuilles.

Qu'est ce que je fais de faux ?

A zeltron54, je vais essayer ton applescript.

J'oubliais je suis sur Excel 2008 mais aussi le 2007 sur PC (boulot).

Merci encore
 
Tout d'abord, je vous remercie pour l'aide.

J'ai essayé la méthode de Pascal 77 et bien je n'arrive pas à la faire fonctionner. J'ai mis en pièce jointe des prints d'écran avec le contenu de la cellule et son résultat. Il il y aussi le printscreen du nom des feuilles.

Qu'est ce que je fais de faux ?

A zeltron54, je vais essayer ton applescript.

J'oubliais je suis sur Excel 2008 mais aussi le 2007 sur PC (boulot).

Merci encore

Bon, moi, j'ai fais ça avec Feuil1, Feuil2, etc. J'avais perdu de vue que les dates repassent en N° de série quand on les passe en texte. Par ailleurs, je vois deux feuilles par date dans tes copies d'écran, tu ne parlais que d'une seule ! Tu es certain qu'une somme 3D ne ferait pas l'affaire ?
 
Ce sont les feuilles avec uniquement la date comme nom. Les autres (Solde au ...) ont d'autres données qui ne m'intéresses pas pour le moment.

Qu'entends-tu par "somme 3D" ?
 
Bon, je vais essayer de me racheter un peu. Si (comme tu sembles le préciser ici) tu ne souhaites récupérer que les données depuis les feuilles avec une date comme nom, tu peux adapter les indications de Pascal77 comme suit :

- en A1, tu saisis la première date (par exemple 22.06.10)
- en B1, tu saisis la formule =INDIRECT(TEXTE($A1;"jj.mm.aa")&"!$F$18")
- en C1, tu saisis la formule =INDIRECT(TEXTE($A1;"jj.mm.aa")&"!$F$47")

Ensuite, tu sélectionnes les trois cellules A1:C1 et tu recopies vers le bas. Chez moi, ça marche. Si ça ne convient pas, décris ce que tu observes...
 
Qu'entends-tu par "somme 3D" ?

Dans un classeur Excel, lorsque dans un classeur, certaines cellules (toujours les mêmes) de chaque feuille contiennent des nombres, il est possible d'effectuer des opérations dessus, ces opérations sont dites "3D" car elles ont trois coordonnées : ligne, colonne et feuille.

un exemple de somme 3D, est d'additionner dans une feuille supplémentaire toutes les cellules F18 (ou F47) de toutes les autres feuilles du classeur.

Fais une recherche dans l'aide Excel sur "Consolidation de données à l'aide de formules ou de références 3D", tu auras toutes les précisions, et l'avantage, par rapport aux macros AppleScript, c'est que c'est multi-plateforme !
 
Avec l'adaptation par Aliboron de la méthode de Pascal 77, cela fonctionne.

c'est exactement ce que j'ai besoin.

Je vous remercie tous pour cette précieuse aide.

Bon weekend.
 
  • J’aime
Réactions: Aliboron