J'ai un classeur dans lequel j'ajoute chaque jour une feuille. Je souhaiterais extraire la donnée en AU4 de chaque feuille et créer une liste de ces données dans uen autre feuille pour créer un graphique.
Réalisant une nouvelle feuille chaque jour, j'aimerais que cette extraction de donnée dans la nouvelle feuille se fasse rapidement en un simple clic.
J'espère que j'ai assez détaillé ma demande.
Petite précision : j'ai très très peu de connaissance en VBA.
Merci d'avance
A voir également:
Extraire des données de plusieurs feuilles excel
Excel récupérer données de plusieurs feuilles - Meilleures réponses
avec une macro a mettre dans un module
- la feuille de recuperation est nommée FRecap
- dans FRecap j'ai nommé TRecap le tableau de recuperation
- mes cellules a recuperer sont A1
- si les feuilles a recuperer ne commencent pas a la 1° et ne terminent as a l'avant dernière modifier le f=1 to ..
donc a adapter
Sub Macro1()
Dim nbVal As Long
Dim f As Long
Sheets("FRecap").Range("TREcap").ClearContents
nbVal = Sheets.Count - 1
For f = 1 To nbVal
Sheets("FRecap").Range("TREcap").Cells(f, 1).Value = Sheets(f).Range("A1").Value
Next f
End Sub
Bonjour,
1- définir un nom dans votre classeur (sources )
Insertion/Nom/Définir
Noms dans le classeur, saisir : nomfeuilles
Fait référence à, saisir : =STXT(ALEA()*0&LIRE.CLASSEUR(1);2;50)
2- Faire la liste de vos feuilles en tenant compte du nombre maxi de feuilles que votre classeur pourra atteindre :
En A1 saisir : =SI(LIGNE()>NBVAL(nomfeuilles);"";STXT(INDEX(nomfeuilles;LIGNE());CHERCHE("]";INDEX(nomfeuilles;LIGNE()))+1;30))
étirer la formule vers le bas, d'autant de lignes que votre classeur pourra contenir de feuilles
!!! si vous commencez la liste en A2, la formule devient :
=SI(LIGNE()-1>NBVAL(nomfeuilles);"";STXT(INDEX(nomfeuilles;LIGNE()-1);CHERCHE("]";INDEX(nomfeuilles;LIGNE()-1))+1;30))
3- En B1 saisir : =SI(A1="";"";INDIRECT("'"&A1&"'!$AU$4"))
Etirer cette formule vers le bas comme vous venez de le faire pour l'autre...
EDIT : un fichier exemple? Cordialement,
-- Il n'y a rien de tel qu'une question idiote, seulement une réponse idiote. A.Einstein --
Merci beaucoup à vous deux, cependant "ccm81" je bloque avec la 4ème ligne et l'histoire du tableau de récupération. J'ai nommé la feuille et une cellule TREcap mais j'ai une erreur 1004 qui s'affiche au lancement de la macro.
Merci à vous deux car en fait j'avais pas nommer l'ensemble des cellules TRecap. Donc merci à toi ccm81 pour la macro et à toi pijaku pour la démarche pour nommer ;)
Bonjour
j'ai observer vos consignes, mais j'ai une question, est-il possible extraire les données de la feuille 1 de plusieurs classeur dans un dossiers ?
Je m'explique j'ai dans un dossier avec plusieurs classeur dont je souhaite récupérer les cellules (ex: A1 - G5 - F18 de la feuille 1) et les mettre dans un classeur (Recup) dans les lignes (une ligne par données de classeur).
Idéalement je cherche un logiciel d'extraction ou je dit dans le fichiers de récup je veux les données des cellules A1 - G5 - F18 de la feuille 1 de tout les classeurs du dossiers "x"
Dans le même genre que les extracteurs d'adresses mail.
Salut Magano,
Regarde, dans cette astuce, l'exemple d'utilisation. Il boucle sur tous les classeurs d'un répertoire pour en "extraire" la valeur contenue en A1 Feuil1...
Re-Bonjour
vous voyez une erreur la ?
il me donne une erreur 1004 et pointe sur:
RefersTo:="='" & Chemin & "[" & fichier & "]Feuil1'!$A$1" -----------------------------------------------------------------------------------------------------
Option Explicit
Sub ImporterDonneesSansOuvrir()
Dim objShell As Object, objFolder As Object
Dim Chemin As String, fichier As String
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(&H0&, "C:\Documents and Settings\Filipe\Bureau\test\", &H1&)
If objFolder Is Nothing Then
MsgBox "Abandon opérateur", vbCritical, "Annulation"
Else
Chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\"
[B1] = Chemin
fichier = Dir(Chemin & "*.xls")
Do While Len(fichier) > 0
If fichier <> ThisWorkbook.Name Then
ThisWorkbook.Names.Add "Plage", _
RefersTo:="='" & Chemin & "[" & fichier & "]Feuil1'!$A$1"
With Sheets("Feuil2")
.[A1] = "=Plage"
.[A1].Copy
Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Offset(0, 1) = fichier
End With
End If
fichier = Dir()
Loop
End If
End Sub
Bonjour,
Je ne vois pas d'erreur dans ton code.
La seule erreur qu'il pourrait se produire c'est que la formule avec laquelle on définit le nom plage soit fausse. "='" & Chemin & "[" & fichier & "]Feuil1'!$A$1" si Chemin ou fichier ne renvoie rien, le programme doit bugguer. Normal!
Teste le code pas à pas :
Sous VBE clic n'importe ou dans ce code et appuies sur F8 plusieurs fois, le code va s'exécuter ligne par ligne. En survolant les noms de variables avec ta souris, VBE affiche leur valeur. Teste comme ça déjà.
Sinon as tu téléchargé le zip de démonstration de l'astuce précédemment citée? Si oui l'as tu testé? si non fais le.