Concaténation de fichier excel

  • Initiateur de la discussion Sangokui
  • Date de début
S

Sangokui

Guest
Salutatous !!!

Voici mon problème, j'ai une petite routine qui m'extrait plusieurs fichiers excel ayant le meme format ( c'est à dire une même première ligne avec les mêmes entêtes de colonne), et je voudrais n'en faire q'un fichier avec les même entêtes de colonne mais avec toutes les lignes de tous mes fichiers excels !!!

comment puis je arriver à ce résultat de la manière la plus simple ???


Merci d'avance pour votre aide !!!

@+
 
C

Celeda

Guest
Bonjour,

Désolée de t'embêter Flaille mais j'ai une série d'erreurs qui se produit dont celle-ci :
ActiveCell.End(xlDown).Offset(1, 0).Select.
N'étant pas une pro de VBA peux-tu SVP me dire ce qu'il se passe. Merci

Celeda
 
S

Sangoku

Guest
super tonprog est sympa, mais il me fait une erreur à l'ouverture du fichier de la première cellule ???

y a t il une particularité pour les fichier listés ?? ( meme rep que le fichier totog.xls ??? ou autre chose ???)

Merci encore


@+
 
Z

zon

Guest
Bpnsoir à tous,


J'ai regardé un peu le fichier de Flaille,
Pour répondre d'abord à Celeda:

ActiveCell.End(xlDown).Offset(1, 0).Select.

permet de se déplacer à la premiere cellule non vide dans une colonne, or dans son code cette une plage de cellules qui est selectionnée donc pas possible de se déplacer avec cette commande.


Pour Sangoku, il faut déjà avoir ouvert les fichiers toto1.xls (peu importe si il est dans le même repertoire). Le match de foot étant terminé je vais essayé de faire un petit prog ce soir pour l'importation de ce style.



A++
 
V

Vériland

Guest
Bonsoir les gens de ce fil

je me suis permis d'apporter une modification à ta macro...
j'ai changé

ActiveCell.End(xlDown).Offset(1, 0).Select.
par
Columns(1).Find("*", , , , , xlPrevious).Offset(1, 0).Select

qui selectionne la dernière cellule pleine de la colonne 1...je pense que c'est ce qu'il te fallait...en dehors de cela j'ai également ajouté
Application.ScreenUpdating = False
qui désactive l'effet affichage des feuilles lors de l'application de la macro...

Ensuite il resterait pour la finition à définir le chemin exacte où sont situés les fichiers Toto1 etc...

Sub Import()
Application.ScreenUpdating = False
Worksheets("feuil2").Activate
Range("A1").Select
While ActiveCell <> ""
Set fichier = ActiveCell
Workbooks.Open Filename:=ActiveCell
Range("A1").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
Windows(2).Activate
Worksheets("feuil1").Activate
Columns(1).Find("*", , , , , xlPrevious).Offset(1, 0).Select
ActiveSheet.Paste
Application.Windows(2).Close (False)
Worksheets("feuil2").Activate
ActiveCell.Offset(1, 0).Activate
Wend
Worksheets("feuil1").Activate
End Sub


pour le reste c'est une belle macro...

A+Veriland.gif
 
S

Sangoku

Guest
Merci encore merci , vous êtes des stars !!!!

ca marche nickel, mais pour finir cette macro de manière nif, je souhaiterait, à l'aide d'une sélection multiple, pouvoir sélectionner au lancement de celle ci, tous les fichiers que je veux fusionner ... comment puis je faire cela ???

Ensuite l'ideal pour moi sera de supprimer toutes les colonnes vides du fichier obtenu et de les supprimer afin de pouvoir imprimer le fichier le plus clairement possible ???


encore merci d'avance pour votre aide !!!

@+
 
Z

zon

Guest
Voilà Veriland a été plus rapide,

Par contre Sangoku, moi au lieu d'utiliser une liste de fichiers dans la feuille2, je propose aprés chaque importation d'ouvrir le fichier qu'on veut importer.

Voici le code
Sub import()
'concatenation de fichier
Dim reponse As String
Dim l As Integer
Set wk = Workbooks("totog")
Set ws1 = wk.Sheets("feuil1")


1 ''''''''comme en basic on a une ligne 1
reponse = MsgBox("VOULEZ VOULEZ OUVRIR UN FICHIER", vbOKCancel, "OUVERTURE FICHIER")


If reponse = vbOK Then 'On accepte d'ouvrir lefichier
filetoopen = Application.GetOpenFilename("Excel fichiers (*.xls), *.xls")
If filetoopen <> False Then
Workbooks.Open (CStr(filetoopen))
Set wk2 = ActiveWorkbook
Set ws2 = wk2.Sheets(1) 'les donnees doivent être dans la 1ere feuille ou à adapter
ws2.Select
'Sélection de la premiére cellule contenant des données
Range("A1").Select
' Sélection de la plage de données à copier
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
' Copie des données
ws1.Activate
l = ws1.Range("A65536").End(xlUp).Row
Cells(1, 1).Offset(l, 0).Select

ActiveSheet.Paste
Else: Exit Sub
End If
Else: Exit Sub
End If
GoTo 1 'on revient au début
End Sub


A++

PS il faut rajouter des tests voir si le fichier qu'on ouvre n'est pas déjà ouvert.....
 

Pièces jointes

  • totog.xls
    31.5 KB · Affichages: 122
  • totog.xls
    31.5 KB · Affichages: 113
  • totog.xls
    31.5 KB · Affichages: 111
Z

zon

Guest
Désolé, je change juste une variable le petit l car on ne différencie pas le nombre 1 et la lettre l à l'affichage


Sub import()
'concatenation de fichier
Dim reponse As String
Dim derligne As Integer
Set wk = Workbooks("totog")
Set ws1 = wk.Sheets("feuil1")


1 ''''''''comme en basic on a une ligne 1
reponse = MsgBox("VOULEZ VOULEZ OUVRIR UN FICHIER", vbOKCancel, "OUVERTURE FICHIER")


If reponse = vbOK Then 'On accepte d'ouvrir lefichier
filetoopen = Application.GetOpenFilename("Excel fichiers (*.xls), *.xls")
If filetoopen <> False Then
Workbooks.Open (CStr(filetoopen))
Set wk2 = ActiveWorkbook
Set ws2 = wk2.Sheets(1) 'les donnees doivent être dans la 1ere feuille ou à adapter
ws2.Select
'Sélection de la premiére cellule contenant des données
Range("A1").Select
' Sélection de la plage de données à copier
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Copy
' Copie des données
ws1.Activate
derligne = ws1.Range("A65536").End(xlUp).Row
Cells(1, 1).Offset(derligne, 0).Select

ActiveSheet.Paste
Else: Exit Sub
End If
Else: Exit Sub
End If
GoTo 1 'on revient au début
End Sub
 
S

Sangoku

Guest
houlà t trop fort,

tu maitrise excel depuis combien d'années ??? tu passes ton temps à coder en VB ou VBA ???
En tous cas c nif que tu partage ton savoir avec tout le monde, là je dis bravissimo !!!

Enfin ta dernière macro est pas trop mal ( par la je veux dire au niveau pratique, car je n'oserai pas critiquer), car tout mes fichiers ayant la meme ligne d'entete, cette macro recopie autant de fois la ligne d'entete, alors que la première macro proposée ne recopiait que les ligne autre que celle d'entete .

Le fichier obtenu n'est donc pas terrible en présentation, alors que pourrais tu y faire pour arranger cela, maintenant que tu es chaud bouillant ::: LOL

Merci pour tout

@+
 
S

Sangoku

Guest
oups dsl ....

désolé mais en regardant un peu le code je suis parvenu à obtenir le résultat escompté, cependant pourrais t on sélectionner , en multiselection et en une fois tous les fichiers ???


Merci oh grand gana !!!

@+
 
Z

zon

Guest
Re Sangoku, merci pour tes compliments mais toi aussi tu peux et je t'encourage à le faire, ( au fait cela fait 6 mois que je me suis mis au VBA sous Excel, j'en apprends tous les jours grace au forum ...)


au lieu de mettre range("A1").select, je pense (à tester) que range("A2").select ne copiera plus tes entetes de colonnes.






A+++
 
S

Sangoku

Guest
encore une petite chose et je vais me coucher ....
comment peut on faire en sorte en ouvrant un classeur via l'explorateur, il lance sa macro automatiquement, en mettant excel en minimize ????

Merci à tous !!
@+
 

Discussions similaires

Statistiques des forums

Discussions
314 644
Messages
2 111 528
Membres
111 189
dernier inscrit
Laurent.