Récupérer contenu de plusieurs fichiers en 1 seul

Signaler
Messages postés
3
Date d'inscription
mercredi 26 juillet 2006
Statut
Membre
Dernière intervention
28 août 2006
-
Messages postés
2
Date d'inscription
lundi 4 septembre 2006
Statut
Membre
Dernière intervention
25 septembre 2006
-
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.

Si vous pouvez m'aider, ce serait super bien.

Merci à vous

11 réponses

Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

est ce que tes 2300 fichiers se trouvent dans le même dossier ?
(ce serait bien si OUI), dans ce cas, lequel ?

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
3
Date d'inscription
mercredi 26 juillet 2006
Statut
Membre
Dernière intervention
28 août 2006

Oui, ils sont tous stockés sous un même directory.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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"
<!--
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
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

Range("A1").Value = "Père" 
Range("B1").Value = "Repère" 
Range("C1").Value = "Référence" 
Range("D1").Value = "Nbre" 
Range("E1").Value = "Désignation" 
Range("F1").Value = "Matière" 
Range("G1").Value = "Observations" 

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 

End Sub 

<small>
Coloration syntaxique automatique </small>

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Re,

j'ai vu que tu t'es connecté ce matin, ça te convient ?

Sinon, pour info, il ne faut pas que tu aies + de 65 535 lignes à importer !
(sinon, il faut gérer sur plusieurs onglets)

++
Messages postés
3
Date d'inscription
mercredi 26 juillet 2006
Statut
Membre
Dernière intervention
28 août 2006

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.
Messages postés
2
Date d'inscription
lundi 4 septembre 2006
Statut
Membre
Dernière intervention
25 septembre 2006

Bonjour Mortalino, je viens de voir le module que tu as crée et il m'intéresse également.

J'aimerais récupérer des données de tableau pour n'en faire qu'un seul.

Les colonnes ont toutes le même nom et même position.

Les données vont de la colonne A6 à J6

Le nom des colonnes je crois avoir compris ou les remplacer dans le code. Mais après je suis un peu coincé.

Merci par avance pour ton aide.
Messages postés
6
Date d'inscription
vendredi 22 septembre 2006
Statut
Membre
Dernière intervention
16 janvier 2007

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.


merci pour votre aide.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut,

(Désolé, pas vu ton message gatsu.)


Beh mettez moi toutes les précisions nécessaires, je verrai ce que je peux faire (adresse cellules, noms feuilles, etc...)

@++





<hr width="100%" size="2" />

  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
Messages postés
6
Date d'inscription
vendredi 22 septembre 2006
Statut
Membre
Dernière intervention
16 janvier 2007

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.
Messages postés
2
Date d'inscription
lundi 4 septembre 2006
Statut
Membre
Dernière intervention
25 septembre 2006

Bonjour,

Ce n'est pas grave :) tu m'aides je vais pas me plaindre en plus.

J'ai des tableaux de cette forme :

Les colonnes vont de A à J
Mes titres de colonnes vonts de A5 à J5
Et les données de A6 à J6 et lignes suivantes

Mes tableaux sont tous formattés de la même manière.

Je voudrais que mes tableaux ne fassent plus qu'un.

Merci par avance pour ton aide