Créer des feuilles contenant une partie d'une autre feuille

Bonjour à tous,

Je cherche à créer une macro qui me permettrait de :

1. Créer un onglet pour chaque client à partir d’une liste de 7400 lignes environ et de renommer chaque feuille du nom de ce client. Entre chaque bloc de client (qui sont de grandeur variables, il y a un espace).

Je met en pièce jointe un fichier contenant une partie de mon document de base. Les colonnes ne bougent pas.

Je vous remercie infiniment pour votre aide !

Je suis aussi interessée de savoir si ma demande est trop ambitieuse !

Bonjour, une ébauche (et non elle n'est pas trop ambitieuse) (il faut juste le temps de réfléchir sur comment faire pour y arriver)

option Base 1
Sub test()

    Dim b(), dl&, i%

    dl = Feuil1.Range("d" & Rows.Count).End(xlUp).Row

    ReDim b(Application.WorksheetFunction.CountIf(Feuil1.[d:d], "CLIENT*"))

    For i = 2 To dl
        If Feuil1.Range("d" & i).Value Like "CLIENT" & "*" Then
            n = n + 1
            b(n) = Feuil1.Range("d" & i).Row
        End If
    Next

    For k = 1 To UBound(b)
        Sheets.Add after:=Sheets(Sheets.Count)
        Feuil1.Activate
        If k < UBound(b) Then
            Feuil1.Rows(b(k) & ":" & b(k + 1) - 1).Copy
        Else
            Feuil1.Rows(b(k) & ":" & dl).Copy
        End If
        With Sheets(Sheets.Count)
            .Paste
            .Name = .[d1]
        End With
    Next
    Application.CutCopyMode = False
End Sub

Merci beaucoup !!

C'est fantastique !!

Oo...C'est rare que je fasse une macro qui fonctionne du premier coup...J'attends donc le retour des bug

Haha flute effectivement mais ce n'est pas de ta faute. J'ai essayé de comprendre un peu une partie du code et je pense que tu as pris comme mot de référence le mot "client". En réalité j'ai le nom du client mais le terme client n'apparait pas... et ils sont tous différent. En revanche dans la cellule juste à gauche j'ai toujours un numero qui commence par "CI00". J'ai essayé de bidouiller le code en changeant le nom des colonnes mais sans succès...


Juste une petite question, cette macro fonctionne également si j'ai plus de 3 clients dans la liste ?

Je vous joins le fichier avec les CI00XXX qui ont toujours ce format !

Encore merci !!!!!

Bonjour, je m'en suis douté aussi (pour le mot client). Le code mis à jour

Option Base 1
Sub test()

    Dim b(), dl&, i%

    dl = Feuil1.Cells.SpecialCells(xlCellTypeLastCell).Row

    ReDim b(Application.WorksheetFunction.CountIf(Feuil1.[c:c], "CI00*"))

    For i = 2 To dl
        If Feuil1.Range("c" & i).Value Like "CI00*" Then
            n = n + 1
            b(n) = Feuil1.Range("d" & i).Row
        End If
    Next

    For k = 1 To UBound(b)
        Sheets.Add after:=Sheets(Sheets.Count)
        Feuil1.Activate
        If k < UBound(b) Then
            Feuil1.Rows(b(k) & ":" & b(k + 1) - 1).Copy
        Else
            Feuil1.Rows(b(k) & ":" & dl).Copy
        End If
        With Sheets(Sheets.Count)
            .Paste
            .Name = .[d1]
        End With
    Next
    Application.CutCopyMode = False
End Sub

Merci Force Rouge,

mais quand je lance la macro j'ai un message d'erreur qui me dit "Error di run time '424' Objet requis.

J'ai cette ligne : dl = Feuil1.Cells.SpecialCells(xlCellTypeLastCell).Row qui est mise en évidence.

Normale je pense...Dans votre fichier, la feuille où il y a les informations n'est peut-être pas la feuil1. Donc regardez dans l'éditeur vba quel est le nom de la feuille et remplacez là dans la phrase (voir photo pour savoir ou est le nom de la feuille). Si cela ne fonctionne pas on peut utiliser du passe-partout genre ceci =

 dl = Feuil1.Range("d" & Rows.Count).End(xlUp).Row

Ha c'est top !

ça marche la seule et unique dernière chose et après je disparais, c'est qu'il me lance uniquement les 3 premier clients. Sur mon fichier j'ai plus de 7000 lignes. Quand je relance la macro, il me relance les trois premiers et des erreurs sur le noms des onglets (vu qu'ils sont identiques).

Pour palier aux noms identiques, vous pouvez faire comme ceci, au lieu de mettre

 .Name = .[d1]

vous pouvez mettre ceci :

 .Name = .[d1] & "(" & Sheets.Count & ")"

Ca va rajouter un chiffre entre parenthèse sur le nom des onglets mais ça contourne le problème du doublon..

Essayez déjà ceci qui devrai régler l'autre problème en cascade.

Alors effectivement ça me rajoute un numero et vous venez de résoudre un problème que je rencontrais dans une autre macro ! |

Mais j'ai toujours ce probleme que la macro traite les 3 premiers clients en boucle et non le reste de la feuille.

Regardez si le 4ieme, 5eme etc commencent bien par Ci00...

Oui ils commencent tous par "CI00".

Encore merci pour votre disponibilité !

Et si par hasard il est possible de tronquer le nom des clients quand ceux-ci font plus de 31 caractères sinon l'onglet n'est pas renommé.

Executez cette macro (en vérifiant que le nom de la feuille soit la bonne) et dites moi le nombre qui apparaitra dans la message box

Sub client()
msgbox Application.WorksheetFunction.CountIf(Feuil1.[c:c], "CI00*"))
End Sub
Zazathoustra a écrit :

Et si par hasard il est possible de tronquer le nom des clients quand ceux-ci font plus de 31 caractères sinon l'onglet n'est pas renommé.

Oui ça pourrait être ça, suivant le résultat de la macro précédente on tronquera le nom du client pour voir

Dans la fenetre j'ai "erreur de compilation : erreur de syntaxe"...

Ma version d'excel est en italien, je ne sais pas si ça impacte... Mais on ne sait jamais je suppose que toutes les infos sont bonnes à prendre. Je continue de tenter...

Je ne pense pas qu'il y ait un rapport avec la langue. Si le fichier démo fonctionne c'est que la/les erreurs viennent d'ailleurs car la macro c'est la même, a vous de voir quelles sont les différences fondamentales entre les deux où alors de joindre le fichier original avec les lignes qui présentent des défauts

Ce que vous m'avez fourni est une excellente base. Je vais tenter de faire des petits ajustements mais je suis déjà bien avancée.

Un grand merci !

Rechercher des sujets similaires à "creer feuilles contenant partie feuille"