Importer plusieurs fichiers type texte dans un fichier excel

nicroll Messages postés 6 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 16 octobre 2006 - 12 oct. 2006 à 21:26
nicroll Messages postés 6 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 16 octobre 2006 - 16 oct. 2006 à 18:17
Bonjour, j'ai besoin d'importer plusieurs fichiers ayant l'extension ".spe" dans un fichier excel....

Chaque fichier contient 2 colonnes, soit une colonne A identique pour chaque fichier, et une colonne B avec
des valeurs différentes dans chaque fichier... Les valeurs d'intérêt dans mes fichiers .spe commencent toutes à la ligne 39.

J'ai besoin de créer un fichier excel, comportant en colonne A la suite de chiffres suivante "1,2...1024" (donc 1024 lignes) et en colonne B la somme de toutes les valeurs retrouvées
dans chaque cellule Bx de tous mes fichiers sources.

Exemple :
Fichier 1         Fichier 2
A   B               A   B
1    0               1    2
2    5               2    0
3    3               3    9
4    6               4    2

Le fichier unique sera donc :
A   B
1    2   (0+2)
2    5   (5+0)
3    12 (3+9)
4    8   (6+2)

voici en bas le code que j'ai trouvé en fouillant sur le net.. Il me permet pour le moment d'importer les deux colonnes de mes fichiers....

Maintenant comment faire pour qu'il m'importe seulement une fois la première colonne et ensuite qu'il place toutes les deuxièmes colonnes les unes à la suite des autres...

Et bien sur comment faire ultimement pour avoir cette somme des colonnes B

Espérant cette explication claire quelqu'un peut il m'aider ???

Nicolas

----------------


Sub Consolidate()
With Application.FileSearch
    .NewSearch
    .LookIn = "C:\essai_pierre_ITRAX\XRF data" 'Change this to your directory
    .SearchSubFolders = False
    .Filename = "*.spe"
    If .Execute() > 0 Then
    Set Basebook = Workbooks.Add
        For i = 1 To 10 '.FoundFiles.Count
            Workbooks.OpenText Filename:=.FoundFiles(i), Origin:= _
            xlWindows, StartRow:=39, DataType:=xlDelimited, TextQualifier:= _
            xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
            Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1)
            Range("A1").CurrentRegion.Copy _
                Basebook.Worksheets(1).Range("IV2").End(xlToLeft).Offset(0, 1)

Basebook.Worksheets(1).Range("1:1").SpecialCells(xlCellTypeBlanks).Value = ActiveWorkbook.Name
            ActiveWorkbook.Close False
         Next i
        Basebook.Worksheets(1).Range("A:A").Delete
        Basebook.SaveAs Application.GetSaveAsFilename("Consolidatedfile.xls ")
    End If
End With
End Sub

12 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
12 oct. 2006 à 23:24
Je ne sais pas combien de fichiers tu dois importer, mais si tu sais
comment les importer, pourquoi ne pas les mettre les uns à la suite des
autres dans une feuille (comme ton code le fait, je pense), puis dans
une autre feuille tu fais un SOMME.SI pour récupérer les totaux... ?


Est-ce que ça fait du sens dans ton cas ?

Est-ce nécessaire de voir chaque colonne B les unes à côté des autres ?


Si oui, tu pourrais copier chaque fichier dans une feuille temporaire
de ton fichier Excel. Quand le fichier est copié, tu prends seulement
la colonne B que tu colles à droite de la précédente dans l'onglet
final. Quand tout est copié, tu mets une formule de SOMME dans la
dernière colonne à droite.

MPi
0
nicroll Messages postés 6 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 16 octobre 2006
13 oct. 2006 à 02:36
merci pour la réponse, et bien comme je peux avoir un maximum de 256 colonnes avec excel, je peux donc ouvrir 256 fichiers en même temps...

Bon si je peux déjà avoir seulement par exemple 100 fichiers d'ouvert, je peux procéder comme tu me le suggère... mais là dans mon code, il m'ouvre dans chaque fichier les colonnes A et B, dans ce cas comment lui faire ouvrir seulement la colonne B de chaque fichier...

Merci d'avance

