Fractionner données d'une feuille Excel en feuilles Export (avec variable)
Bonsoir tout le monde,
Grâce à xorsankukai de ce forum, j'ai réussi à avancer sur mon projet.
Seulement je souhaiterais apporter une modification mais je bloque.
Pour résumé, j'ai des données en Feuil2. Je récupère ces données que je fractionne en plusieurs feuilles nommées Export... par bloc de 20 lignes.
Cependant, j'aimerais que le 1er bloc sur la feuille Export 1 ne comporte pas forcément 20 lignes mais dépende plutôt d'une variable X renseignée depuis une inputbox.
Sub test()
Dim tb, sh As Worksheet
Dim cp%, depart&, derlig&
Application.ScreenUpdating = False
'********************************************************************
'efface les feuilles "Export"
'*******************************************************************
For Each sh In ThisWorkbook.Worksheets
Application.DisplayAlerts = False
If sh.Name Like "Export*" Then sh.Delete
Application.DisplayAlerts = True
Next sh
'********************************************************************
X = InputBox("Renseignez un nombre svp :", "Excel")
'********************************************************************
derlig = Sheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row
cp = 1: depart = 1
Do While depart <= derlig
tb = Sheets("Feuil2").Range("A" & depart).Resize(20, 4)
Sheets.Add Count:=1, after:=Worksheets(Worksheets.Count)
With ActiveSheet
.Name = "Export" & cp
.Range("A1").Resize(20, 4) = tb
End With
Erase tb
'Sheets("Feuil2").Activate
depart = depart + 20
cp = cp + 1
Loop
End SubMerci d'avance pour vos propositions :)
JB
Bonjour JB, bonjour le forum,
Essaie comme ça :
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim BE As Variant 'déclare la variable BE (Boîte d'Entrée)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim CP As Integer 'déclare la variable CP (ComPteur)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set OS = Worksheets("Feuil2") 'définit l'onglet OS
Application.DisplayAlerts = False 'empêche les message d'Excel
For Each O In Worksheets 'boucle sur tous les onglets O du classeur
If O.Name Like "Export*" Then O.Delete 'si le nom de l'onglet commence par "Export", supprime l'onglet
Next O 'prochain onglet de la boucle
Application.DisplayAlerts = True 'autorise les message d'Excel
BE = Application.InputBox("Renseignez un nombre svp.", Type:=1) 'definit la boîte d'entrée BE
If BE = False Then Exit Sub 'si bouton [Annuler] sort de la procédure
Worksheets.Add After:=Sheets(Sheets.Count) 'ajoute un onglet en dernière position
Set OD = ActiveSheet 'definit l'onglet de destination OD
OD.Name = "Export1" 'renomme l'onglet
OS.Rows(1 & ":" & BE).Copy OD.Range("A1") 'copy les lignes 1 à BE de l'onglet OS
DL = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne DL de la colonne A de l'onglet OS
CP = 2 'définit le compteur CP
For I = BE + 1 To DL Step 20 'boucle des lignes BE + 1 à DL par pas de 20
Worksheets.Add After:=Sheets(Sheets.Count) 'ajoute un onglet en dernière position
Set OD = ActiveSheet 'définit l'onglet OD
OD.Name = "Export" & CP 'renomme l'onglet
OS.Rows(I & ":" & I + 19).Copy OD.Range("A1") 'copie les lignes I à I + 19 de l'onglet OS et les copie dans A1 de l'onglet OD
CP = CP + 1 'incrémente CP
Next I 'prochaine ligne de la boucle
End SubBonsoir ThauThème,
Un grand merci pour votre contribution, j'ai réussi à adapter votre code et celui de xorsankukai à mon projet ! Merci pour les commentaires dans le code, cela permet de mieux comprendre chaque étape, surtout pour les novices comme moi :)
Bonne fin de soirée à vous :)
JB
Vieux motard que j'aimais...