Microsoft 365 Scinder des données en plusieurs fichiers Excel avec nom généré automatiquement

jckbrtn

XLDnaute Nouveau
Bonjour à tous,

Je cherche à scinder des données Excel dans différents fichiers Excel avec comme un nom de fichier généré via les infos de 2 colonnes.

Un exemple en annexe : les données brutes et dans les feuilles de calcul, les données qui devraient être scindées dans des fichiers différents avec le nom de fichier désiré colonne A et B = 161 AAAA par exemple

Merci d’avance pour votre aide !
 

Pièces jointes

  • Exemple annexe excel.xlsx
    22.5 KB · Affichages: 6

JHA

XLDnaute Barbatruc
Bonjour à tous,

Tu peux créer les tableaux sous Power Query et tu actualises les tableaux après ajout ou suppression des données de la feuille "Sheet1".
Pas de formule et pas de VBA.

JHA
 

Pièces jointes

  • Exemple annexe excel.xlsx
    45.5 KB · Affichages: 12

Jacky67

XLDnaute Barbatruc
Bonjour à tous,

Je cherche à scinder des données Excel dans différents fichiers Excel avec comme un nom de fichier généré via les infos de 2 colonnes.

Un exemple en annexe : les données brutes et dans les feuilles de calcul, les données qui devraient être scindées dans des fichiers différents avec le nom de fichier désiré colonne A et B = 161 AAAA par exemple

Merci d’avance pour votre aide !
Bonjour à tous
Une proposition toutes versions xl en PJ par vba avec ce code
VB:
Sub Creation()
    Dim Plage, C As Range
    Application.ScreenUpdating = False
    With Feuil1
        Set Plage = .[a1].CurrentRegion
        On Error Resume Next    ' si rien à filtrer
        Plage.Resize(, Plage.Columns.Count - 4).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("I1:J1"), Unique:=True
        For Each C In .Range("i2:i" & Application.Count(.Columns(9)))
            If Not Evaluate("ISREF('" & C & " " & C.Offset(, 1) & "'!A1)") Then Sheets.Add.Name = C & " " & C.Offset(, 1)
            With Sheets(C & " " & C.Offset(, 1))
                .Columns("a:f").Clear
                Plage.AutoFilter Field:=1, Criteria1:=C
                Plage.SpecialCells(xlCellTypeVisible).Copy .[a1]
            End With
        Next
        Plage.AutoFilter: .Columns("i:j").Clear: .[a1].Activate
    End With
End Sub
Oupps, s'il faut créer des classeurs et non des feuilles, une version V2
Les classeurs sont créés dans le répertoire du classeur maitre
 

Pièces jointes

  • Exemple annexe excel.xlsm
    28 KB · Affichages: 2
  • Exemple annexe excel V2.xlsm
    28.8 KB · Affichages: 8
Dernière édition:

jckbrtn

XLDnaute Nouveau
Bonjour à tous
Une proposition toutes versions xl en PJ par vba avec ce code
VB:
Sub Creation()
    Dim Plage, C As Range
    Application.ScreenUpdating = False
    With Feuil1
        Set Plage = .[a1].CurrentRegion
        On Error Resume Next    ' si rien à filtrer
        Plage.Resize(, Plage.Columns.Count - 4).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("I1:J1"), Unique:=True
        For Each C In .Range("i2:i" & Application.Count(.Columns(9)))
            If Not Evaluate("ISREF('" & C & " " & C.Offset(, 1) & "'!A1)") Then Sheets.Add.Name = C & " " & C.Offset(, 1)
            With Sheets(C & " " & C.Offset(, 1))
                .Columns("a:f").Clear
                Plage.AutoFilter Field:=1, Criteria1:=C
                Plage.SpecialCells(xlCellTypeVisible).Copy .[a1]
            End With
        Next
        Plage.AutoFilter: .Columns("i:j").Clear: .[a1].Activate
    End With