nicolas
0
domsig Messages postés 125 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 11 mai 2010
13 oct. 2006 à 08:21
bonjour
et si tu importais chaque fichier sur une feuille, tu pourrais faire une consolidation, non ?
quitte à ouvrir un fichier, faire une conso, supprimer la feuille du fichier, ouvrir le fichier suivant, etc.... à la fin tu te retrouverais avec une feuille et tes colonnes A et B, somme de toutes les colonnes B....

bon courage

Allez voir mon site !
http://www.amis-marolles.org
le site d'une association s'occupant de patrimoine et de traditions
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
13 oct. 2006 à 11:37
Je n'ai jamais utilisé la Consolidation d'Excel, mais ça pourrait être une solution, semble-t-il.


Comme tu sembles avoir trop de fichiers à copier pour les mettre un
sous l'autre, il faudrait donc les mettre un à côté de l'autre, si
c'est possible (?).

Tu pourrais soit copier chaque fichier dans une feuille A, récupérer la
2eme colonne et la copier sur une autre feuille B et effacer la feuille
A avant de copier un autre fichier,

soit copier un fichier, supprimer la colonne A, te positionner à droite
et copier un autre fichier, et comme ça jusqu'à ce que tous les
fichiers soient copiés. Il te resterait à faire la somme de chaque
ligne. Méthode valable si ça n'excède pas le nombre de colonnes
possibles.

MPi
0

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

Posez votre question
nicroll Messages postés 6 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 16 octobre 2006
13 oct. 2006 à 15:55
pour le moment l'importation se fait l'une à côté de l'autre... donc j'ai deux colonnes par fichier.... Mais qu'est ce que je peux ajouter au code pour faire en sorte que seulement la colonne B soit prise en compte dans l'importation ?.... A défaut d'avoir ce que j'espérer obtenir, je peux me contenter d'avoir toutes mes colonnes B et je m'occuperai manuellement de la somme....

Avis ?
0
nicroll Messages postés 6 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 16 octobre 2006
13 oct. 2006 à 20:40
bonjour voici où j'en suis.. tout le système fonctionne bien mais j'aimerai interagir avec le code pour au démarrage lui imposer une valeur à deux variables....

Comment faire SVP ? il s'agit des valeurs 1 et 254 que l'on voit dans le code...

------------------------------------------

Sub Content()
With Application.FileSearch
    .NewSearch
    .LookIn = "C:\......" 'Changer ici le répertoire
    .SearchSubFolders = False
    .Filename = "*.spe"
    If .Execute() > 0 Then
    Set Basebook = Workbooks.Add
        For i = 1 To 254 '.FoundFiles.Count (laisser cela ici lorsque l'on décidéra de travailler sur tous les fichiers en même temps) 'Changer ici le nombre de fichiers désirés
            Workbooks.OpenText Filename:=.FoundFiles(i), Origin:= _
            xlWindows, StartRow:=39, DataType:=xlDelimited, TextQualifier:= _
            xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
            Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1))
            Columns("A:A").Select
            Selection.Delete Shift:=xlToLeft
            Range("B1").CurrentRegion.Copy _
                Basebook.Worksheets(1).Range("IV2").End(xlToLeft).Offset(0, 1)
                Basebook.Worksheets(1).Range("1:1").SpecialCells(xlCellTypeBlanks).Value = ActiveWorkbook.Name
            ActiveWorkbook.Close False
         Next i
        Range("A1:A1").Select
        Selection.Delete Shift:=xlToLeft
        Basebook.Worksheets(1).Columns("A:A").Delete
        Basebook.SaveAs Application.GetSaveAsFilename("Somme_Content.xls ")
    End If
End With

'ici commence l'ordre d'exécuter la somme... il faut changer pour le moment les codes de cellules en fonction du nombre de fichiers ouverts

    Selection.End(xlToRight).Select
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "Somme"
    For i = 1 To 1024
    ActiveCell.Offset(1, 0).Range("A1").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[-254]:RC[-1])"
    Next i
    ActiveWorkbook.Save
 End Sub
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
13 oct. 2006 à 23:55
Il faudrait d'une part que tu dises combien de fichiers tu as à traiter

Et est-ce que tu dois voir chaque "colonne B" de chaque fichier ou est-ce que seule la somme t'intéresse ?


Pour la somme, si toutes les colonnes ne sont pas remplies, tu pourrais
insérer une colonne en A et faire la somme de B à IV, ou de C à IV si A
contenait la donnée de base de la colonne A


