Comment diviser une feuille? [Fermé]

Signaler
-
 SuperPat -
Bonjour,

J'ai un fichier Excel contenant une feuille de 40 000 lignes que j'aimerais diviser en plusieurs feuilles de quelques lignes.

Dans la colonne A, j'ai un numéro de boîte.
Dans la colonne B, j'ai un numéro séquentiel correspondant à un des items contenus dans la boîte.
Dans les colonnes suivantes, j'ai la description de l'item.
Le tableau est trier en fonction de la colonne A, puis de la colonne B. J'utilise Excel 2010.

J'aimerais avoir une feuille pour chaque numéro de boîte.

Quelqu'un a-t-il une solution à me proposer?


A voir également:

3 réponses

Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
514
Bonjour,

Si tu n'as pas une myriade de boites, tu peux copier la feuille autant de fois qu'il y a de boites puis filtrer sur la colonne A pour supprimer les boites indésirées.

A+
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
9673
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 février 2021
2 039
Bonjour

Un essai avec macro
https://www.cjoint.com/?3LntbjJUUNA

Cdlmnt
Merci CCM81.
Ton fichier fonctionne et me convient. Malheureusement, il ne copie que les 3 premières colonnes de mon fichier. Or, j'en ai 28. Quel chiffre dois-je changer dans cette macro pour remédier à ce problème. (Je me débrouille en macro, mais pas beaucoup)

Option Explicit

Const FS = "Source"
Const codeb = 1
Const lideb = 2

Public Sub OK()
Dim lid As Long, lif As Long, lifin As Long, nomb As String, co As Long
Dim plage As Range, fini As Boolean
Application.ScreenUpdating = False
With Sheets(FS)
lifin = .Cells(Rows.Count, codeb).End(xlUp).Row
lid = lideb
fini = False
nomb = .Cells(lid, codeb).Value
While Not fini
lif = lid
Sheets.Add
ActiveSheet.Name = nomb
Sheets(nomb).Move after:=Sheets(Sheets.Count)
For co = codeb To codeb + 3
Sheets(nomb).Columns(co).ColumnWidth = .Columns(co).ColumnWidth
Next co
Set plage = .Range(.Cells(lideb - 1, codeb), .Cells(lideb - 1, codeb + 2))
plage.Copy Sheets(nomb).Cells(lideb - 1, codeb)
While .Cells(lif, codeb).Value = nomb
lif = lif + 1
Wend
Set plage = .Range(.Cells(lid, codeb), .Cells(lif - 1, codeb + 2))
plage.Copy Sheets(nomb).Cells(lideb, codeb)
nomb = .Cells(lif, codeb).Value
If nomb = "" Then fini = True
lid = lif
Wend
End With
Application.ScreenUpdating = True
End Sub
Messages postés
9673
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
19 février 2021
2 039
J'ai ajouté cofin à la liste des constantes, je ne l'avais pas fait, la flemme sans doute!!! Je suppose que tu as compris que
FS est le nom de la feuille des données
codeb est la 1° colonne de données à traiter
cofin est la dernière colonne de données à traiter
lideb est la première ligne de donnée

Const FS = "Source"
Const codeb = 1
Const cofin = 5
Const lideb = 2

https://www.cjoint.com/?3LnubAZ2UIv

Juste pour savoir, combien de temps ça met pour les 40000 lignes?

Cdlmnt
Aujourd'hui, je n'aurai pas le temps de m'attaquer à mon fichier. Je te donnerai la durée lundi.

Merci beaucoup