Scinder un fichier excel en plusieurs onglets [Fermé]

Signaler
-
Messages postés
14
Date d'inscription
mercredi 3 décembre 2008
Statut
Membre
Dernière intervention
7 mars 2017
-
Bonjour !

Je cherche une macro qui permettrait de scinder un fichier excel en autant d'onglets qu'il y a de valeurs pour la variable Dossier Groupe.

Mes données se présentent comme ça :

N° Compagnie Nom Compagnie Dossier Commercial Dossier Groupe N° Client
5312 CCPMA PREVOYANCE 35308 4262 933615
5312 CCPMA PREVOYANCE 43873 4264 1001564
5312 CCPMA PREVOYANCE 4259 4267 900803
5312 CCPMA PREVOYANCE 11910 4262 900464
5312 CCPMA PREVOYANCE 35308 4263 933615
5312 CCPMA PREVOYANCE 32581 4264 932300
...
...

Merci pour votre aide !
Gaëtan

7 réponses

Messages postés
12177
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
26 juin 2020
2 448
Bonjour,
Par VBA, tu peux utiliser ce code :
Sub creation_onglets()
Dim Ws As Worksheet
Dim trouve As Boolean
Dim contenu As String
Dim lig, derlig As Integer
With Sheets("Feuil1") 'à adapter Feuil1 = feuille ou sont vos données
derlig = .Range("E65536").End(xlUp).Row 'à adapter, E = colonne "Dossier groupe"
For lig = 2 To derlig
contenu = .Cells(lig, 5).Value 'à adapter 5 = 5ème col cf E ci dessus
For Each Ws In ThisWorkbook.Worksheets
trouve = False
        If StrComp(Ws.Name, contenu, vbTextCompare) = 0 Then
            trouve = True
            Exit For
        End If
Next Ws
If trouve = True Then
        .Rows(lig).Copy Sheets(contenu).Range("A65536").End(xlUp).Offset(1, 0)
    Else
        Sheets.Add
        ActiveSheet.Name = contenu
        .Rows(lig).Copy Sheets(contenu).Range("A65536").End(xlUp).Offset(1, 0)
End If
Next lig
End With
End Sub

Les commentaires (textes apparaissant en vert sous VBA) sont à adapter à vos besoins.
A insérer dans un module : sous la feuille Excel taper ALT+F11 puis Insertion/Module. Copier coller ce code dans la fenêtre Visual Basic, fermer visual basic. Pour la "lancer" , taper ALT+F8 dans la feuille Excel, choisir "creation_onglets" et cliquer sur exécuter...
1
Merci

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

CCM 63757 internautes nous ont dit merci ce mois-ci

Extra! Merci pour cette solution qui vient de m'aider..
Messages postés
14
Date d'inscription
mercredi 3 décembre 2008
Statut
Membre
Dernière intervention
7 mars 2017

Super !
Messages postés
5
Date d'inscription
lundi 5 décembre 2011
Statut
Membre
Dernière intervention
6 décembre 2011
1
Bonjour,

J'aurais besoin svp de votre aide au sujet du code
J'ai un fichier excel à scinder en plusieur onglets ou plusieur fichiers par rapport à une colonne qui ne contient que les pays. Je souhaiterais faire un onglet par pays.
J'ai donc utilisé votre code en faisant quelques modifications afin de l'adapter à mon fichier. Cela fonction bien, j'ai un fichier pas pays mais je n'ai pas le nom des champs dans les onglets. Voici le code modifié


Sub creation_onglets()
Dim Ws As Worksheet
Dim trouve As Boolean
Dim contenu As String
Dim lig, derlig As Integer
With Sheets("Détail Clients - Carnet T1") 'à adapter Feuil1 = feuille ou sont vos données
derlig = .Range("U65536").End(xlUp).Row 'à adapter, E = colonne "Dossier groupe"
For lig = 1 To derlig
contenu = .Cells(lig, 21).Value 'à adapter 5 = 5ème col cf E ci dessus
For Each Ws In ThisWorkbook.Worksheets
trouve = False
If StrComp(Ws.Name, contenu, vbTextCompare) = 0 Then
trouve = True
Exit For
End If
Next Ws
If trouve = True Then
.Rows(lig).Copy Sheets(contenu).Range("A65536").End(xlUp).Offset(1, 0)
Else
Sheets.Add
ActiveSheet.Name = contenu
.Rows(lig).Copy Sheets(contenu).Range("A65536").End(xlUp).Offset(1, 0)
End If
Next lig
End With
End Sub

Etant donné que le nom des champs se trouvent sur la première ligne j'ai remplacé le 2 par 1 sur la ligne "For lig = 1 To derlig"

