Macro - spliter une feuille en plusieurs feuilles

eddylle

XLDnaute Nouveau
Bonjour à tous!

Je travaille actuellement avec un fichier excel de 2501 colonnes. La première colonne étant des dates, les 2500 suivantes sont des données pour 500 actions (donc 5 colonnes par action).

J'aimerais avoir le résultat suivant : Avoir 500 nouvelles feuilles, contenant a chaque fois les 5 colonnes par action. Sur chaque feuille, il faudrait également que le nom de l'action et que la 1ère colonne (la date) soit reprise.

Voici en très simplifié ce que j'aimerais (ici 2 actions au lieu de 500, donc seulement 2 nouvelles feuilles au lieu de 500)

Un très grand merci d'avance!

NB : Ne faites pas attention aux chiffres, ils sont bien sur censés etre les memes lorsqu'on passe du modèle initial au final. C'est juste qu'ici pour aller plus vite j'ai généré une fonction aléatoire.
 

Pièces jointes

  • test.xlsx
    10.8 KB · Affichages: 47
  • test.xlsx
    10.8 KB · Affichages: 45
  • test.xlsx
    10.8 KB · Affichages: 47
Dernière édition:

Efgé

XLDnaute Barbatruc
Re : Macro - spliter une feuille en plusieurs feuilles

Bonjour eddylle
Une proposition
Les feuilles nécessaires sont crées au fur et à mesure, si la feuille existe déja, elle est d'abord vidée de son contenue avant de mettre les nouvelles données.
Sur 500 feuilles je ne promets rien, même pas que tu puisse ouvrir un classeur aussi chargé....
VB:
Sub test()
Dim i&, TTmp As Variant, Tdate As Variant
Dim F As Worksheet, D As Object
Application.ScreenUpdating = False
With Sheets("Initial")
    Tdate = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(3))
    For i = 2 To .Cells(2, .Columns.Count).End(1).Column Step 5
        TTmp = .Range(.Cells(1, i), .Cells(UBound(Tdate, 1), i + 4))
        On Error Resume Next
        Set F = Sheets(TTmp(1, 1))
        If Err Then
            Err.Clear
            Sheets.Add(After:=Sheets(Sheets.Count)).Name = TTmp(1, 1)
            D(TTmp(1, 1)) = ""
            Set F = Sheets(TTmp(1, 1))
        End If
        If Not D.exists(F.Name) Then
            F.Range(F.Cells(1, 1), F.Cells(F.Rows.Count, 1).End(3)(1, 6)).ClearContents
            D(F.Name) = ""
        End If
        F.Cells(1, 1).Resize(UBound(Tdate, 1), 1) = Tdate
        F.Cells(1, 2).Resize(UBound(Tdate, 1), 5) = TTmp
        F.Columns.AutoFit
    Next i
    .Activate
End With
End Sub
Cordialement
 

Pièces jointes

  • test(2).xlsm
    16.4 KB · Affichages: 34
  • test(2).xlsm
    16.4 KB · Affichages: 49
  • test(2).xlsm
    16.4 KB · Affichages: 56
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Macro - spliter une feuille en plusieurs feuilles

Bonjour,

avec ce code
Code:
Sub Macro1()
'
' Macro1 Macro
'

For i = 1 To 500 Step 5
    Union(Range("A:A"), Range(Columns(i + 1), Columns(i + 5))).Select
    'Range("G1").Activate
    Selection.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Paste
    'on renomme l'onglet du nom du site
    ActiveSheet.Name = Cells(1, 2)
    Sheets("Initial").Activate
    
Next i
End Sub

attention, il va te créer 500 onglets meme si il n'y en a que 2 ou 800 à faire.
dans ce cas. il faut modifier la valeur finale du i..

Edit, salut Efgé..
solution beaucoup plus aboutie ;-)
 
Dernière édition:

TBC

XLDnaute Nouveau
Re : Macro - spliter une feuille en plusieurs feuilles

Bonjour tout le monde,

Efgé, Vgendron et dyonis0s, j'ai un problème similaire..Je voudrais faire la même chose, cad splitter le worksheet de la même facon, mais au lieu de creer de nouveaux worksheets, plutot creer de nouveaux workbooks. Pourriez vous m'aider svp?

Un enorme merci pour votre aide
 

Efgé

XLDnaute Barbatruc
Re : Macro - spliter une feuille en plusieurs feuilles

Bonjour TBC et bienvenu sur le forum
Il serait préférable d'ouvrir ta propre discution en donnant quelques explications ainsi qu'un petit fichier exemple anonyme pour que l'on puisse effectuer des tests.
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel