Scinder des fichiers Excel par colonne

cj06 -  
 cj06 -
Bonjour,

Je souhaiterai scinder un fichier en plusieurs fichiers xls.
Je m'explique : j'ai un fichier avec 10 colonnes. Les 3 premières contienent des données "fixes".Les 7 autres contiennent des données variables. Je souhaite générer 7 fichiers Excel à partir de ma source, 1 par colonne "variable". toutes les lignes seraient ramenées. Chaque fichier contiendrait donc 4 colonnes (les 3 fixes et la colonne variable). Le nom des fichiers seraient l'entete de la colonne variable.
Cela est il réalisable ? Si oui, avez vous des exemples?
D'avance merci de votre aide... Je desespère!
A voir également:

7 réponses

mikebzh Messages postés 135 Statut Membre 28
 
Salut,
Oui tout à fait possible, je n'ai pas le temps tout de suite de te le coder, mais voilà le principe
Fichier Source colonne A,B,C,D,E,F,G,H,I,J
Tu fais une boucle for...next

[Algo]
Pour numfichier = 1 a 7 faire
1.construire nom de fichier en string "enteteNcol" (colonne 3 + numfichier)
2.ouvrir le fichier "enteteNcol"
3.copier 3 premières colonnes dans source
4.coller 3 premieres colonnes de source dans "enteteNcol"
5.copier colonne 3 + numfichier (copiera la 4ème, puis la 5éme, etc....)
6.coller colonne 3 + numfichier de source dans "enteteNcol"
7.fermer "enteteNcol"
fin pour
[\algo]

Si tu as des problèmes pour coder tu peux enregistrer une macro en direct en faisant les manips tu verras le code que cela te sort et tu n'auras plus qu'à l'adapter à ta boucle.

J'aurais plus de temps ce soir, A plus.
0
cj06
 
Salut,
merci de ta réponse.
Je vais tenter le coup mais suis pas expert en VB...
Si tu as le temps de me coller le code, cela me serait d'un grand secours. En tout cas merci quand même.
0
Mike-31 Messages postés 18398 Date d'inscription   Statut Contributeur Dernière intervention   5 140
 
Salut,

En VBA comme le souligne notre mikebzh, mais si tu ne domine pas le VBA il y à plus simple un peu plus long avec l'éventualité de ne pas perdre des liaisons dans tes formules.
Tu conserve le fichier source comme il est et tu l'enregistre sous, donnes lui le nom de l'en tête de la première colonne.
Tu supprimes toutes les colonnes inutiles et enregistre.

Ouvres à nouveau ton fichier source et recommence l'opération en le nommant du nom de l'en tête de la deuxième colonne etc ...

C'est difficile de cerner tes besoins, mais tu devras peut être établir des liaisons entre les colonnes fixes afin d'avoir les mêmes données sur tous les fichiers

A+
0
cj06
 
Disons que je ne maîtrise pas VB mais je sais programmer dans d'autres langages... ALors à partir d'un code pré établi je devrais pouvoir me débrouiller.
L'objectif est d'automatiser car en fait, dans le fichier il y a plus d'une centaine de colonne donc plus d'une centaien de fichier à générer.Et je suis un peu faignant :-) ....
De plus, j'aurais d'autres fichiers de ce type à traiter.
Merci encore.
0
blfr Messages postés 59 Statut Membre 1
 
bon j'ai fais a l'arrache mais ca fonctionne chez moi a moins que j ai pas bien lu ce que tu voulais

Public Sub montest()
Dim WB As Workbook
Dim WS As Worksheet

Set WB = Workbooks("exo_sc.xls") ' ou le nom de ton fichier excel qui contient toute les colonnes
Set WS = Worksheets("exo_sc")

For a = 4 To 10
maCol = WS.Columns("A:C").Copy ' tes trois premieres colonnes
Workbooks.Add
newbook = ActiveWorkbook.Name
ActiveSheet.Paste
maCol2 = WS.Columns(Chr(a + 64)).Copy
ActiveSheet.Columns(4).Select
ActiveSheet.Paste
Next

End Sub
0
cj06
 
Ca marche nickel!!! Merci pour tout. Faut vraiment que je me mette à VB...
Une dernière pour la route si c'ets pas trop demandé : Là il m'ouvre les feuilles générées. Y a t-il moyen de ne pas les ouvrir mais de les enregistrer directement sur le disque avec comme nom l'intitulé de la colonne ?
0

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

Posez votre question
blfr Messages postés 59 Statut Membre 1
 
erf malheureusement j ai pu trop me pencher sur la question vu que je fais sur mes heures de boulot mais j avais que reussi si le fichier est ouvert sinon je vois pas comment inséré des données dans un fichier qui ne s ouvre pas a moins peut etre de l'ouvrir mais en tache de fond mais après je connais pas plus^^

++ bon week end
0
cj06
 
ok tant pis! Merci bcp, ça m'aide bien quand même!!!
0
mikebzh Messages postés 135 Statut Membre 28
 
Coucou
Que pensez-vous de ça ?

[code]
Private Sub Scinder_fichier()

'Ne pas oublier de dharger la référence microsoft excel 11.0 object library
Dim xlAPP As Application 'application pour fichier source
Dim xlAPP2 As Application 'application pour fichier destination
Dim source, dest As Workbook
Dim nom_fich As String
Dim col,nbcol As Integer
Dim fsource As Worksheet

Set xlAPP = CreateObject("Excel.Application")
xlAPP.Visible = False
Set source = xlAPP.Workbooks.Open("C:\Temp\source_donnees.xls")

'Maintenant source_donnees.xls est ouvert
'On selectionne la feuille concernée ici "init"
Set fsource = source.Worksheets("init")

nbcol = 7 'nb colonnes après les trois premières

For col = 4 To (nbcol + 3) 'colonnes

'on cree le nouveau fichier
nom_fich = "c:\Temp\" & fsource.Cells(1, col).Value & ".xls"
Set xlAPP2 = CreateObject("Excel.application")
xlAPP2.Visible = False
Set dest = xlAPP2.Workbooks.Add
dest.Worksheets(1).Name = "copie" & copie 'nom de la feuille dans dest

Set fdest = dest.Worksheets(1)
'copie des donnees
fdest.Range("A:C").Value = fsource.Range("A:C").Value
fdest.Columns(4).Value = fsource.Columns(col).Value

'Sauvegarde du fichier
dest.SaveAs nom_fich
dest.Close
'Fermeture dest
xlAPP2.Workbooks.Close
Set dest = Nothing
Set xlAPP2 = Nothing
Next col
'Fermeture source
source.Close
xlAPP.Workbooks.Close
Set source = Nothing
Set xlAPP = Nothing
MsgBox ("fini")
End
End Sub
[\code]

A plus
0
cj06
 
Hello,

C'est exactement ce que je cherchais! Merci! Ca marche très bien. Le seul problème, c'est que les ficheirs sont énormes. En effet, le programme copie un nombre quasi infinie de lignes en plaçant dans les cellules vides des #N/A...
0
mikebzh Messages postés 135 Statut Membre 28
 
#N/A c'est bizarre, tu dois avoir des formules ou du tri. Dans le cas que je t'ai envoyé, toute la colonne est prise, c'est pour ça que tu as des #N/A, il faudrait donc définir une zone à copier dans la colonne, en fait que ce qui nous intéresse.
Je regarde ça ce soir, a plus.
0
cj06
 
Pourtant je n'ai pas de formules dans la feuille...et pas de tri non plus. Je vais essayé de borner pour voir. Si j'y arrive :-)
0