Importer plusieurs fichiers type texte dans un fichier excel
nicroll
Messages postés6Date d'inscriptionjeudi 12 octobre 2006StatutMembreDernière intervention16 octobre 2006
-
12 oct. 2006 à 21:26
nicroll
Messages postés6Date d'inscriptionjeudi 12 octobre 2006StatutMembreDernière intervention16 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
A voir également:
Importer plusieurs fichiers type texte dans un fichier excel
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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.
nicroll
Messages postés6Date d'inscriptionjeudi 12 octobre 2006StatutMembreDernière intervention16 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...
domsig
Messages postés125Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention11 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
nicroll
Messages postés6Date d'inscriptionjeudi 12 octobre 2006StatutMembreDernière intervention16 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....
nicroll
Messages postés6Date d'inscriptionjeudi 12 octobre 2006StatutMembreDernière intervention16 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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...
domsig
Messages postés125Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention11 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
nicroll
Messages postés6Date d'inscriptionjeudi 12 octobre 2006StatutMembreDernière intervention16 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 ???
domsig
Messages postés125Date d'inscriptionlundi 6 septembre 2004StatutMembreDernière intervention11 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