End Sub
Oupps, s'il faut créer des classeurs et non des feuilles, une version V2
Les classeurs sont créés dans le répertoire du classeur maitre
Salut Jacky,

J'essaie ça dès que possible!

Bonne soirée,

Jckbrtn
 

jckbrtn

XLDnaute Nouveau
Bonjour à tous
Une proposition toutes versions xl en PJ par vba avec ce code
VB:
Sub Creation()
    Dim Plage, C As Range
    Application.ScreenUpdating = False
    With Feuil1
        Set Plage = .[a1].CurrentRegion
        On Error Resume Next    ' si rien à filtrer
        Plage.Resize(, Plage.Columns.Count - 4).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("I1:J1"), Unique:=True
        For Each C In .Range("i2:i" & Application.Count(.Columns(9)))
            If Not Evaluate("ISREF('" & C & " " & C.Offset(, 1) & "'!A1)") Then Sheets.Add.Name = C & " " & C.Offset(, 1)
            With Sheets(C & " " & C.Offset(, 1))
                .Columns("a:f").Clear
                Plage.AutoFilter Field:=1, Criteria1:=C
                Plage.SpecialCells(xlCellTypeVisible).Copy .[a1]
            End With
        Next
        Plage.AutoFilter: .Columns("i:j").Clear: .[a1].Activate
    End With
End Sub
Oupps, s'il faut créer des classeurs et non des feuilles, une version V2
Les classeurs sont créés dans le répertoire du classeur maitre
Top, c'est hyper facile et même si le power query m'intéresse, je vais utiliser ta macro car pas le temps de me pencher sur autre chose pour le moment!
 

jckbrtn

XLDnaute Nouveau
Bonjour à tous
Une proposition toutes versions xl en PJ par vba avec ce code
VB:
Sub Creation()
    Dim Plage, C As Range
    Application.ScreenUpdating = False
    With Feuil1
        Set Plage = .[a1].CurrentRegion
        On Error Resume Next    ' si rien à filtrer
        Plage.Resize(, Plage.Columns.Count - 4).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("I1:J1"), Unique:=True
        For Each C In .Range("i2:i" & Application.Count(.Columns(9)))
            If Not Evaluate("ISREF('" & C & " " & C.Offset(, 1) & "'!A1)") Then Sheets.Add.Name = C & " " & C.Offset(, 1)
            With Sheets(C & " " & C.Offset(, 1))
                .Columns("a:f").Clear
                Plage.AutoFilter Field:=1, Criteria1:=C
                Plage.SpecialCells(xlCellTypeVisible).Copy .[a1]
            End With
        Next
        Plage.AutoFilter: .Columns("i:j").Clear: .[a1].Activate
    End With
End Sub
Oupps, s'il faut créer des classeurs et non des feuilles, une version V2
Les classeurs sont créés dans le répertoire du classeur maitre
Bonsoir Jacky,

J'avais testé et réussi à modifier ta macro car j'avais ajouter une colonne à mon tableau initial (en annexe).
J'avais noté d'adapter les lignes suivantes à ta macro mais je n'y arrive plus...
VB:
Plage.Resize(, Plage.Columns.Count - 4).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("I1:J1"), Unique:=True
.Columns("a:f").Clear

Est-ce que tu pourrais m'aider, stp? ;)

Merci d'avance et bon week end,

Jckbrtn
 

Pièces jointes

  • Exemple annexe excel.xlsm
    29.7 KB · Affichages: 6

Jacky67

XLDnaute Barbatruc
Bonsoir Jacky,

J'avais testé et réussi à modifier ta macro car j'avais ajouter une colonne à mon tableau initial (en annexe).
J'avais noté d'adapter les lignes suivantes à ta macro mais je n'y arrive plus...
VB:
Plage.Resize(, Plage.Columns.Count - 4).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("I1:J1"), Unique:=True
.Columns("a:f").Clear

Est-ce que tu pourrais m'aider, stp? ;)

