Macro excel pour récupérer le contenu de plusieurs cellules d'autres feuilles [Résolu]

Messages postés
8
Date d'inscription
mardi 2 mai 2006
Dernière intervention
4 janvier 2010
- - Dernière réponse : n4rcose
Messages postés
4
Date d'inscription
vendredi 4 janvier 2008
Dernière intervention
4 janvier 2008
- 4 janv. 2008 à 12:19
Bonjour,

Je suis stagiaire, et je galère:

J'ai des données de 4 années, avec une feuille excel par jour... soit 365 fichiers * 4.


Chaque fichier porte comme nom la date (important pour la suite), et
sur chaque fichier, une seule feuille m'intéresse, classiquement
appelée feuille 1, plus exactement le contenu de huit cellules
disposées en rectangle (genre imaginons: A1-B1-C1-D1-A2-B2-C2-D2)

Dans ces cases, il y a des numéros, et c'est la somme qui m'intéresse,
mais bon, si au moins je peux récuper les 8 cellules sur une seule
ligne, c'est deja pas mal, la somme je peux la faire apres.

En gros, j'aimerais obtenir au final un fichier excel, avec:

le nom du fichier qui a été ouvert, et la sommes des 8 cellules mentionnées (ou bien les 8 cellules remise sur une ligne).


