alfaimyarthurnadine
Messages postés3Date d'inscriptionmercredi 26 juillet 2006StatutMembreDernière intervention28 août 2006
-
27 août 2006 à 19:40
gatsu777
Messages postés2Date d'inscriptionlundi 4 septembre 2006StatutMembreDernière intervention25 septembre 2006
-
25 sept. 2006 à 11:13
Bonjour
Voilà, j'ai un gros souci. Je dois récupérer le contenu d'environ 2300 fichiers Excels pour les mettre tous sur un et un seul fichier récapitulatif, mais je n'y connais strictement rien aux macros.
Tous les fichiers sont construits de la même façon : à savoir, je dois récupérer pour chaque fichier le contenu de la cellule B11, ainsi que le contenu d'un tableau (6 colonnes, et X lignes) à partir de la ligne 16.
Et mettre le tout sur un seul fichier avec les titres de colonnes suivants : Père; Repère; Référence; Nbre; Désignation; Matière; Observations.
Exemple : B11 = 6987498
Tableau : 1ère ligne : B11( à recopier ici); 101; 123654; 4; Mon article; Inox; Metallica.
La valeur de B11, doit ête recopiée pour toutes les lignes du tableau.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201117 27 août 2006 à 20:54
Ok, je suis en train de te faire un code mais pour cela, il me faut encore qques précisions :
" (6 colonnes, et X lignes) à partir de la ligne 16."
A partir de la ligne 16,d'accord, mes tes colonnes, sont de A à F ? ou Autre ?
Le tableau final c'est de récupérer tes données de tes 2300 fichiers, je comptais donc te les placer dans un nouveau fichier, de la colonne B à G (et autant de lignes qu'il faudra).
Pour la colonne A, j'ai bien compris ce que tu voulais !
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201117 27 août 2006 à 22:10
Bon, je suis parti du principe que dans tes fichiers à ouvrir, il y a la valeur B11 à récupérer, puis les données de A16 à F... (jusqu'à la dernière ligne).
Pour faire, ouvre un classeur vierge, appuie sur Alt + F11, Alt + i, Alt + M (ça ouvre l'éditeur vbe, et insère un module).
T'as plus qu'à coller le code ci dessous, et à modifier une valeur dans la procédure Cherche_Fichiers_Dans_Dossier() (il y a le commentaire)
et à exécuter la 1ère procédure. (ça peut être long suivant le nombre de données, plusieurs dizaines de minutes ne métonneraient pas si tu as 2300 fichiers et plusieurs milliers (peut-être ?) de lignes)
<small>
Coloration syntaxique automatique </small>
Sub A_EXECUTER()
Call Cherche_Fichiers_Dans_Dossier
Call Classement_Donnees
End Sub
Sub Cherche_Fichiers_Dans_Dossier()
Dim strMessage As String
Dim i As Long
Set fs = Application.FileSearch
Sheets(1).Select
Sheets(1).Name = "Liste_Fichiers"
With fs
.LookIn = "C:\Chemin\dossier" ' *** mettre ici LA BONNE DIRECTORY !
.SearchSubFolders = True
.Filename = "*.xls" ' *** extension des fichiers excel
If .Execute(SortBy:=msoSortByFileName, _
SortOrder:=msoSortOrderAscending) > 0 Then
MsgBox "Il y a " & .FoundFiles.Count & _
" fichier(s) trouvé(s)."
For i = 1 To .FoundFiles.Count
Cells(i, 1).Value = .FoundFiles(i)
Next i
Else
MsgBox "Il n'y a aucun fichier."
End If
End With
End Sub
Sub Classement_Donnees()
Dim lngDerniereLigne As Long
Dim lngDerniereLigneTemp As Long
Dim lngLigne As Long
Dim lngColonne As Long
Dim lngCompteur As Long
Dim MonBook As Workbook
Dim BookTemp As Workbook
On Error Resume Next
lngDerniereLigne = Columns(1).Find("", , , , xlByRows, xlNext).Row - 1
If Err.Number = 91 Then MsgBox _
"Les cellules sont vides !", _
vbCritical, "Un problème est survenu": Exit Sub
On Error GoTo 0
Err.Clear
Set MonBook = ThisWorkbook
Sheets(2).Select
lngCompteur = 1
For i = 1 To lngDerniereLigne
Workbooks.Open Filename:=MonBook.Sheets(1).Cells(i, 1).Value
Set BookTemp = ActiveWorkbook
lngDerniereLigneTemp = Columns(1).Find("", [A16], , , xlByRows, xlNext).Row - 1
For lngLigne = 16 To lngDerniereLigneTemp
lngCompteur = lngCompteur + 1
For lngColonne = 2 To 7
lngDerniereLigne = Columns(1).Find("", , , , xlByRows, xlNext).Row - 1
With MonBook.Sheets(2)
.Cells(lngCompteur, lngColonne).Value = _
BookTemp.ActiveSheet.Cells(lngLigne, lngColonne).Value
.Cells(lngCompteur, 1).Value = _
BookTemp.ActiveSheet.Cells(11, 2).Value
End With
Next lngColonne
Next lngLigne
BookTemp.Close False
Set BookTemp = Nothing
Next i
alfaimyarthurnadine
Messages postés3Date d'inscriptionmercredi 26 juillet 2006StatutMembreDernière intervention28 août 2006 28 août 2006 à 13:34
Bonjour Mortalino,
Je vais d'essayer ton programme : OK, tout c'est bien passé.
Au total 1995 fichiers traités, donnant ~ 25000 lignes.
A moi maintenant de faie un peu le tri, car mes fichiers sources n'étaient pas tous très propres : du style, pas de valeur en B11, et certaines lignes du tableau vide.
Encore merci à toi d'avoir passé du temps à me répondre. Je ne connaissais pas encore ce principe de forum, et pour les très débutants comme moi, c'est une aide très précieuse, même si pour le moment je ne comprends pas encore tout ton code. (Je ne sais faire des macros que par apprentissage, et de là, ne sait pas les automatiser).
Encore merci et peut-être à bientôt.
hannebea
Messages postés6Date d'inscriptionvendredi 22 septembre 2006StatutMembreDernière intervention16 janvier 2007 22 sept. 2006 à 09:02
Bonjour,
Moi aussi je suis interessée et je n'y connais pas grand chose en macro. j'aimerais copier une somme de cellules d'un certain classeur dans une cellule d'un autre classeur. je pense que ca doit etre possible mais je n'ai toujours pas trouvé comment.
hannebea
Messages postés6Date d'inscriptionvendredi 22 septembre 2006StatutMembreDernière intervention16 janvier 2007 25 sept. 2006 à 08:55
Salut,
Alors je voudrais copier la somme de la plage de cellule F4 à F31 puis F54à F 72 et ainsi de suite du fichier STATISTIQUEmensuelle06.09.xls feuille "sept" dans la cellule D8 du fichier QUALITE 2006_09.xls. Puis je vroudrais copier la somme de G 4 à G31, G54à G7..... dans la cellule D9 du fichier QUALITE 2006_09.xls et ainsi de suite mais peut etre que je vais pouvoir continuer toute seule si tu m'aides a demarrer.
Merci beaucoup.