VBA scinder un fichier en plusieurs

surgeon84fr

XLDnaute Junior
Bonjour aux experts de cet excellent forum

J'ai besoin de vos compétences en macros VBA tant les miennes sont limitées.

Je dispose d'un assez gros fichier (28 colonnes sur 4000 lignes).
La première ligne contient les entêtes de chaque colonne.
Une des colonnes est dénommée "GRAND COMPTE".

Attention, le fichier de départ contient une macro à l'ouverture et à la fermeture qui protège les feuilles.

Mon besoin:
Je souhaiterais que la feuille soit triée selon les informations de cette colonne puis que soient créés autant de fichiers qu'il y a de données différentes dans la colonne "GRAND COMPTE".
Il faudrait que chaque fichier enregistré le soit dans un répertoire du même nom. Si le répertoire n'existe pas, la macro le crée.
Il faudrait que la macro teste l'existence du fichier dans le répertoire avant la sauvegarde et écrase l'existant.
Il faudrait aussi que le formatage du nom du nouveau fichier ressemble à ça:

"AAAAMMJJ_info de la colonne "GRAND COMPTE".xlsm
où AAAA est l'année, MM le mois et JJ le jour de la création.

Je vous ai mis en PJ le fichier TEST et les fichiers pour les résultats souhaités.

Je vous remercie par avance pour votre aide
 

Pièces jointes

  • TEST.xlsm
    42.3 KB · Affichages: 32
  • TEST.xlsm
    42.3 KB · Affichages: 37
  • 20160223_BCAC.xlsm
    41.4 KB · Affichages: 36
  • 20160223_CAA.xlsm
    41.2 KB · Affichages: 25
  • 20160223_CFIAR.xlsm
    40.8 KB · Affichages: 25

surgeon84fr

XLDnaute Junior
Re : VBA scinder un fichier en plusieurs

Bonsoir.

sans aide, j'ai cherché sur ce forum et ailleurs et voici ce que j'ai fait:
Je ne sais pas si c'est optimisé, mais ça fait ce que je voulais.

Bonne soirée à tous.

Cdlt
Code:
Option Explicit

Sub scinder()

Dim Nwbk As Workbook
Dim chemin1, chemin2, chemin3 As String, colGdCpte As String
Dim Nmbk As String
Dim i As Long, firstline As Long, lastline As Long

chemin1 = ThisWorkbook.Path

colGdCpte = "F"

With ThisWorkbook.Sheets("RCD")
    .Unprotect
    .Range(.Range("A1"), .Range("A1").End(xlToRight).End(xlDown)).Sort key1:=.Range(colGdCpte & "2"), order1:=xlAscending, Header:=xlYes

    For i = 2 To .Range("A" & .Rows.Count).End(xlUp).Row
        firstline = i
        
        While .Range(colGdCpte & i).Text = .Range(colGdCpte & i + 1).Text
            i = i + 1
        Wend
        
        Nmbk = .Range(colGdCpte & i).Value
        
        lastline = i
        
        Set Nwbk = Application.Workbooks.Add(xlWBATWorksheet)
        .Rows(1).Copy Nwbk.Sheets(1).Range("A1")
        .Rows(firstline & ":" & lastline).Copy Nwbk.Sheets(1).Range("A2")
                 
        If Dir(chemin1 & "\RCD PAR GRAND COMPTE", vbDirectory) <> "RCD PAR GRAND COMPTE" Then
        MkDir (chemin1 & "\RCD PAR GRAND COMPTE")
        End If
        chemin2 = chemin1 & "\RCD PAR GRAND COMPTE\"
        If Dir(chemin2 & Nmbk, vbDirectory) <> Nmbk Then
        MkDir (chemin2 & Nmbk)
        End If
        chemin3 = chemin2 & Nmbk
        On Error Resume Next
        Kill chemin3 & "\" & Format(Now, "yyyy" & "mm" & "dd") & "_" & Nmbk & ".xlsx"
        On Error GoTo 0
                            
        Nwbk.SaveAs chemin3 & "\" & Format(Now, "yyyy" & "mm" & "dd") & "_" & Nmbk & ".xlsx"
        
        Nwbk.Close True
    
    Next i

End With

End Sub
 
Dernière édition:

surgeon84fr

XLDnaute Junior
Re : VBA scinder un fichier en plusieurs

Bonjour le Forum.

J'espère avoir plus de succès avec ma nouvelle demande qui se rapporte à la macro précédemment citée.

Sans changer les fichiers exemples joints, pour d'autres cas, je vais avoir besoin que plusieurs "GRANDS COMPTE" différents soient cependant réunis dans un même fichier.

J'ai créé les 2 lignes suivantes: (pour rester sur les cas de mes exemples en sachant qu'il y en a beaucoup d'autres)

Code:
dim Tb as variant
tb=array("BCAC",CFIAR","CAA")

Je ne sais pas comment intégrer dans la macro précédente le test sur le nom du grand compte et vérifier qu'il appartient au l'ensemble prédéfini avant de créer le fichier de sauvegarde.

En espérant que quelqu'un trouve du temps pour m'aider. Je suis bel et bien coincé cette fois...

Cordialement
 

Marc L

XLDnaute Occasionnel
Bonjour ! P'tite démonstration …

VB:
Sub Demo()
    Dim Tb As Variant, M As String, S As String, V
        Tb = Array("BCAC", "CFIAR", "CAA")
    Do
            S = InputBox(M & vbLf & vbLf & "Code ?", "Test de vérification")
         If S = "" Then Exit Sub
            V = Application.Match(S, Tb, 0)
            M = S & IIf(IsError(V), " non trouvé …", " OK !")
' ou encore :
'           M = S & IIf(IsNumeric(V), " OK !", " non trouvé …")
    Loop
End Sub
_______________________________________________________________________________
Merci de cliquer sur J'aime ce post en bas à gauche de chaque message ayant aidé …

_______________________________________________________________________________
Je suis Paris, Charlie, …
 

surgeon84fr

XLDnaute Junior
Re : VBA scinder un fichier en plusieurs

Bonjour et merci Marc L

Je ne comprends pas ta macro.Comment ces lignes s'insèrent dans la mienne?
A moins que ce soit nécessaire, je n'ai pas besoin d'une nouvelle macro.

En fait lorsque ma macro s’exécute, elle parcourt la colonne F(GRANDS COMPTE) qui est triée par ordre alphabétique.
Donc, jusqu'à que le terme de la colonne F change, la macro tourne et dès que le terme change, elle copie et colle dans un nouveau fichier qui est renommé, sauvegardé et fermé.

"BCAC", "CFIAR" et "CAA" sont parmi plusieurs autres, admettons qu'on les appelle "A1", "A2","C1","D1".
Je crée donc 2 lignes comme précédemment:

Code:
dim Tb as variant
tb=array("BCAC",CFIAR","CAA")

Mon besoin (en espérant bien m'exprimer) est que la colonne F, étant classée par ordre alphabétique, va ressembler à ça:

"A1", "A2","BCAC","C1",CFIAR","CAA","D1".

Lorsque ma macro tourne et qu'elle suit l'ordre des termes, ceux qui doivent être réunis dans un même fichier ne se suivent pas :
Code:
array("BCAC",CFIAR","CAA")

C'est là que je coince et que je ne comprends pas ta macro supplémentaire.

Merci encore pour ton aide.
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 298
Membres
103 171
dernier inscrit
clemm