VBA - Découpage d'un fichier Excel selon une clé

Bonjour à tous les excelleurs!

Je débute en VBA et je cherche à découper un fichier en plusieurs suivant une clé (les "X" en colonne A)

Mon problème est le suivant:

Chaque fois qu'Excel trouve une croix dans la colonne A, je veux qu'il prenne toutes les lignes avant la croix (y compris la ligne d'entête), les copie dans un nouvel onglet puis applique tout un tas de transformations, supprime l'onglet initial et enregistre le tout dans un fichier avec un nom dynamique qui correspond à la Clé.

Je n'arrive pas à:

- faire une boucle pour que ma seconde croix soit sélectionnée puis ma 3ème ..etc

Voici mon début de code:

Sub DECOUPAGE_TIBO()

    Dim crossRow As Long
    Dim myRangeToCopy As Variant
    Dim pathToSave As String
    Dim fileName As String
    Dim keyColB As String
    pathToSave = "C:\Users\OUTPUT\" 'To delete
    'pathToSave = "C:\Users\OUTPUT\" To uncomment

    fileName = "TEST Bordereau des Responsables d'UO - "

    With Sheets("Bordereau_cible")

        'Je récupere la ligne X
        crossRow = .Range("A:A").Find(what:="X", after:=.Range("A1"), LookIn:=xlValues).Row

        'Je defini la zone à copier
        myRangeToCopy = .Range("A1:S" & crossRow - 1).Select

        'Je copie
        Selection.Copy

        'Jajoute un nouvel onglet
        Sheets.Add.Name = "Bordereau"
    End With

    With Sheets("Bordereau")
        'je colle ma selection
        .Paste

        'Redimensionnement des colonnes'
        Columns("O:O").ColumnWidth = 14.27
        Columns("P:P").ColumnWidth = 24.64
        Columns("Q:Q").ColumnWidth = 21.82
        Columns("R:R").ColumnWidth = 21.18
        Columns("S:S").ColumnWidth = 17.27

        'Masquage des colonnes A & B'
        Columns("A:A").Select
        Selection.EntireColumn.Hidden = True
        Columns("B:B").Select
        Selection.EntireColumn.Hidden = True

        'Je recupere la clef pour le nom de mon fichier
        keyColB = Cells(2, 2).Value
    End With

    'Copie de l entete
    Worksheets("Bordereau_cible").Range("A1:S1").Copy _
    Destination:=Worksheets("Bordereau").Range("A1:S1")

    'Ce que jai a faire sur mon classeur à la fin !
    Application.CutCopyMode = False
    Sheets("Bordereau_cible").Delete
    Sheets("Annexes").Visible = False
    Sheets("Annexes").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
    ActiveWorkbook.Protect Structure:=True, Windows:=False
    Sheets("Bordereau").Select
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

    'Je sauvegarde mon fichier
    ActiveWorkbook.SaveAs fileName:=pathToSave & fileName & keyColB & ".xlsm" _
        , FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

End Sub

Un grand merci à tous,

Popov

Bonsoir

De ce que je comprends tu veux créer un fichier par clé avec les lignes correspondantes à cette clé plus la ligne d'entête?

Bonsoir Yal_Excel et merci pour ton retour !

Tout à fait, le résultat final serait de créer:

-Un fichier "TEST Bordereau des Responsables d'UO - EHP001" contenant les lignes correspondantes à la Clé "EPH001" + la ligne d'entete

-Un fichier "TEST Bordereau des Responsables d'UO - EHP003" contenant les lignes correspondantes à la Clé "EPH003" + la ligne d'entete

-Un fichier "TEST Bordereau des Responsables d'UO - EHP004" contenant les lignes correspondantes à la Clé "EPH004" + la ligne d'entete

etc..

J'ai mis uniquement les 3 premières clés (EHP001, EHP003, EHP004) mais j'ai près de 400 clés dans mon fichier donc difficile de faire ça à la main :(

Mon code trouve bien la 1ère croix et effectue bien le découpage, mais je ne sais pas comment lui dire d'aller trouver la croix suivante et de découper à nouveau suivant la clé suivante..

Merci d'avance !

Bonsoir

Voila une proposition qui, je pense, répond à tes attentes. Plutôt que de masquer les colonnes A et B dans l'export final je les aies supprimées puisqu'elles sont inutile. J'ai fait le choix d'enregistrer les fichiers d'export au format xlsx puisqu'ils ne contiennent pas de macros. La colonnes des croix est totalement inutile et pourrait être supprimée.

Si tu des questions n'hésites pas.

Tout d'abord, un grand MERCI pour ta contribution et ton aide !

Je n'ai pas tout compris au code mais il me manquerait juste deux petits détails:

-Est-il possible sur les fichiers qui sont créés (TEST Bordereau des Responsables d'UO - EHP001..etc) de garder également la mise en forme ? (la copie semble se faire en valeur uniquement)

-Est-il possible également, sur les fichiers qui sont créés, d'avoir un second onglet "Annexes" qui serait la copie de l'onglet "Annexes" du fichier source?

Un immense merci d'avance pour ton retour,

Bonjour

En effet les données étant filtrées en mémoire Sont traitées en valeurs.
J'ai ajouté la mise en forme de la ligne d'entête. Vous pouvez toujours en ajouter si bon vous semble. J'ai aussi ajouté la feuille "annexes"

Un énorme MERCI!

C'est exactement ce que je cherchais, en plus les commentaires m'aident à comprendre le code et à m'améliorer!

Si cela te conviens pense à mettre le sujet en "Résolu"

Rechercher des sujets similaires à "vba decoupage fichier cle"