Merci d'avance et bon week end,

Jckbrtn
Re..
On reste donc à la création de feuilles.
Les données numérique de la colonne A sont devenues des données texte
Donc ....Application.Count(.Columns(9))) devient Application.CountA(.Columns(9)))
VB:
Sub Creation()
    Dim Plage, C As Range
    Application.ScreenUpdating = False
    With Feuil1
        Set Plage = .[a1].CurrentRegion
        On Error Resume Next    ' si rien à filtrer
        Plage.Resize(, Plage.Columns.Count - 5).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("I1:J1"), Unique:=True
        For Each C In .Range("i2:i" & Application.CountA(.Columns(9)))
            If Not Evaluate("ISREF('" & C & " " & C.Offset(, 1) & "'!A1)") Then Sheets.Add.Name = C & " " & C.Offset(, 1)
            With Sheets(C & " " & C.Offset(, 1))
                .Columns("a:g").Clear
                Plage.AutoFilter Field:=1, Criteria1:=C
                Plage.SpecialCells(xlCellTypeVisible).Copy .[a1]
            End With
        Next
        Plage.AutoFilter: .Columns("i:j").Clear: .Activate
    End With
End Sub
 

Pièces jointes

  • Exemple annexe excel.xlsm
    29.4 KB · Affichages: 8
Dernière édition:

jckbrtn

XLDnaute Nouveau
Re..
On reste donc à la création de feuilles.
Les données numérique de la colonne A sont devenues des données texte
Donc ....Application.Count(.Columns(9))) devient Application.CountA(.Columns(9)))
VB:
Sub Creation()
    Dim Plage, C As Range
    Application.ScreenUpdating = False
    With Feuil1
        Set Plage = .[a1].CurrentRegion
        On Error Resume Next    ' si rien à filtrer
        Plage.Resize(, Plage.Columns.Count - 5).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("I1:J1"), Unique:=True
        For Each C In .Range("i2:i" & Application.CountA(.Columns(9)))
            If Not Evaluate("ISREF('" & C & " " & C.Offset(, 1) & "'!A1)") Then Sheets.Add.Name = C & " " & C.Offset(, 1)
            With Sheets(C & " " & C.Offset(, 1))
                .Columns("a:g").Clear
                Plage.AutoFilter Field:=1, Criteria1:=C
                Plage.SpecialCells(xlCellTypeVisible).Copy .[a1]
            End With
        Next
        Plage.AutoFilter: .Columns("i:j").Clear: .Activate
    End With
End Sub
Salut Jacky,

Merci de t'être penché rapidement sur mon problème.
Ca fonctionne sauf que ça créée des feuilles séparés et pas des fichiers.
Il faut modifier un truc dans ...?
Code:
 If Not Evaluate("ISREF('" & C & " " & C.Offset(, 1) & "'!A1)") Then Sheets.Add.Name = C & " " & C.Offset(, 1)

            With Sheets(C & " " & C.Offset(, 1))

Merci pour ton énième aide,

Jckbrtn
 

Jacky67

XLDnaute Barbatruc
Salut Jacky,

Merci de t'être penché rapidement sur mon problème.
Ca fonctionne sauf que ça créée des feuilles séparés et pas des fichiers.
Il faut modifier un truc dans ...?
Code:
 If Not Evaluate("ISREF('" & C & " " & C.Offset(, 1) & "'!A1)") Then Sheets.Add.Name = C & " " & C.Offset(, 1)

            With Sheets(C & " " & C.Offset(, 1))

Merci pour ton énième aide,

Jckbrtn
Re..
Ben...oui ; c'est celui que tu as fourni en PJ #7
J'avais constaté et précisé
On reste donc à la création de feuilles.
Même modif sur celui qui crée des classeurs
 

Pièces jointes

  • Exemple annexe excel.xlsm
    29.1 KB · Affichages: 9
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 108
Messages
2 085 375
Membres
102 876
dernier inscrit
BouteilleMan