création de n fichier à l'exécution d'une commande

  • Initiateur de la discussion Initiateur de la discussion wainso
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

wainso

XLDnaute Occasionnel
Bonjour le Forum
j'ai un fichier central qui regroupe dans une première colonne les agences d'une banque au nombre de 24
à travers un bouton de commande je souhaite créer 24 fichier excel (au nombre des agences) dont chacun regroupe les informations relative à chaque agence dans les colonnes B C et D du fichier central
comment faire par code
merci
 
Re : création de n fichier à l'exécution d'une commande

Salut wainso

Si j'ai bien compris tu as deux actions différentes
1 - Recenser les différentes banques et créer un fichier pour chaque banque
2 - Passer en revue les banques, colonne A du fichier principal, et copier chaque ligne de chaque banque dans le fichier correspondant à cette banque.
(Ça doit pouvoir se reformuler... 😱)

Je verrais ça comme ça :
1 - Une boucle sur les banques, la colonne A, et ajout de chaque banque à une collection. (Les collections n'acceptent pas les doublons)
Quand la colonne est parcourue la collection fournit la liste des banques.
Ces deux actions peuvent être concomitantes.

2 – Une nouvelle boucle sur les banques, colonne A, et pour chaque banque, placement de la ligne dans le fichier correspondant.

Le reste consiste à enregistrer les classeurs et à les fermer, et à nettoyer les espaces mémoire.

Code:
Option Explicit
Sub test()
Dim Collect As New Collection, derlig As Long, CL1 As Workbook
Dim FL1 As Worksheet, NomClassseur As String, DerLigBanque As Long
Dim Chemin As String, NomFich As String, NoLig As Long, i As Integer
    Application.ScreenUpdating = False
    Chemin = "D:\xls\Banques\" '******** Pense à modifier ***********
    NomClassseur = ThisWorkbook.Name 'le classeur contenant la macro ("Fichier central")

'Création des instances (pour plus de facilité de lecture)
    Set CL1 = Workbooks(NomClassseur)
    Set FL1 = CL1.Worksheets("feuil1")
    derlig = Split(FL1.UsedRange.Address, "$")(4)
    
    For NoLig = 2 To derlig
        On Error Resume Next
'Création de la collection contenant la liste des banques sans doublon
        If FL1.Cells(NoLig, 1) <> "" Then Collect.Add FL1.Cells(NoLig, 1).Value, FL1.Cells(NoLig, 1).Value
'création des classeurs correspondants
        If Err = 0 Then '(erreur si doublon)
            Workbooks.Add
            DoEvents 'donne au système le temps de créer un nouveau fichier
            ActiveWorkbook.SaveAs Chemin & Collect(Collect.Count)
            DoEvents ''donne au système le temps de sauvegarde le fichier créé
        End If
        On Error GoTo 0
    Next
'Copie des données correspondant à chaque banque dans le classeur correspondant
    For NoLig = 2 To derlig
        If FL1.Cells(NoLig, 1) = "" Then Exit For
        NomFich = FL1.Cells(NoLig, 1) & ".xls"
        DerLigBanque = Workbooks(NomFich).Worksheets("Feuil1").UsedRange.SpecialCells(xlCellTypeLastCell).Row
        FL1.Rows(NoLig).Copy Workbooks(FL1.Cells(NoLig, 1) & ".xls").Worksheets("feuil1").Cells(DerLigBanque + 1, 1)
    Next

'Effacement de la collection
    For i = Collect.Count To 1 Step -1
        NomFich = Collect(i) & ".xls"
        
'Sauvegarde et fermeture du classeur de chaque banque
        Workbooks(NomFich).Close True
'Effacement de la collection
        Collect.Remove i
    Next
    
'suppression des instances
    Set FL1 = Nothing
    Set CL1 = Nothing
    Application.ScreenUpdating = True
End Sub
Bon après-midi
 
Re : création de n fichier à l'exécution d'une commande

salut Epaf
j'ai testé le tout et ça marche à merveille
juste un truc pour copier l'entête du fichier central sur tous les autres classeurs crés j'ai fait un essai et comme je suis débutant je sens que le code peut s'améliorer voici le texte intégral
Sub test()
Dim Collect As New Collection, derlig As Long, CL1 As Workbook
Dim FL1 As Worksheet, NomClassseur As String, DerLigBanque As Long
Dim Chemin As String, NomFich As String, NoLig As Long, i As Integer
Application.ScreenUpdating = False
Chemin = "D:\Documents and Settings\WAJIH.BTS\Bureau\khrouf\" '******** Pense à modifier ***********
NomClassseur = ThisWorkbook.Name 'le classeur contenant la macro ("Fichier central")

'Création des instances (pour plus de facilité de lecture)
Set CL1 = Workbooks(NomClassseur)
Set FL1 = CL1.Worksheets("SuiviReal010_NotifNonEdite")
derlig = Split(FL1.UsedRange.Address, "$")(4)

For NoLig = 2 To derlig
On Error Resume Next
'Création de la collection contenant la liste des banques sans doublon
If FL1.Cells(NoLig, 1) <> "" Then Collect.Add FL1.Cells(NoLig, 1).Value, FL1.Cells(NoLig, 1).Value
'création des classeurs correspondants
If Err = 0 Then '(erreur si doublon)
Workbooks.Add
DoEvents 'donne au système le temps de créer un nouveau fichier
ActiveWorkbook.SaveAs Chemin & Collect(Collect.Count)
DoEvents ''donne au système le temps de sauvegarde le fichier créé
End If
On Error GoTo 0
Next
'Copie des données correspondant à chaque banque dans le classeur correspondant
For NoLig = 2 To derlig
If FL1.Cells(NoLig, 1) = "" Then Exit For
NomFich = FL1.Cells(NoLig, 1) & ".xls"
DerLigBanque = Workbooks(NomFich).Worksheets("Feuil1").UsedRange.SpecialCells(xlCellTypeLastCell).Row
FL1.Rows(NoLig).Copy Workbooks(FL1.Cells(NoLig, 1) & ".xls").Worksheets("Feuil1").Cells(DerLigBanque + 1, 1)

Next

'Effacement de la collection
For i = Collect.Count To 1 Step -1
NomFich = Collect(i) & ".xls"
Windows(NomClassseur).Activate
' Worksheets(FL1).Select
Rows("1:1").Select
Selection.Copy
Windows(NomFich).Activate
Range("A1").Select
ActiveSheet.Paste
Range("A1").Select
'Workbooks(NomFich).SaveAs Chemin & Collect(Collect.Count)
'Sauvegarde et fermeture du classeur de chaque banque
Workbooks(NomFich).Close True
'Effacement de la collection
Collect.Remove i
Next

'suppression des instances
Set FL1 = Nothing
Set CL1 = Nothing
Application.ScreenUpdating = True
Application.CutCopyMode = False
Range("A1").Select

End Sub
merci
 
Re : création de n fichier à l'exécution d'une commande

Pour copier l'entête, tu as deux possibilités selon que tu peux ou non modifier le fichier principal (modification temporaire pour les besoins de la chose...)
Le fichier principal peut être modifié temporairement:
- Tu crées une copie de la feuille contenant l'entête
- Tu effaces les données qu'elle contient
- Tu déplaces la feuille vers un nouveau classeur (ici, une explication : "Move" sans paramètre crée automatiquement un nouveau classeur, donc plus besoin de le créer avec Add)
- Tu renommes la feuille

Voici le code qui INCLUT LA COPIE DES ENTÊTES DE COLONNES
Remarque : Quand tu copies du code dans un message, utilise les balises "CODE" Icône # :
Sélection du code + 1 clic sur l'icône #

'******* LIGNES AJOUTÉES OU MODIFIÉES

Code:
Option Explicit
Sub test()
Dim Collect As New Collection, Derlig As Long, CL1 As Workbook
Dim FL1 As Worksheet, NomClassseur As String, DerLigBanque As Long
Dim Chemin As String, NomFich As String, NoLig As Long, i As Integer
    
'Evite les mouvements de feuilles
    Application.ScreenUpdating = False
'****** Evite les demandes de confirmation d'Excel
    Application.DisplayAlerts = False
    
    Chemin = "D:\xls\Banques\" '******** Pense à modifier ***********
    NomClassseur = ThisWorkbook.Name 'le classeur contenant la macro ("Fichier central")

'Création des instances (pour plus de facilité de lecture)
    Set CL1 = Workbooks(NomClassseur)
    Set FL1 = CL1.Worksheets("feuil1")
    Derlig = Split(FL1.UsedRange.Address, "$")(4)
    
    For NoLig = 2 To Derlig
        On Error Resume Next
'Création de la collection contenant la liste des banques sans doublon
        If FL1.Cells(NoLig, 1) <> "" Then Collect.Add FL1.Cells(NoLig, 1).Value, FL1.Cells(NoLig, 1).Value
'création des classeurs correspondants
'MsgBox Err.Number
        If Err.Number = 0 Then '(erreur si doublon)
'******* Création d'une copie de la feuille principale contenant l'entête
            FL1.Copy After:=CL1.Worksheets(CL1.Worksheets.Count)

'******* Suppression des données dans la copie à partir de la ligne 2
            CL1.Worksheets(CL1.Worksheets.Count).Range("A2:" & _
                  Split(ActiveSheet.UsedRange.Address, ":")(1)).Delete

'******* Déplacement de la copie dans un nouveau classeur
            CL1.Worksheets(CL1.Worksheets.Count).Move
'donne au système le temps de créer un nouveau fichier
            DoEvents
'******* Renomme la feuille copiée
            ActiveSheet.Name = "Feuil1"
            ActiveWorkbook.SaveAs Chemin & Collect(Collect.Count)
'donne au système le temps de sauvegarde le fichier créé
            DoEvents
        End If
        On Error GoTo 0
    Next
'Copie des données correspondant à chaque banque dans le classeur correspondant
    For NoLig = 2 To Derlig
        If FL1.Cells(NoLig, 1) = "" Then Exit For
        NomFich = FL1.Cells(NoLig, 1) & ".xls"
        DerLigBanque = Workbooks(NomFich).Worksheets("Feuil1").UsedRange.SpecialCells(xlCellTypeLastCell).Row
        FL1.Rows(NoLig).Copy Workbooks(FL1.Cells(NoLig, 1) & ".xls").Worksheets("feuil1").Cells(DerLigBanque + 1, 1)
    Next

'Sauvegarde et fermeture du classeur de chaque banque & Effacement de la collection
    For i = Collect.Count To 1 Step -1
        NomFich = Collect(i) & ".xls"
        
'Sauvegarde et fermeture du classeur de chaque banque
        Workbooks(NomFich).Close True
'donne au système le temps d'enregistrer et de fermer le fichier complété
        DoEvents
        
'Effacement de la collection
        Collect.Remove i
    Next
'****** On se replace sur la cellule A1 de la feuil1 (à adapter) du classeur principal
    FL1.Activate
    FL1.Range("A1").Select

'suppression des instances
    Set FL1 = Nothing
    Set CL1 = Nothing
    Application.ScreenUpdating = True
End Sub
Pour fermer le classeur principal, utiliser cette syntaxe
Code:
'Ce code ferme le classeur sans le modifier
Workbooks("NomClassseur").close false
A placer juste avant End sub (sans quoi le reste de la macro ne s'exécutera pas 😉

Bon après-midi
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
227
Réponses
32
Affichages
1 K
Retour