Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

macro excel: copier certaines cellules de fichiers .xls multiples

5 réponses
Avatar
aniota22
Bonjour,

au secours!!
je vous explique mon problème:
j'ai un travail très (très) répétitif (je suis stagiaire dans une banque...) et je me creuse la tête pour créer une macro sous excel (et je n'y connais rien en VBA -ça fait 4h que j'ai commencé à essayer d'apprendre, mais je suis un peu lente...-) qui ferait ceci:

*importer dans une feuille excel certaines valeurs contenues dans un grand nombre (une centaine) de fichiers .xls

Est-ce réalisable?
pitiéééé dites moi que ce n'est pas impossible!!!!

merci d'avance pour votre aide,
Anna

5 réponses

Avatar
LSteph
Bonjour,
Tu peux même faire cela artisanalement sans macro
sous réserve que ces fichiers et eux seuls soient rangés dans un
même répertoire
Mets toi dans une feuille vide en B2
Menu Données Consolider

Clic sur Parcourir va pointer sur le 1er de ces fichiers
à la place de son nom mets une étoile et ajoute la plage à consolider
exemple:
'*.xls'!$C$4:$H$4
Ajouter
Lier aux données sources
Consolider
Développe et supprime les symboles du plan obtenu
Voilà tu as la plage en formule liée pour chaque fichier!

Plus:
Supposant que la cellule $A$1 de chacun de ces fichiers contienne son
Nom
Copies la colonne B en A et garde sélectionnée la colonne A
rechercher remplace c$4 par A$1
tu as le nom pour chaque ligne

Supposant que la ligne1 de chacun de ces fichiers contienne les
intitulés de colonnes
Copies ensuite la ligne 2 des données et remplace $4 par $1
Tu as tes titres.

Cordialement.

--
lSteph

On 2 juil, 03:28, aniota22 wrote:
Bonjour,

au secours!!
je vous explique mon problème:
j'ai un travail très (très) répétitif (je suis stagiaire dans une banque...) et
je me creuse la tête pour créer une macro sous excel (et je n'y conna is rien en
VBA -ça fait 4h que j'ai commencé à essayer d'apprendre, mais je su is un peu
lente...-) qui ferait ceci:

*importer dans une feuille excel certaines valeurs contenues dans un gran d
nombre (une centaine) de fichiers .xls

Est-ce réalisable?
pitiéééé dites moi que ce n'est pas impossible!!!!

merci d'avance pour votre aide,
Anna


Avatar
LSteph
Bonjour,

Solution par VBA
supposant toujours que ces fichiers sont seuls et dans un même
répertoire:

Sub ramene()
Dim f As String, myf As Worksheet
'ChDir "c:monrep"
Application.ScreenUpdating = False
Set myf = Sheets.Add(before:=Sheets(1))
f = Dir("*.xls")
Do While Len(f) > 0
Workbooks.Open (f)
ActiveWorkbook.Sheets(1).[c4:h4].Copy _
Destination:=myf.[b65536].End(xlUp)(2)
myf.[a65536].End(xlUp)(2) = f
Workbooks(f).Close False
f = Dir
Loop
Application.ScreenUpdating = True
End Sub


'lSteph


On 2 juil, 03:28, aniota22 wrote:
Bonjour,

au secours!!
je vous explique mon problème:
j'ai un travail très (très) répétitif (je suis stagiaire dans une banque...) et
je me creuse la tête pour créer une macro sous excel (et je n'y conna is rien en
VBA -ça fait 4h que j'ai commencé à essayer d'apprendre, mais je su is un peu
lente...-) qui ferait ceci:

*importer dans une feuille excel certaines valeurs contenues dans un gran d
nombre (une centaine) de fichiers .xls

Est-ce réalisable?
pitiéééé dites moi que ce n'est pas impossible!!!!

merci d'avance pour votre aide,
Anna


Avatar
aniota22
LSteph a écrit le 02/07/2009 à 10h26 :
Bonjour,

Solution par VBA
supposant toujours que ces fichiers sont seuls et dans un même
répertoire:

Sub ramene()
Dim f As String, myf As Worksheet
'ChDir "c:monrep"
Application.ScreenUpdating = False
Set myf = Sheets.Add(before:=Sheets(1))
f = Dir("*.xls")
Do While Len(f) > 0
Workbooks.Open (f)
ActiveWorkbook.Sheets(1).[c4:h4].Copy _
Destination:=myf.[b65536].End(xlUp)(2)
myf.[a65536].End(xlUp)(2) = f
Workbooks(f).Close False
f = Dir
Loop
Application.ScreenUpdating = True
End Sub


'lSteph


On 2 juil, 03:28, aniota22 wrote:
Bonjour,

au secours!!
je vous explique mon problème:
j'ai un travail très (très) répétitif (je suis
stagiaire dans une banque...) et
je me creuse la tête pour créer une macro sous excel (et je n'y
conna is rien en
VBA -ça fait 4h que j'ai commencé à essayer d'apprendre,
mais je su is un peu
lente...-) qui ferait ceci:

