Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Eclater une base par code sur onglets

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 !

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

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
 
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
 
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
 
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:
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

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 😛
 
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
 
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

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
 
- 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
5
Affichages
698
Réponses
10
Affichages
516
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…