Eclater une base par code sur onglets

Bernard-Louis

XLDnaute Occasionnel
Bonjour le forum,
Je viens vers vous pour avoir une macro, si cela est possible, car le fichier comporte toutes les semaines entre 10 000 et 15 000 lignes.

-Il s’agit d’éclater le fichier source par chaque « code emission »(colonne A) et de recopier les lignes correspondantes de chaque « code emission » dans un onglet qui aura à chaque fois pour nom « le code emission »1 ;2 ;10 etc…..Ce code peut changer toutes les semaines.

-Puis d’inserer pour chaque onglet en premiere ligne, les libelles de chaque colonne.

Je vous remercie pour votre aide.
Cordialement
 

Pièces jointes

  • Code emission.zip
    51.1 KB · Affichages: 36
  • Code emission.zip
    51.1 KB · Affichages: 35
  • Code emission.zip
    51.1 KB · Affichages: 37

pierrejean

XLDnaute Barbatruc
Re : Eclater une base par code sur onglets

bonjour Bernard-Louis

Une premiere macro a tester

Je crains qu'elle ne soit un peu longue a l'execution aussi je regarde si je peux faire mieux

Code:
Sub recopie()
Dim coll As Collection
Set coll = New Collection
For n = 2 To Range("A65536").End(xlUp).Row
  On Error Resume Next
    coll.Add Range("A" & n), CStr(Range("A" & n))
  On Error GoTo 0
Next n
For n = 1 To coll.Count
  ligne = 2
  Sheets.Add.Name = coll(n)
  Sheets("SOURCE").Rows(1).Copy Destination:=ActiveSheet.Rows(1)
  For m = 2 To Sheets("Source").Range("A65536").End(xlUp).Row
    If Sheets("SOURCE").Range("A" & m) = coll(n) Then
      Sheets("SOURCE").Rows(m).Copy Destination:=ActiveSheet.Rows(ligne)
      ligne = ligne + 1
    End If
  Next m
Next n
End Sub
 

pierrejean

XLDnaute Barbatruc
Re : Eclater une base par code sur onglets

Re

Version qui devrait etre un peu plus rapide

Code:
Sub recopie1()
Dim coll As Collection
Set coll = New Collection
Cells.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
For n = 2 To Sheets("SOURCE").Range("A65536").End(xlUp).Row
  On Error Resume Next
    coll.Add Sheets("SOURCE").Range("A" & n), CStr(Sheets("SOURCE").Range("A" & n))
  On Error GoTo 0
Next n
  debut = 2
For n = 1 To 3
  ligne = 2
  Sheets.Add.Name = coll(n)
  Sheets("SOURCE").Rows(1).Copy Destination:=ActiveSheet.Rows(1)
  For m = debut To Sheets("Source").Range("A65536").End(xlUp).Row
    If Sheets("SOURCE").Range("A" & m) = coll(n) Then
      Sheets("SOURCE").Rows(m).Copy Destination:=ActiveSheet.Rows(ligne)
      ligne = ligne + 1
    End If
  Next m
  debut = debut + ligne - 3
Next n
End Sub
 

Bernard-Louis

XLDnaute Occasionnel
Re : Eclater une base par code sur onglets

Je te joins une copie ecran, car il n'y a pas de ligne de macro selectionnée.
Le message est a la fin lorsque la macro a finie.
 

Pièces jointes

  • Doc2.zip
    17.1 KB · Affichages: 30
  • Doc2.zip
    17.1 KB · Affichages: 28
  • Doc2.zip
    17.1 KB · Affichages: 29

Bernard-Louis

XLDnaute Occasionnel
Re : Eclater une base par code sur onglets

Le probleme est regle.
Cela vient du fait que c'est un fichier CSV, et a la fin du fichier, il faut encore efface les lignes vides qui restent, car elles conservent le format. Une fois effacees, il n' y a plus de probleme.
Est ce que par hasard tu aurais un moyen pour envoyer chaque onglet separement par mail a un destinatraire qui correspond au code l'onglet ?
Je te remercie encore Pierrejean.
Cordialement
 

pierrejean

XLDnaute Barbatruc
Re : Eclater une base par code sur onglets

Re

a tester:

remplacer

For n = 1 To 3 (que j'avais laissé apres test)

ou For n=1 to 100 (que tu as mis : bonne réaction)

par For n=1 to coll.count

Edit: au temps pour moi : je n'avais pas rafraichi !!

pour l'envoi par mail je regarde mais je pense que tu devrais ouvrir un post specifique
 
Dernière édition:

Danix

XLDnaute Nouveau
Re : Eclater une base par code sur onglets

Bonjour Bernard-Louis, PierreJean, Le Forum,

Voici une macro que j'utilise pour le même type de besoin, il y a peut-être mieux à faire, mais cela fonctionne sur un nombre de lignes identiques à ce que tu mentionne dans ton post
Regarde si cela te convient. Attention, ce sont des .BAS qui doivent être importé dans ton projet VBA. Bascule par ALT F11 dans VBA ditor, ensuite fichier importer les deux .BAS contenus dans le ZIP.

Bonne continuation
Slts
Danix
 

Pièces jointes

  • Decoupage.zip
    2.3 KB · Affichages: 37

ChTi160

XLDnaute Barbatruc
Re : Eclater une base par code sur onglets

Salut Bernard-Louis
un coucou particulier à mon ami Pierrejean
Bonjour le fil

En pièce jointe une version qui avec les 10000 et quelques lignes sur 11 colonnes (remplies de Chiffres) cela ne prends que quelques secondes

la macro crée la feuille si celle ci n'existe pas encore ou alors colle les données a la suite des autres si feuille déja existante Lol


Le fichier :http://cjoint.com/?byqz42vfHe

Bonne fin de Soirée
je n'ai pas encore regardé le fichier de Danix j'y cours :p
 

Bernard-Louis

XLDnaute Occasionnel
Re : Eclater une base par code sur onglets

Bonsoir le forum,
Merci Pierrejean, Danix, ChTi160.

Serait il possible de modifier les macros afin que les copies se fassent dans le fichier "E:\Mes documents\TESTS\Publipostage" au lieu d'etre dans les onglets du classeur "SOURCE", car pour l'envoi par mail j'ai trouve la macro de MichelXld qui conviendrait tres bien;
Merci pour votre aide.
Bonne soirée.
Cordialement
 

Danix

XLDnaute Nouveau
Re : Eclater une base par code sur onglets

Bonjour Bernard-Louis, Le Forum

Voici une version révisée de ma proposition d'hier, avec le chemin et le nom du fichier de sortie en paramètre

Slts
Danix
 

Pièces jointes

  • Code emission_Decoupage.zip
    43.6 KB · Affichages: 36
  • Code emission_Decoupage.zip
    43.6 KB · Affichages: 39
  • Code emission_Decoupage.zip
    43.6 KB · Affichages: 42

Bernard-Louis

XLDnaute Occasionnel
Re : Eclater une base par code sur onglets

Bonjour danix, le forum,
Est il posiible de modifier la macro pour que :
En lieu et place de l'eclatement de la base sur 1 centaine d'onglets, d' ouvrir une centaine de classeurs sur le chemin E:\Mes documents\TESTS\Publipostage, avec le meme libelle de chaque classeur que celui des onglets ,
Merci pour l'aide.
Cordialement
 

Discussions similaires

Réponses
0
Affichages
143

Statistiques des forums

Discussions
312 674
Messages
2 090 788
Membres
104 665
dernier inscrit
ronbt