XL 2016 Création de nvelle feuille à chaque changement de valeur dans une colonne

Sampras63

XLDnaute Nouveau
Bonjour à tous,

Dans mon fichier Excel, je souhaiterais créer de nouvelles feuilles à chaque changement de nom dans la colonne Z (autant de feuilles que de noms différents).
Ces feuilles devraient avoir la même forme que la « MAQUETTE » mais ne contenir que les lignes correspondant au responsable (colonne Z).
Enfin, j’aimerais que ces feuilles soient nommées par ce nom de la colonne Z.
Merci pour votre aide.
 

Pièces jointes

  • EXEMPLE MACRO REPARTITION.xlsx
    174.8 KB · Affichages: 19

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Essaie comme ça :

VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set OS = Worksheets("MAQUETTE") 'définit l'onglet source OS
DL = OS.Cells(Application.Rows.Count, "Z").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne Z de l'onglet source
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 9 To DL 'boucle sur toutes les lignes I de 9 à DL
    D(OS.Cells(I, "Z").Value) = "" 'alimente le dictionnaire D avec les données de la colonne Z
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère la liste du dictionnaire D sans doublons dans le tableau temporaire TMP
For I = 0 To UBound(TMP) 'boucle 1 : sur tous les éléments I du tableau temporaire TMP
    Sheets("MAQUETTE").Copy After:=Sheets(Sheets.Count) 'copie l'oglet "MAQUETTE" en dernière position
    Set OD = ActiveSheet 'définit l'onglet destination OD
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    OD.Name = TMP(I) 'définit le nom de l'onglet OD avec le nom de l'élément TMP(I) (génère une erreur si l'onglet existe déja)
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err.Clear 'supprime l'erreur
        Application.DisplayAlerts = False 'masque les messages d'Excel
        Sheets(TMP(I)).Delete 'supprime l'onglet ayant TMP(I) comme nom
        Application.DisplayAlerts = True 'affiche les messages d'Excel
        OD.Name = TMP(I) 'définit le nom de l'onglet OD avec le nom de l'élément TMP(I)
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    For J = DL To 9 Step -1 'boucle 2 : inversée sur toutes les lignes J de DL a 9
        If OD.Cells(J, "Z").Value <> TMP(I) Then OD.Rows(J).Delete 'si la cellule ligne J colonne Z  de l'onglet OD n'est pas identique à l'élément TMP(I), supprime la ligne
    Next J 'prochane ligne de la boucle inversée 2
Next I 'prochain élément de la boucle 1
Application.ScreenUpdating = False 'affiche les rafraîchissements d'écran
End Sub
 

Sampras63

XLDnaute Nouveau
Bonjour Robert, merci à toi, ça a l'air de correspondre parfaitement à ce que je voulais faire.
Je n'ai pas encore compris tout ce que tu as fait mais avec la description détaillée que tu as mis je devrais m'en sortir et pouvoir la modifier à ma guise si besoin
Encore merci pour ta rapidité
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi