Copier plusieurs colonnes d'une feuille dans plusieurs feulles

Diane_courie

XLDnaute Nouveau
Bonjour,

J'ai une feuille "Base retravaillée" je dois copier les colonnes A B C D dans une autre feuille puis, A B C E dans une autre puis, A B C F dans une autre et ainsi de suite. Et ce très régulièrement.
Je n'arrive pas a réaliser une macro allant dans ce sens.

Merci d'avance
Diane
 

Pièces jointes

  • Export BI 03-2018 -v envxlsx.xlsx
    22.3 KB · Affichages: 31

job75

XLDnaute Barbatruc
Bonjour Diane_courie, vgendron,
dans ton fichier tu vas te retouver avec 115 feuilles...??
Ben oui sinon rien de drôle :
Code:
Private Sub CommandButton1_Click()
Dim i%, a$, j%
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'---RAZ---
Me.Move Before:=Sheets(1)
For i = Sheets.Count To 2 Step -1
    Sheets(i).Delete
Next
'---création des feuilles---
With Range("A1", UsedRange).EntireColumn
    For i = 4 To .Columns.Count
        a = Split(.Columns(i).Address(0, 0), ":")(0)
        Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = "ABC-" & a
        j = .Cells(2, i).MergeArea.Columns.Count 'pour DM2:DN2 qui sont fusionnées
        Union(.Columns(1).Resize(, 3), .Columns(i).Resize(, j)).Copy ActiveSheet.Range("A1")
        i = i + j - 1
    Next
End With
Me.Activate
End Sub
Les cellules fusionnées doivent se trouver uniquement en ligne 2 (voir DM2: DN2).

Fichier joint.

A+
 

Pièces jointes

  • Export BI 03-2018(1).xlsm
    55.5 KB · Affichages: 41

job75

XLDnaute Barbatruc
Re, salut Lone-wolf, merinos,
Est-il possible de renommer les feuilles générés avec la ligne 2 et 3 de chaque colonne.
Sans trop bousculer ses neurones :
Code:
Private Sub CommandButton1_Click()
Dim i%, j%
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next 'si un nom de feuille est déjà utilisé
'---RAZ---
Me.Move Before:=Sheets(1)
For i = Sheets.Count To 2 Step -1
    Sheets(i).Delete
Next
'---création des feuilles---
With Range("A1", UsedRange).EntireColumn
    For i = 4 To .Columns.Count
        Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = .Cells(2, i) & " " & .Cells(3, i)
        j = .Cells(2, i).MergeArea.Columns.Count 'pour DM2:DN2 qui sont fusionnées
        Union(.Columns(1).Resize(, 3), .Columns(i).Resize(, j)).Copy ActiveSheet.Range("A1")
        ActiveSheet.Columns(4).Resize(, j).AutoFit 'ajustement largeur
        i = i + j - 1
    Next
End With
Me.Activate
End Sub
Fichier (2).

Edit : fichier (2 bis) avec ajout des variables x et dL pour que toutes les feuilles soient nommées.

A+
 

Pièces jointes

  • Export BI 03-2018(2).xlsm
    60.7 KB · Affichages: 20
  • Export BI 03-2018(2 bis).xlsm
    61.1 KB · Affichages: 18
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Légère retouche au fichier (2) pour les largeurs des colonnes.

Avec ce fichier (3) création des 11 fichiers demandés :
Code:
Private Sub CommandButton1_Click()
Dim chemin$, d As Object, i%, x$, nomfich$, dL%, wb As Workbook, F As Worksheet, j%
chemin = ThisWorkbook.Path & "\Mes fichiers\" 'nom du dossier à adapter
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
'---création des classeurs---
MkDir chemin 'création du sous-dossier
Set d = CreateObject("Scripting.Dictionary")
With Range("A1", UsedRange).EntireColumn
    For i = 4 To .Columns.Count
        x = .Cells(2, i)
        nomfich = Split(x)(0) & ".xls"
        dL = Len(x) + Len(.Cells(3, i)) - 30 'nom d'onglet limité à 31 caractères
        If Not d.exists(nomfich) Then
            d(nomfich) = ""
            Workbooks(nomfich).Close
            Workbooks.Add(xlWBATWorksheet).SaveAs chemin & nomfich, 56 'fichier .xls
        End If
        Set wb = Workbooks(nomfich)
        Set F = wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count)) 'nouvelle feuille
        F.Name = Left(x, Len(x) - dL) & " " & .Cells(3, i)
        j = .Cells(2, i).MergeArea.Columns.Count 'pour DM2:DN2 qui sont fusionnées
        Union(.Columns(1).Resize(, 3), .Columns(i).Resize(, j)).Copy F.Range("A1")
        F.Columns(4).Resize(, j).AutoFit 'ajustement largeur
        i = i + j - 1
    Next i
End With
'---fermeture des classeurs---
For Each wb In Workbooks
    If d.exists(wb.Name) Then
        wb.Activate
        wb.Sheets(1).Delete
        wb.Sheets(1).Activate
        wb.Close True 'avec enregistrement
    End If
Next wb
End Sub
A+
 

Pièces jointes

  • Export BI 03-2018(3).xlsm
    63.4 KB · Affichages: 20
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 223
Messages
2 086 407
Membres
103 201
dernier inscrit
centrale vet