XL 2016 Découper un fichier excel en plusieurs de 1000 lignes

youns33

XLDnaute Nouveau
Bonjour à tous,

Désolé j'ai trouvé plusieurs post un peu identique au miens mais j'ai l'impression que les macros proposées sont faites pour des fichiers spécifique... et j'arrive pas à les faire fonctionner avec mon fichier >>> donc nouveau post

Donc voilà j'ai un gros fichier excel de 120000 lignes et j'aimerais pouvoir le découper en plusieurs fichier de 500, 1000 ou 2000 lignes...

J'aimerais pouvoir choisir le nombre de ligne suivant le besoin et qu'il garde à chaque fois l’entête (la 1er ligne).
Il faut que les différents fichiers générés se retrouve dans le dossier ou est placé la macro, si il y a besoin d'un nom on peut appeler ce dossier "macro de découpe".
J'ai mis un exemple du fichier en PJ (volontairement réduit le nombre de ligne pour qu'il soit moins lourd).

Dans l’idéale j’aimerais que le bouton de la macro et la case ou on choisit le nombre de lignes par fichier soit mis en feuille 1, et les données à séparé en plusieurs fichier en feuille 2.

Aussi le fichier en exemple comporte 2 colonnes, si possible que la macro fonctionne quelques soit le nombre de colonnes.
Voila j’espère que j’ai assez détaillé ma demande, n’hésitez pas à me poser des questions autrement.

Merci d’avance à tous
 

Pièces jointes

  • Macro de decoupe.xlsm
    559.2 KB · Affichages: 299
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour Staple1600 ;),
PS: @mapomme
Par contre une fois, la fusion effectuée, l'userform reste affiché.
C'est voulu?

Oui! On pourrait avoir plusieurs séries de fichiers découpés dans le même répertoire. Après avoir fait une fusion sur une série de fichiers découpés, on pourrait vouloir faire une autre fusion avec une autre série (d'où la présence du bouton 'sélection par masque).
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour Eval,

Les fichiers .xlsm joints à ce fil par ma pomme sont adaptés au cas spécifique des fichiers de youns33. La structure de vos fichiers à agréger (commandes Lyreco) n'a absolument aucun rapport avec celle pour laquelle les macros ont été conçues. Le fichier "youns33-Agréger-v1(commenté).xlsm" est donc inutilisable dans votre cas :(.
Il vaut donc mieux créer un nouveau fil de discussion. et bien décrire la structure des vos fichiers à agréger et la structure du fichier agrégé.
 

Eval

XLDnaute Nouveau
Bonjour Eval,

Les fichiers .xlsm joints à ce fil par ma pomme sont adaptés au cas spécifique des fichiers de youns33. La structure de vos fichiers à agréger (commandes Lyreco) n'a absolument aucun rapport avec celle pour laquelle les macros ont été conçues. Le fichier "youns33-Agréger-v1(commenté).xlsm" est donc inutilisable dans votre cas :(.

Bonjour mapomme
Merci pour votre réponse
Vous est-il possible de me créer un fichier pour mon cas ?
 

Staple1600

XLDnaute Barbatruc
Re,

@Eval
Re
Est-ce parce que la 1ère ligne est vide ?
Bingo!
Oui comme ta première ligne est vide
dercol est égal à 1
c'est pour cela que la recopie ne prenait en compte qu'une seule colonne.

@mapomme
J'ai testé rapidement, il y a pas un petit MsgBox qui dit "Traitement terminé" ou un truc du genre?
Tu me diras, "JM, gros fainéant, tu n'as qu'à aller lire mon code commenté!!"
Et tu as bien raison.
Mais comme t'es connecté je préserve ma santé ;) et mes jolis yeux.
 

Eval

XLDnaute Nouveau
Re,

@Eval

Bingo!
Oui comme ta première ligne est vide
dercol est égal à 1
c'est pour cela que la recopie ne prenait en compte qu'une seule colonne.

@mapomme
J'ai testé rapidement, il y a pas un petit MsgBox qui dit "Traitement terminé" ou un truc du genre?
Tu me diras, "JM, gros fainéant, tu n'as qu'à aller lire mon code commenté!!"
Et tu as bien raison.
Mais comme t'es connecté je préserve ma santé ;) et mes jolis yeux.


Staple1600
Ok et merci pour l'info.
J'ai enlevé la 1ère ligne de chaque fichier mais cela est toujours idem. Dans le nouveau fichier je n'ai qu'une seule colonne !
 

Staple1600

XLDnaute Barbatruc
Re