Range("A1:A1024").Formula = "=Sum(B1:IV1")
ou

Range("A2:A1025").Formula = "=Sum(B2:IV2"), s'il y a des entêtes

Avec cette ligne de code, les formules de somme seront inscrites sur chaque ligne, sans avoir à faire de boucles.


Une façon de récupérer seulement la colonne B de chaque fichier est de
lire les fichiers ligne par ligne et de récupérer cette valeur, avec
Split ou Mid ou Right, .... mais c'est beaucoup plus long que de lire
le fichier et de le copier d'un coup. À toi de voir ce qui est le plus
important: le temps d'exécution, avoir seulement le total et ne pas
avoir à copier/coller tous les fichiers, ... En utilisant cette
méthode, tu pourrais créer un tableau de 1024 éléments qui accumulerait
la somme de chaque ligne "B" de chaque fichier, mais comme je dis, ça
risque d'être long... par contre, il n'y aurait pas limite du nombre de
fichiers...


You're the boss

MPi
0
domsig Messages postés 125 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 11 mai 2010
15 oct. 2006 à 09:13
ça me paraît bien compliqué tout ça... j'en reste à ma méthode.
tu crées un fichier "maître" dans lequel tu importes un à un les autres fichiers.
à chaque fichier tu fais :
for i=1 to 1024
valeur de la cellule (i,2) du fichier maître=valeur de la cellule (i,2) du fichier maître + valeur de la cellule (i,2) du fichier importé
next i

et t'as pas besoin de savoir combien de fichiers tu importes. Quand yen a plus, yen a plus.

Non ?

Allez voir mon site !
http://www.amis-marolles.org
le site d'une association s'occupant de patrimoine et de traditions
0
nicroll Messages postés 6 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 16 octobre 2006
15 oct. 2006 à 15:46
merci bien pour vos réponses.... exact domsig c'est exactement ce qui me semble le mieux pour ne pas être limité à 256 fichiers.... mais là niveau programmation je ne sais pas comment faire... peux développer un peu ce que j'ai à remplacer pour arriver à faire cela ???

merci
0
domsig Messages postés 125 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 11 mai 2010
15 oct. 2006 à 19:02
heu... là j'ai pas le temps je suis en week end...
mais demain au bureau si je ne suis pas débordé je m'en occupe...

Allez voir mon site !
http://www.amis-marolles.org
le site d'une association s'occupant de patrimoine et de traditions
0
domsig Messages postés 125 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 11 mai 2010
16 oct. 2006 à 09:06
Re.


Inspire-toi de ce qui suit.


J'ai fait un 1er classeur, que j'ai appelé "maitre.xls", dans lequel j'ai mis "rang" en A1 et "valeur" en B1.  De A2 à A41 j'ai mis 1, 2, 3... jusqu'à 40.


Ensuite j'ai fait 4 autres classeurs dans le même dossier, classeur1.xls, classeur2.xls etc avec la même structure que maitre.xls sauf qu'en plus j'ai mis des nombres de B2 à B41.


Sur maitre j'ai rajouté un bouton.


Voilà le code associé :


Public fichier As String

Private Sub CommandButton1_Click()
    fichier = Dir("classeur*.xls")
    If fichier <> "" Then
        traitement
        Do Until fichier = ""
            fichier = Dir
            If fichier <> "" Then
                traitement
            End If
        Loop
    End If
End Sub


Private Sub traitement()
    Dim n As Integer
    Dim nbre As Integer
    Workbooks.Open Filename:=fichier
    For n = 2 To 41
        Windows(fichier).Activate
        nbre = Worksheets("Feuil1").Cells(n, 2).Value
        Windows("maitre.xls").Activate
        Worksheets("Feuil1").Cells(n, 2).Value = Worksheets("Feuil1").Cells(n, 2).Value + nbre
    Next n
    Windows(fichier).Activate
    ActiveWindow.Close
End Sub


et voilà. Pourquoi se casser la tête......

Enjoy !

Allez voir mon site !
http://www.amis-marolles.org
le site d'une association s'occupant de patrimoine et de traditions
0
nicroll Messages postés 6 Date d'inscription jeudi 12 octobre 2006 Statut Membre Dernière intervention 16 octobre 2006
16 oct. 2006 à 18:17
ok merci beaucoup, j'essaye cela et je te tiens au courant !!!
0
Rejoignez-nous