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!
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  1. 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
  2. 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
  3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
    1. 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
  4. 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
    1. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
    1. cj06
       
      ok tant pis! Merci bcp, ça m'aide bien quand même!!!
      0
  7. 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
    1. 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
  8. 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
    1. 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