*importer dans une feuille excel certaines valeurs contenues dans un gran d
nombre (une centaine) de fichiers .xls

Est-ce réalisable?
pitiéééé dites moi que ce n'est pas impossible!!!!

merci d'avance pour votre aide,
Anna





Re bonjour LSteph,

j'ai essayé de comprendre ton code (merci encore)...
Peux-tu m'expliquer à quoi correspond le (2) des lignes:

Destination:=myf.[b65536].End(xlUp)(2)
myf.[a65536].End(xlUp)(2) = f

Je pense que c'est le numéro de la ligne à partir de laquelle vont être écrites les données mais par exemple si je change cette valeur à (3), les 1eres données sont bien inscrites en A3 et B3 mais les suivantes le sont en A5 et B5 (donc 3 lignes après A3 et B3).
Comment faire pour commencer à partir d'une autre ligne et que les autres données suivent?
Peux-tu m'éclairer stp?

Sinon un truc sans importance (mais je n'ai pas trouvé non plus!):
comment faire pour que l'extension du fichier (xls) ne soit pas écrite (je pensais que ce pouvait être une commande dans la fonction "dir" mais je n'ai pas trouvé...)

Merci beaucoup,
Anna
Avatar
LSteph
Bonjour,


Peux-tu m'expliquer à quoi correspond le (2) des lignes:



Si tu mets 1 c'est la cellule, 2 celle d'en dessous, 0 celle d'au
desssus ...etc

Destination:=myf.[b65536].End(xlUp)(2)



Le end(xlup) part d'en bas de .[b65536 qui est vide
et remonte jusqu'à trouver une cellule remplie.


..si je change cette valeur à (3), les 1eres données
sont bien inscrites ...> Comment faire pour commencer à partir d'une au tre ligne



Si tu veux commencer en B3 écris n'importe quoi en b2
[b2]=" écrire ci dessous"
'...!
.[b65536].end(xlup) (2) désignera B3
Peux-tu m'éclairer stp?

Sinon un truc sans importance (mais je n'ai pas trouvé non plus!):
comment faire pour que l'extension du fichier (xls) ne soit pas écrite (je
pensais que ce pouvait être une commande dans la fonction "dir" mais je n'ai pas
trouvé...)



Je ne suis pas sûr de comprendre tu veux quoi à la place de .xls ..?

--
lSteph
Avatar
aniota22
LSteph a écrit le 03/07/2009 à 15h55 :
Bonjour,


Peux-tu m'expliquer à quoi correspond le (2) des lignes:




Si tu mets 1 c'est la cellule, 2 celle d'en dessous, 0 celle d'au
desssus ...etc

Destination:=myf.[b65536].End(xlUp)(2)




Le end(xlup) part d'en bas de .[b65536 qui est vide
et remonte jusqu'à trouver une cellule remplie.


..si je change cette valeur à (3), les 1eres données
sont bien inscrites ...> Comment faire pour commencer à partir d'une
au tre ligne




Si tu veux commencer en B3 écris n'importe quoi en b2
[b2]=" écrire ci dessous"
'...!
.[b65536].end(xlup) (2) désignera B3
Peux-tu m'éclairer stp?

Sinon un truc sans importance (mais je n'ai pas trouvé non plus!):
comment faire pour que l'extension du fichier (xls) ne soit pas écrite
(je
pensais que ce pouvait être une commande dans la fonction
"dir" mais je n'ai pas
trouvé...)




Je ne suis pas sûr de comprendre tu veux quoi à la place de .xls
..?

--
lSteph


Bonsoir et merci pour tes réponses Steph!!

je n'ai pas tout à fait compris ta réponse :
"Si tu mets 1 c'est la cellule, 2 celle d'en dessous, 0 celle d'au
desssus ...etc"

par exemple si je mets "0" ça ne fonctionne pas, si je mets "1" une seule valeur apparait...
SI je mets "3" les données sont espacées de 3 lignes (mais commencent à partir de la ligne 3).

Sinon je voulais savoir s'il est possible de faire ceci:
au lieu de rentrer dans le code vba la position des cellules que je veux chercher dans les fichiers xls (par exemple dans ton code [c4:h4]), comme j'ai bcp de cellules à aller chercher (et souvent différentes selon les jours, les gens etc), est-il possible quand lançant le code s'ouvre une de ces feuilles xls et que je choisisse la cellule à aller chercher dans toutes les autres feuilles?

j'espère que je n'abuse pas trop de ta gentillesse et de tes compétences!

Anna

nb: pour répondre à ta question "Je ne suis pas sûr de comprendre tu veux quoi à la place de .xls
..?"
ce que je cherchais à faire c'est juste de retirer l'extension: au lieu que soit indiqué "toto.xls" que juste soit inscrit "toto" :)