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 SubUn 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
-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"