@Eval
Dans le fichier Test que tu as joins, il y avait cette macro
Macro que j'ai modifié pour qu'elle fasse ce que tu souhaites
Donc avant de tester, on met ses lunettes, on lit bien le code et ses commentaires
VB:
Sub GetSheets()
'Déclarations variable
Dim sheet As Worksheet, Path$
Path = "F:\aut\Il\Supprimer\Lhuile\DePalme\" 'ici mettre le bon chemin
' en n'oubliant pas le \ final
Application.ScreenUpdating = False
Filename = Dir(Path & "*.xlsx")' ici attention à l'extension
  Do While Filename <> ""
  Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
     For Each sheet In ActiveWorkbook.Sheets
     sheet.UsedRange.Copy ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp)(1)
     Application.CutCopyMode = False
  Next sheet
     Workbooks(Filename).Close False
     Filename = Dir()
  Loop
End Sub
 

Eval

XLDnaute Nouveau
Re

@Eval
Dans le fichier Test que tu as joins, il y avait cette macro
Macro que j'ai modifié pour qu'elle fasse ce que tu souhaites
Donc avant de tester, on met ses lunettes, on lit bien le code et ses commentaires
VB:
Sub GetSheets()
'Déclarations variable
Dim sheet As Worksheet, Path$
Path = "F:\aut\Il\Supprimer\Lhuile\DePalme\" 'ici mettre le bon chemin
' en n'oubliant pas le \ final
Application.ScreenUpdating = False
Filename = Dir(Path & "*.xlsx")' ici attention à l'extension
  Do While Filename <> ""
  Workbooks.Open Filename:=Path & Filename, ReadOnly:=True
     For Each sheet In ActiveWorkbook.Sheets
     sheet.UsedRange.Copy ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp)(1)
     Application.CutCopyMode = False
  Next sheet
     Workbooks(Filename).Close False
     Filename = Dir()
  Loop
End Sub

Staple1600
Merci pour votre aide mais comme déjà dit dans un message précédent, je n'y connais rien en macro, code, etc...
Puis-je vous demander s'il serait possible de me faire un petit fichier comme mapomme a fait ?
Fichier avec une possibilité de choisir le répertoire et les fichiers à fusionner ?
Encore merci pour votre aide.
 

Staple1600

XLDnaute Barbatruc
Re

@Eval
[avis personnel]
Tu es inscrit depuis 2013
Donc tu ne peux pas prétendre n'y rien connaitre ;)
Il suffit simplement de mettre les mains dans le cambouis
(Tu es connecté sur le web, tu sais lire, il suffit de chercher les infos nécessaires ;)
mot-clés: copier une macro | lancer une macro etc....)
[/avis personnel]

Voici une adaptation d'un macro que j'ai posté dans une autre discussion
VB:
Sub Selection_Tout_Type_Fichier_XL_SpecialEVAL()
Dim Dossier$, Classeur$, wb As Workbook, sheet As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False: Application.EnableEvents = False: Application.Calculation = -4135
    With Application.FileDialog(4)
    .AllowMultiSelect = False
    .Title = "Sélectionner le dossier de votre choix"
    If .Show = -1 Then
        Dossier = .SelectedItems(1)
    End If
    If Dossier = "" Then Exit Sub
    End With
    Classeur = Dir(Dossier & "\*.xls*")
    Do While Classeur <> ""
        Set wb = Workbooks.Open(Dossier & "\" & Classeur)
        DoEvents
            For Each sheet In wb.Sheets
            sheet.UsedRange.Copy ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp)(1)
            Next sheet
        wb.Close True
        DoEvents
        Classeur = Dir
    Loop
MsgBox "Tâche terminée!"
Application.EnableEvents = True: Application.Calculation = -4105: Application.ScreenUpdating = True
End Sub

PS: Depuis au moins 5 ans je ne poste plus aucun fichier Excel, cela dans le secret et fol espoir, de voir les padawans Exceliens s'impliquer un max dans la résolution de leur question.
Comme dirait Evelyne T. : C'est mon choix. ;)
 
Dernière édition:

Eval

XLDnaute Nouveau
Re

@Eval
[avis personnel]
Tu es inscrit depuis 2013
Donc tu ne peux pas prétendre n'y rien connaitre ;)
Il suffit simplement de mettre les mains dans le cambouis
(Tu es connecté sur le web, tu sais lire, il suffit de chercher les infos nécessaires ;)
mot-clés: copier une macro | lancer une macro etc....)
[/avis personnel]