Est-ce possible de tout obtenir par une seule macro ? (les fichiers ont
tous un nom unique "Bilan_Journalier_Usine_01_03_2003" seule la date
change. Tous les fichiers du même mois sont dans le meme repertoire,
les meme repertoire de la meme année sont dans un même repertoire.


J'ai chercher sur le forum, j'ai trouvé des solutions approchantes,
genre chercher le contenue d'une cellule d'autres fichiers, mais il
n'etait pas question de copier le nom du fichier en face, et la c'est
de somme dont il s'agit.

Je serais tres content que vous puissiez m'aider, je n'ai aucune connaissance en programmation (chuis plutot chimiste)...

Merci beaucoup, je suis a votre disposition pour plus d'infos.

Bonne soirée
Afficher la suite 

15 réponses

Meilleure réponse
Messages postés
8
Date d'inscription
mardi 2 mai 2006
Dernière intervention
4 janvier 2010
3
Merci
J'ai réecrit ce que vous m'avez donné, sans succes (il ne se passe
rien, aucun message d'erreur, comme si la macro n'était pas du tout
exécutée.



J'ai corrigé un peu ce que vous m'avez donné car en fait la structure des répertoire est celle ci:

par exemple: le chemin vers un fichier de janvier de l'année 2003:

E:\CD\Bilans_Journaliers_Choisy\2003\2003_01

en fait on répete l'année, j'ai donc corriger dans la macro

Ensuite, les cellules qui nous interessent sont les BK45, BL45, BM45
d'une part, BK46, BL46, BM46 de l'autre, BK47.... bref jusqu a 48 soit
12 cellules

Ces cellules sont sur la feuille nommée Présentation (il y a plein de feuilles par classeur).



Cependant rien n'y fait, ce la ne fonctionne pas.Rien ne se passe quand
j'exécute la macro. Faut il placer le repertoire Anmois.xls a un
endroit particulier ?

Ca m'embete, car je vais devoir rendre un rapport d'ici peu. Pourriez-vous m'aider ?

Merci pierre9393 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Messages postés
8
Date d'inscription
mardi 2 mai 2006
Dernière intervention
4 janvier 2010
0
Merci
Re

En fait, après relecture, j'ai besoin non pas d'obtenir la somme, mais les 12 cellules (3*4) sur une même ligne.

Je suis désolé pour le petit changement de dernière minute
Messages postés
17
Date d'inscription
mardi 7 mars 2006
Dernière intervention
21 septembre 2011
0
Merci
Ouvrez un XLS à nommer AnMOIS.XLS
par Menu: Outils, Macros, macros
Créer une macro (2 3 mouvements) et vous arrétez l'enreg.

par Menu: Outils, Macros, macros => Macro1 [Modifier]
vous copier ceci (à la place de l'enreg bidon):
Sub Macro1()
=================================================
' Mettre le bon chemin
Dim CheAn, Chemois, Fichxl, T_M(12) As String
Dim T_An(4), X, M, Lig As Integer
' Mise en place des noms dossiers An dans X postes
T_An(1) 2003: T_An(2) 2004: T_An(3) = 2005: T_An(4) = 2006
' Tableau des dossiers Mois (juste l'élément qui varie)
T_M(1) "Jan": T_M(2) "Feb": T_M(3) = "Mar": T_M(4) = "Avr":
T_M(5) "MAI": T_M(6) "JUN": T_M(7) = "JUI": T_M(8) = "AOU":
T_M(9) "SEP": T_M(10) "OCT": T_M(11) = "NOV": T_M(12) = "DEC":
For X = 1 To 4 ' On boucle 4 fois pour 4 ans
' on charge le répertoire d'1 année T_An(X) dans la variable Chemxl
CheAn = "C:\Documents and Settings\JPIERRE\vb6" & T_An(X)
For M = 1 To 12 ' on va sur 12 dossiers Mois
Chemois = CheAn & "\Mois_" & T_M(M)
' Cette commande met le nom du 1er .XLS du dossier c:\an\mois\...
Fichxl = Dir(Chemois & "\*.XLS")
Do While Fichxl <> "" ' si plus de fichier => fin
Workbooks.Open Filename:= _
Chemois & "" & Fichxl
'"C:\Documents and Settings\JPIERRE\Mes documents\Excel\LEVIER1.xls"
Range("D16:G16").Select ' on select les cellules
Selection.Copy ' on le copie
Windows("Anmois.xls").Activate ' on va sur l'XL centralisateur
Lig = Lig + 1
Range("A" & Lig).Select ' Col A ligne Lig, chemin & fichier
ActiveCell.Value = Chemois & "" & Fichxl
Range("B" & Lig).Select ' Col B
ActiveSheet.Paste ' on colle les cellules
Windows(Fichxl).Activate ' on revient sur le fcihier lu
ActiveWorkbook.Close ' pour le fermer
Fichxl = Dir ' nom Fichier suivant
Loop
Next M
Next X
====================================================
End sub

Corriger les constantes Chemin, et par F8 faire du pas à pas
pour comprendre et modifier la macro si nécessaire.
Maintenant mon Mail est jeanpierre.rougier@wanadoo.fr
si vous voulez je vous envoie le xl AnMois.XLS
qu'il faudra quand-même modifer pour l'adapter à vos chemins.
Voilà.
Messages postés
17
Date d'inscription
mardi 7 mars 2006
Dernière intervention
21 septembre 2011
0
Merci
Ouvrez un XLS à nommer AnMOIS.XLS
par Menu: Outils, Macros, macros
Créer une macro (2 3 mouvements) et vous arrétez l'enreg.

par Menu: Outils, Macros, macros => Macro1 [Modifier]
vous copier ceci (à la place de l'enreg bidon):
Sub Macro1()
=================================================
' Mettre le bon chemin
Dim CheAn, Chemois, Fichxl, T_M(12) As String
Dim T_An(4), X, M, Lig As Integer
' Mise en place des noms dossiers An dans X postes
T_An(1) 2003: T_An(2) 2004: T_An(3) = 2005: T_An(4) = 2006
' Tableau des dossiers Mois (juste l'élément qui varie)
T_M(1) "Jan": T_M(2) "Feb": T_M(3) = "Mar": T_M(4) = "Avr":
T_M(5) "MAI": T_M(6) "JUN": T_M(7) = "JUI": T_M(8) = "AOU":
T_M(9) "SEP": T_M(10) "OCT": T_M(11) = "NOV": T_M(12) = "DEC":
For X = 1 To 4 ' On boucle 4 fois pour 4 ans
' on charge le répertoire d'1 année T_An(X) dans la variable Chemxl
CheAn = "C:\Documents and Settings\JPIERRE\vb6" & T_An(X)
For M = 1 To 12 ' on va sur 12 dossiers Mois
Chemois = CheAn & "\Mois_" & T_M(M)
' Cette commande met le nom du 1er .XLS du dossier c:\an\mois\...
Fichxl = Dir(Chemois & "\*.XLS")
Do While Fichxl <> "" ' si plus de fichier => fin
Workbooks.Open Filename:= _
Chemois & "" & Fichxl
'"C:\Documents and Settings\JPIERRE\Mes documents\Excel\LEVIER1.xls"
Range("D16:G16").Select ' on select les cellules
Selection.Copy ' on le copie
Windows("Anmois.xls").Activate ' on va sur l'XL centralisateur
Lig = Lig + 1
Range("A" & Lig).Select ' Col A ligne Lig, chemin & fichier
ActiveCell.Value = Chemois & "" & Fichxl
Range("B" & Lig).Select ' Col B
ActiveSheet.Paste ' on colle les cellules
Windows(Fichxl).Activate ' on revient sur le fcihier lu
ActiveWorkbook.Close ' pour le fermer
Fichxl = Dir ' nom Fichier suivant
Loop
Next M
Next X
====================================================
End sub

Corriger les constantes Chemin, et par F8 faire du pas à pas
pour comprendre et modifier la macro si nécessaire.
Maintenant mon Mail est jeanpierre.rougier@wanadoo.fr
si vous voulez je vous envoie le xl AnMois.XLS
qu'il faudra quand-même modifer pour l'adapter à vos chemins.
Voilà.
Messages postés
8
Date d'inscription
mardi 2 mai 2006
Dernière intervention
4 janvier 2010
0
Merci
Merci beaucoup

Je vais tester ca au travail aujourd'hui. Si besoin est, je peux mettre
tous les fichier (puisque chaque nom est unique) dans un seul et meme
repertoire, ca permettrais surement de simplifier la macro.

J'essaye deja avec votre solution. Je vous remercie
Messages postés
17
Date d'inscription
mardi 7 mars 2006
Dernière intervention
21 septembre 2011
0
Merci
J'ai modifier un peu la macro, mais il est essentielle de analyser en pas à pas
par Menu: Outils, Macros, macros => Macro1 [Modifier], F8
et de voir (via souris) le contenu des variables pour corriger si nécessaire
et adapter la macro ...
========================
Sub Macro1()
'
' Macro1 Macro
' Macro enregistrée le 02/05/2006 par ROUGIER Jean-Pierre
' Visualiser et LANCER LA MACRO EN PAS a PAS (F8),
' et promener la souris sur les variables
' pour en voir le contenu, et modifier si nécessaire ...
' Mettre le bon chemin
Dim CheAn, Chemois, Fichxl, T_M(12) As String
Dim T_An(4), X, M, Lig As Integer
' Mise en place des noms dossiers An dans X postes
T_An(1) 2003: T_An(2) 2004: T_An(3) = 2005: T_An(4) = 2006
' Vous pouvez traiter An par an sur 4 feuilles et regrouper (copier/coller)
' les 4 feuilles en 1
' Tableau des dossiers Mois (juste l'élément qui varie)
T_M(1) "01": T_M(2) "02": T_M(3) = "03": T_M(4) = "04":
T_M(5) "05": T_M(6) "06": T_M(7) = "07": T_M(8) = "08":
T_M(9) "09": T_M(10) "10": T_M(11) = "11": T_M(12) = "12":
For X = 1 To 4 ' On boucle 4 fois pour 4 ans
' on charge le répertoire d'1 année T_An(X) dans la variable Chemxl
CheAn = "E:\CD\Bilans_Journaliers_Choisy" & T_An(X) & "" & T_An(X) & "_"
For M = 1 To 12 ' on va sur 12 dossiers Mois
' en pas à pas, on doit lire le chemin exact du dossier dans chemois
Chemois = CheAn & "" & T_M(M)
' la commande DIR met le nom du 1er .XLS du dossier chemois\... dans FichXL
Fichxl = Dir(Chemois & "\*.XLS")
Do While Fichxl <> "" ' si plus de fichier => fin
Workbooks.Open Filename:= _
Chemois & "" & Fichxl
'"C:\Documents and Settings\JPIERRE\Mes documents\Excel\LEVIER1.xls"
'BK45, BL45, BM45
Range("BK45:BM45").Select ' on select/copy 3 cellules lig.45
Selection.Copy
Windows("Anmois.xls").Activate ' on va sur l'XL central à la bonne ligne
Lig = Lig + 1 ' 1 ligne 12 cellules
Range("A" & Lig).Select ' Col A ligne Lig, chemin & fichier
ActiveCell.Value = Chemois & "" & Fichxl
Range("B" & Lig).Select ' Col B lig.45
ActiveSheet.Paste

Windows(Fichxl).Activate ' on va copier la lig.46
Range("BK46:BM46").Select
Selection.Copy
Windows("Anmois.xls").Activate ' on va sur l'XL central Col E ligne Lig46
Range("E" & Lig).Select
ActiveSheet.Paste

Windows(Fichxl).Activate ' on va copier la lig.47
Range("BK47:BM47").Select
Selection.Copy
Windows("Anmois.xls").Activate ' on va sur l'XL central Col H ligne Lig47
Range("H" & Lig).Select
ActiveSheet.Paste

Windows(Fichxl).Activate ' on va copier la lig.48
Range("BK48:BM48").Select
Selection.Copy
Windows("Anmois.xls").Activate ' on va sur l'XL central Col H ligne Lig48
Range("K" & Lig).Select
ActiveSheet.Paste

Windows(Fichxl).Activate ' on revient sur le fcihier lu
ActiveWorkbook.Close ' pour le fermer
Fichxl = Dir ' nom Fichier suivant
Loop
Next M
' Sauvegarde du tableau chaque fin de dossier mois
' Remplacer le chemin "C:\Documents and Settings\Anmois.xls" par le bon.
ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\Anmois.xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
Next X
' en pas à pas, on peut passer de la macro à la feuille et suivre le travail
' Quand tout va bien, F5 exécute sans pas à pas...
End Sub
Messages postés
17
Date d'inscription
mardi 7 mars 2006
Dernière intervention
21 septembre 2011
0
Merci
Messages postés
17
Date d'inscription
mardi 7 mars 2006
Dernière intervention
21 septembre 2011
0
Merci
Messages postés
17
Date d'inscription
mardi 7 mars 2006
Dernière intervention
21 septembre 2011
0
Merci
Messages postés
8
Date d'inscription
mardi 2 mai 2006
Dernière intervention
4 janvier 2010
0
Merci
Bonsoir

Après correctif, la macro suivante fonctionne (j'ai juste corrigée une mini erreur dans le chemin).



Voici la macro qui marche, cependant il persiste une dernier problème:
quand j'ouvre les fichier manuellement, j'ouvre juste, et je referme
aussitot, j'ai une boite de dialogue "voulez vous enregistrer les
modifs..." alors que j'ai rien fait.

Bref, quand j'éxecute la macro j'ai le meme probleme, les fichiers ne se ferment pas tout seuls.



Pouvez-vous me donner une solution ?



voici la macro qui marchent, merci !!



Sub Macro1()

' Macro enregistrée le 02/05/2006 par ROUGIER Jean-Pierre

' Visualiser et LANCER LA MACRO EN PAS a PAS (F8),

' et promener la souris sur les variables

' pour en voir le contenu, et modifier si nécessaire ...

' Mettre le bon chemin

Dim CheAn, Chemois, Fichxl, T_M(12) As String

Dim T_An(4), X, M, Lig As Integer

' Mise en place des noms dossiers An dans X postes

T_An(1) 2003: T_An(2) 2004: T_An(3) = 2005: T_An(4) = 2006

' Vous pouvez traiter An par an sur 4 feuilles et regrouper (copier/coller)

' les 4 feuilles en 1

' Tableau des dossiers Mois (juste l'élément qui varie)

T_M(1) "01": T_M(2) "02": T_M(3) = "03": T_M(4) = "04":

T_M(5) "05": T_M(6) "06": T_M(7) = "07": T_M(8) = "08":

T_M(9) "09": T_M(10) "10": T_M(11) = "11": T_M(12) = "12":

For X = 1 To 4 ' On boucle 4 fois pour 4 ans

' on charge le répertoire d'1 année T_An(X) dans la variable Chemxl

CheAn = "E:\CD\Bilans_Journaliers_Choisy" & T_An(X) & "" & T_An(X) & "_"

For M = 1 To 12 ' on va sur 12 dossiers Mois

' en pas à pas, on doit lire le chemin exact du dossier dans chemois

Chemois = CheAn & "" & T_M(M)

' la commande DIR met le nom du 1er .XLS du dossier chemois\... dans FichXL

Fichxl = Dir(Chemois & "\*.XLS")

Do While Fichxl <> "" ' si plus de fichier => fin

Workbooks.Open Filename:= _

Chemois & "" & Fichxl

'"C:\Documents and Settings\JPIERRE\Mes documents\Excel\LEVIER1.xls"

'BK45, BL45, BM45


Range("BK45:BM45").Select ' on
select/copy 3 cellules lig.45

Selection.Copy

Windows("Anmois.xls").Activate ' on va sur l'XL central à la bonne ligne

Lig = Lig +
1
' 1 ligne 12 cellules

Range("A" &
Lig).Select ' Col A
ligne Lig, chemin & fichier

ActiveCell.Value = Chemois & "" & Fichxl

Range("B" &
Lig).Select ' Col B
lig.45

ActiveSheet.Paste




Windows(Fichxl).Activate ' on
va copier la lig.46

Range("BK46:BM46").Select

Selection.Copy

Windows("Anmois.xls").Activate ' on va sur l'XL central Col E ligne Lig46

Range("E" & Lig).Select

ActiveSheet.Paste




Windows(Fichxl).Activate ' on
va copier la lig.47

Range("BK47:BM47").Select

Selection.Copy

Windows("Anmois.xls").Activate ' on va sur l'XL central Col H ligne Lig47

Range("H" & Lig).Select

ActiveSheet.Paste




Windows(Fichxl).Activate ' on
va copier la lig.48

Range("BK48:BM48").Select

Selection.Copy

Windows("Anmois.xls").Activate ' on va sur l'XL central Col H ligne Lig48

Range("K" & Lig).Select

ActiveSheet.Paste




Windows(Fichxl).Activate ' on
revient sur le fcihier lu


ActiveWorkbook.Close
' pour le fermer

Fichxl =
Dir
' nom Fichier suivant

Loop

Next M

' Sauvegarde du tableau chaque fin de dossier mois

' Remplacer le chemin "C:\Documents and Settings\Anmois.xls" par le bon.

ActiveWorkbook.SaveAs Filename:="E:\CD\Bilans_Journaliers_Choisy\Anmois.xls", _

FileFormat:=xlNormal, Password:="", WriteResPassword:="", _

ReadOnlyRecommended:=False, CreateBackup:=False

Next X

' en pas à pas, on peut passer de la macro à la feuille et suivre le travail

' Quand tout va bien, F5 exécute sans pas à pas...

'



'

End Sub
Messages postés
8
Date d'inscription
mardi 2 mai 2006
Dernière intervention
4 janvier 2010
0
Merci
k'ai finalement inséré un

Application.DisplayAlerts
= True

ActiveWorkbook.Close

Application.DisplayAlerts
= False





merci beaucoup pour votre aide
Messages postés
17
Date d'inscription
mardi 7 mars 2006
Dernière intervention
21 septembre 2011
0
Merci
Comme quoi on n'échappe pas à plus qu'un minimum d'informatique si l'on veut
éviter de passer des heures à cliquer sur une souris....
Messages postés
2
Date d'inscription
mercredi 25 avril 2007
Dernière intervention
26 avril 2007
0
Merci
Je suis dans le même cas que pierre9393 sauf que les fichiers sont rangés par numéros de dossiers avec les deux premiers chiffres correspondant à l'année (00 : 2000) et les deux suivant correspondant au mois. Donc dans chaque dossier appelés : [file://\\Montbrison\Applic\Administratifatelier2000\Certificatdecarrossage\Champdieu \\Montbrison\Applic\Administratifatelier2000\Certificatdecarrossage\Champdieu], on trouve des fichiers nommés de 000101 à 001299.
Mon but est de récupérer la valeur de la cellule H35 de chaque fichier et de les lister dans une colonne, mais aussi de lister le nom de chaque fichier en face de la référence correspondante.
Ex :  000101     45fr68f
        000102     98tj84s
        000103     25gr15d
        .........         ........

Pouriez vous si vous plait me dire comment faire cette macro qui nous permetterai de gagner beaucoup de temps.
Je vous remercie par avance en esperant avoir été clair dans mes explications.
Messages postés
2
Date d'inscription
mercredi 25 avril 2007
Dernière intervention
26 avril 2007
0
Merci
Si vous plais j'ai vraimen besoin d'aide!!!!!
Messages postés
4
Date d'inscription
vendredi 4 janvier 2008
Dernière intervention
4 janvier 2008
0
Merci
Moi j'ai a peu pre le meme probleme au boulot.
Mon patron a decider de changer sa facon de travailler du coup je peut aller chercher dans les 10000000 feuilles de factures qu'on a pour les encoder dans 1 classeur.

Dans dossier _Invoices Carey  --> X:\_INVOICES CAREY\Invoices 0-500\

Mes factures se nommes:
Invoice N°00001.xls
Invoice N°00002.xls
....

X:\_INVOICES CAREY\Invoices 0-500\Invoice N°00001.xls
X:\_INVOICES CAREY\Invoices 501-1000\Invoice N°00701.xls
...

Donc de chaque fichier j'ai besoin de copier 4 cellules qui sont toujours a la meme place :

Date                                      dans cellule B20
Numero Facture                    dans cellule B21
Nom client                             dans cellule fusione EFGH - 6 7 8 9 10 11 12 13 14
Montant                                 Dans cellule fusione G-H 51 (il n'y a que sa comme texte dans les cellules)

ces infos j'ai besoin de coller dans le classeur :

X:\_IMPAYES\Carey.xls

Le numéro de facture devrais venir dans la Colonne A
La date devrais venir dans Colonne B
Le nom du client dans C
Le montant dans D

Merci pour votre aide en tous cas.

Et bonne Année ;-)

Olli

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.