Je vous remercie d'avance pour votre aide.
Bien cordialement,
1
Merci

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

CCM 63757 internautes nous ont dit merci ce mois-ci

Messages postés
12177
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
26 juin 2020
2 448
Bonjour,
Si j'ai bien compris, en colonne U tu as la liste des pays.
Tu veux créer une feuille par pays, et y insérer des champs (entêtes?).
le nom des champs se trouvent sur la première ligne Oui mais ou exactement ? de A1 à T1 ? Soit plus précis.
Messages postés
5
Date d'inscription
lundi 5 décembre 2011
Statut
Membre
Dernière intervention
6 décembre 2011
1
Bonjour,

Merci d'avoir répondu.
En colonne U j'ai la liste des pays. Je souhaiterais créer un onglet par pays avec les données associées.
La plage des données est de A à AB et les nom des champs se trouvent sur la première ligne de A1 à AB1.

Je vous remercie d'avance pour votre aide
Bien cordialement
Messages postés
12177
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
26 juin 2020
2 448
Alors essaye ceci :
Sub creation_onglets() 
Dim contenu As String 
Dim lig As Long, derlig As Long 

With Sheets("Détail Clients - Carnet T1")
    derlig = .Range("U" & Rows.Count).End(xlUp).Row 
    For lig = 1 To derlig 
        contenu = .Cells(lig, 21).Value
        If contenu = "" Then Goto Suite 'si une ligne vide s'est glissée : évite l'erreur
        If FeuilleExiste(ThisWorkbook, contenu) Then 
            .Rows(lig).Copy Sheets(contenu).Range("A" & Rows.Count).End(xlUp).Offset(1, 0) 
        Else 
            Sheets.Add 
            ActiveSheet.Name = contenu
            .Rows(1).Copy Sheets(contenu).Range("A1") 'copie/colle la 1ère ligne en 1ère ligne
            .Rows(lig).Copy Sheets(contenu).Range("A2") 'copie/colle la ligne trouvée en 2ème ligne 
        End If 
    Suite:
    Next lig 
End With 
End Sub
Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean
 On Error Resume Next
 FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing)
End Function
Bonjour,
J'ai testé votre macro fonctionne bien merci,
par contre elle plante sur les champs trop longs ou avec des ( ) est-ce normal?
D'autre part, un onglet se créé avec l'intitulé de colonne?je ne le souhaite pas comment faire?
Est-il possible que ces onglets s'ouvre dans un nouveau classeur?
Merci
Messages postés
5
Date d'inscription
lundi 5 décembre 2011
Statut
Membre
Dernière intervention
6 décembre 2011
1
J'ai testé le code et ça marche.
Je vous remercie infiniment pour votre aide.

Bien cordialement,
Messages postés
5
Date d'inscription
lundi 5 décembre 2011
Statut
Membre
Dernière intervention
6 décembre 2011
1
Excusez moi, j'ai une autre question à vous poser sur le même sujet

Dans le fichier initial, j'ai en réalité 2 onglets le permier comporte les données de cette années et le second les données de l'année dernière avec le même nombre de colonnes et la liste pays.
Est-ce qu'il est possible d'avoir une macro qui scinde les 2 onglets en meme temps par pays, voir par exemple un fichier par pays avec 2 onglets comportant les données de chaque pays.
ou dois-je excécuter le code une seconde fois en modifiant les paramètres.

Je vous remercie d'avance pour votre aide.
Bien cordialement,
Messages postés
12177
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
26 juin 2020
2 448
Tu dis :
Est-ce qu'il est possible d'avoir une macro qui scinde les 2 onglets en meme temps par pays, voir par exemple un fichier par pays avec 2 onglets comportant les données de chaque pays.
ou dois-je excécuter le code une seconde fois en modifiant les paramètres.

Choisis ce que tu préfères, en tenant compte des spécificités d'excel (nombre de feuilles maxi), en faisant attention à ne pas alourdir ton fichier etc etc... et on aviseras ensemble.
Messages postés
5
Date d'inscription
lundi 5 décembre 2011
Statut
Membre
Dernière intervention
6 décembre 2011
1
Désolé si la formulation de ma requête vous a blessé.
Bien cordialement,
Messages postés
12177
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
26 juin 2020
2 448
?????? La je ne comprends pas.
Je ne suis pas blessé, je te demande de choisir..........
Tu dis..
Messages postés
175
Date d'inscription
jeudi 19 septembre 2013
Statut
Membre
Dernière intervention
26 décembre 2018
53
Bonsoir,

Une méthode plus rapide. Le transfert se fait par blocs et non pas par ligne.

http://boisgontierjacques.free.fr/fichiers/Cellules/ExtraitBDOnglets.zip

Boisgontier