Voici une adaptation d'un macro que j'ai posté dans une autre discussion
VB:
Sub Selection_Tout_Type_Fichier_XL_SpecialEVAL()
Dim Dossier$, Classeur$, wb As Workbook, sheet As Worksheet
Application.ScreenUpdating = False
Application.DisplayAlerts = False: Application.EnableEvents = False: Application.Calculation = -4135
    With Application.FileDialog(4)
    .AllowMultiSelect = False
    .Title = "Sélectionner le dossier de votre choix"
    If .Show = -1 Then
        Dossier = .SelectedItems(1)
    End If
    If Dossier = "" Then Exit Sub
    End With
    Classeur = Dir(Dossier & "\*.xls*")
    Do While Classeur <> ""
        Set wb = Workbooks.Open(Dossier & "\" & Classeur)
        DoEvents
            For Each sheet In wb.Sheets
            sheet.UsedRange.Copy ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp)(1)
            Next sheet
        wb.Close True
        DoEvents
        Classeur = Dir
    Loop
MsgBox "Tâche terminée!"
Application.EnableEvents = True: Application.Calculation = -4105: Application.ScreenUpdating = True
End Sub

PS: Depuis au moins 5 ans je ne poste plus aucun fichier Excel, cela dans le secret et fol espoir, de voir les padawans Exceliens s'impliquer un max dans la résolution de leur question.
Comme dirait Evelyne T. : C'est mon choix. ;)


Staple1600,
Ok mais merci tout de même pour l'aide.
@+
Eval
 

Staple1600

XLDnaute Barbatruc
Re

@Eval
Ok mais merci *tout de même pour l'aide.
Ce qui veut dire?
Que tu ne vas pas mettre les mains dans le cambouis?
Dommage car la macro que je propose fonctionne et recopie tous les bons de commande de tout les classeurs se situant dans le répertoire choisi.
(j'ai testé en faisant trois copies de ton fichier Test.xls que j'ai enregistré en Test1.xlsx puis copier en Test2.xls et Test3.xls
Résultat: la macro a tout recopié à la queue leu leu dans le classeur ou j'avais mis la macro)

*: à mon sens , le tout de même est de trop, camarade ;)
 

Eval

XLDnaute Nouveau
Re

@Eval

Ce qui veut dire?
Que tu ne vas pas mettre les mains dans le cambouis?
Dommage car la macro que je propose fonctionne et recopie tous les bons de commande de tout les classeurs se situant dans le répertoire choisi.
(j'ai testé en faisant trois copies de ton fichier Test.xls que j'ai enregistré en Test1.xlsx puis copier en Test2.xls et Test3.xls
Résultat: la macro a tout recopié à la queue leu leu dans le classeur ou j'avais mis la macro)

*: à mon sens , le tout de même est de trop, camarade ;)

Bonsoir Staple1600,
Je ne voulais certainement pas vous froisser avec ma réponse et si je l’ai fait, je m’en excuse car ce n’est n’etait pas voulu.
J’ai voulu simplement dire que j’etais un peu déçu de ne pas avoir éventuellement un petit fichier réalisé avec un code pour mon cas. Comme déjà dit, je n’y connais rien en macro, code, etc... En tout cas merci pour l’aide reçue et encore une fois mes plus sincères excuses. Bonne soirée à vous.
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@Eval
N'y rien connaitre n'empêche nullement de tenter l'aventure.
Il existe sur le net moults tutoriels (avec copie d'écran ou video) qui explique comment intégrer une macro dans un classeur et comment l'éxécuter.
Il suffit donc d'utiliser le moteur de recherche de ton choix et de faire les recherches idoines.
Exemple: excel comment lancer une macro
renvoie ici dans le moteur de recherche
https://support.office.com/fr-fr/article/Exécuter-une-macro-5e855fd2-02d1-45f5-90a3-50e645fe3155
 

Eval

XLDnaute Nouveau
Bonjour le fil, le forum

@Eval
N'y rien connaitre n'empêche nullement de tenter l'aventure.
Il existe sur le net moults tutoriels (avec copie d'écran ou video) qui explique comment intégrer une macro dans un classeur et comment l'éxécuter.
Il suffit donc d'utiliser le moteur de recherche de ton choix et de faire les recherches idoines.
Exemple: excel comment lancer une macro
renvoie ici dans le moteur de recherche
https://support.office.com/fr-fr/article/Exécuter-une-macro-5e855fd2-02d1-45f5-90a3-50e645fe3155

Bonjour Staple1600,
Ok et merci pour cette nouvelle aide.
Je vais voir ce lien et essayer de le faire.
Si soucis, puis je me permettre de vous demander encore de l’aide ?
Bonne journée et au plaisir.
 
Dernière édition:

Discussions similaires