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

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

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

Merci à vous

11 réponses

mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
27 août 2006 à 19:57
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"
<!--
0
alfaimyarthurnadine Messages postés 3 Date d'inscription mercredi 26 juillet 2006 Statut Membre Dernière intervention 28 août 2006
27 août 2006 à 20:32
Oui, ils sont tous stockés sous un même directory.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
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"
<!--
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
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

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"
<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
28 août 2006 à 12:16
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)

++
0
alfaimyarthurnadine Messages postés 3 Date d'inscription mercredi 26 juillet 2006 Statut Membre Dernière intervention 28 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.
0
gatsu777 Messages postés 2 Date d'inscription lundi 4 septembre 2006 Statut Membre Dernière intervention 25 septembre 2006
4 sept. 2006 à 15:16
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.
0
hannebea Messages postés 6 Date d'inscription vendredi 22 septembre 2006 Statut Membre Dernière intervention 16 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.


merci pour votre aide.
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
22 sept. 2006 à 16:34
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>
0
hannebea Messages postés 6 Date d'inscription vendredi 22 septembre 2006 Statut Membre Dernière intervention 16 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.
0
gatsu777 Messages postés 2 Date d'inscription lundi 4 septembre 2006 Statut Membre Dernière intervention 25 septembre 2006
25 sept. 2006 à 11:13
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
0
Rejoignez-nous