Augmenter et diminuer les feuilles copiées avec le nombre d'une case

Bonjour

je doit faire un Excel avec plusieurs fonction, j'ai réussi j'étais presque fini mais a dernier fonctionne que je doit ajouter interfère avec un autre code mais je ne sais pas ce que je doit faire.

j'explique, j'ai 6 feuille de départ ou 5 seront toujours caché (on les appelleras "contt*" mais dans la feuille il sont apelé AA,ZZ,EE,RR,TT) , après dans la feuille qui seras toujours présente ("origine") j'aurais une case Y17 ou je pourrais saisir un chiffre, une fois saisi j'ai mon code BVA qui vas copier les feuilles contt* le nombre de Y17 après quand je veut augmenter ce nombre sans devoir avant d'effacer tout ces feuilles copié il me dit qu'il y a une erreur en plus il me demande de sélectionner une page (un lien que j'ai fait pour un autre code private sub qui vas chercher une donner dans un autre fichier si la cellule H7 est modifier) ou normalement il ne devrait y avoir rien entre eux.


17classeur20-copie.xlsm (159.97 Ko)

Bonjour,

Donc juste pour bien comprendre, avant de faire du code :

  1. Si en Y17 on rentre "3". On va copier chacune des 5 feuilles 3 fois ? Quels noms on leur donne ? TT ph 1, TT Ph 2, TT Ph 3 ?
  2. Pour l'histoire de la suppression, il faut faire attention, car on risque de supprimer des feuilles contenant des données. Y-a-t-il un ordre à respecter pour la suppression ou bien on peut supprimer "la première trouvée" ?
  3. Càd si on a 3 doublons de chaque feuille, et qu'en Y17 on rentre "1", on doit supprimer 2 doublons. On supprime les n° 1,2 ou 2,3 ou aucune importance ?

Pour finir, pour faire un code robuste il est nécessaire de connaitre le nom définitif des feuilles. On pourrait à la limite le mettre dans des variables en haut du code pour garder les noms actuels, mais ça implique que vous saurez le modifier plus tard.

Pour les interférences entre macros c'est parce que vous avez des Subs évènementiels, donc potentiellement une autre macro peut la déclencher. Pour désactiver cet effet il faut écrire Application.EnableEvents = False (avant le code qui déclenche l'event) et remettre à True après.

bonjour

pour la 1 leur nom seras TT ph10, AA ph10,

TT ph20, AA ph20..... avec des multiplication de 10

pour la 2 je viens de réussir a la faire (je met l'Excel actualiser)

     ' Supprimer les phases avec un numéro supérieur à Y17
    Application.DisplayAlerts = False
    For Each ws In wb.Sheets
        ' Vérifier si la feuille correspond à une phase "Process ph"
        If ws.Name Like "Process ph*" Then
            ' Extraire le numéro de phase à partir du nom de la feuille
            On Error Resume Next
            phaseNum = CInt(Mid(ws.Name, InStr(ws.Name, "ph") + 2))
            On Error GoTo 0

            ' Supprimer les feuilles dont le numéro de phase est supérieur à numCopies * 10
            If phaseNum > numCopies * 10 Then
                ws.Delete
            End If
        End If
    Next ws
    Application.DisplayAlerts = True

pour la 3 normalement on doit pas avoir des doublons c'est l'une des erreurs que j'ai dans mon code quand j'essaye d'ajouter plus de copie a celle qui sont déjà,

si on veut mettre plus de phase il faut absolument a chaque fois le retialiser (mettre 0 dans Y17) et moi je ne veut pas être obliger d'effacer ce que j'ai pour pouvoir augmenter quelque page en plus.

et pour Application.EnableEvents = False je ne vois pas a chaque fois j'ai mis apres true alors je ne devrais pas avoir de problème.

12classeur20-copie.xlsm (155.80 Ko)

merci

Bonsoir à vous deux !

en fait une fois 2 lancé à partir de Y17, vous créez par VBA deux groupes de 5 feuilles dont une est la "maitresse" et les autres sont cachées.
Le classeur n'affiche que les feuilles maitresses et la feuille de gestion.

Maintenant si vous mettez 3 en Y17, il faut créer seulement le troisième groupe, ou alors faut-il reprendre à 0, c'est à dire supprimer les groupes 1 et 2, et alors on crée les trois groupes ?
S'il ne faut que créer le groupe manquant alors ce sera plus simple et les données des deux autres groupes seront conservées, comme le souligne saboh12617.

@ bientôt

LouReeD

bonsoir

alors si on a 2 en Y17 au début comme vous l'avez dit il crée 2 groupe de 5 feuilles.

ensuite si on remplace le 2 par un 3 ou un chiffre supérieure aux chiffre de départ, je voudrais qu'il crée que les feuilles qui manque(sans supprimer ceux qui sont déjà créer), si on dit qu'on la met à 3 alors je voudrais qu'il ajoute les 5 feuilles une seul fois.

votre réponse (Maintenant si vous mettez 3 en Y17, il faut créer seulement le troisième groupe,).

merci pour touts

Bonsoir,

une proposition :

Sub LouReeD()
    Dim Sh, Ph, Num, I, NbPh
    Application.ScreenUpdating = False
    NbPh = Sheets("Feuille d'évolution").Range("Y17").Value
    ' recherche du plus grand Ph déjà existant
    For Each Sh In Worksheets
        If Sh.Name Like "Process*" Then
            If IsNumeric(Right(Sh.Name, 2)) And Right(Sh.Name, 2) > Ph Then Ph = Right(Sh.Name, 2)
        End If
    Next
    ' on a trouvé le Ph plus grand, on le divise par 10
    Ph = Ph / 10
    ' si le NbPh est supérieur à Ph
    If NbPh > Ph Then
        ' on boucle de Ph +1 à la valeur du NbPh
        For I = Ph + 1 To NbPh
            ' on sélectionne les feuilles originales et on les copies à la fin du classeur
            Sheets(Array("Process ph", "Outils ph", "Contrôle ph", "Annexe d'auto-contrôle ph" _
                , "Annexe Contrôle final ph")).Copy Before:=Sheets(Worksheets.Count)
            ' on boucle sur les feuilles
            For Each Sh In Worksheets
                ' si le nom fini par (2) = nouvelle feuilles
                If Right(Sh.Name, 3) = "(2)" Then
                    ' on les rend visible
                    Sh.Visible = xlSheetVisible
                    ' on les renomme avec le numéro de Ph
                    Sh.Name = Replace(Sh.Name, " (2)", I * 10)
                    ' on met en couleur
                    Sh.Tab.colorIndex = 20 - I
                End If
            Next Sh
        Next I
    ' si le NbPh est strictement inférieur on supprime les feuille du dessus
    ElseIf NbPh < Ph Then
        Application.DisplayAlerts = False
        For I = NbPh + 1 To Ph
            For Each Sh In Worksheets
                If Sh.Name = "Process ph" & I * 10 Then
                    Sheets(Array("Process ph" & I * 10, "Outils ph" & I * 10, "Contrôle ph" & I * 10, _
                    "Annexe d'auto-contrôle ph" & I * 10, "Annexe Contrôle final ph" & I * 10)).Delete
                    Exit For
                End If
            Next
        Next I
        Application.DisplayAlerts = True
    End If
End Sub

Avec le fichier modifié au niveau de la surveillance de la cellule Y17 :

Alors je n'ai pas géré le "au delà de 9 feuilles"... Il faudrait pour simplifier avoir des groupes sur trois chiffres, ou alors juste le numéro plein.

Voyez déjà ceci. j'ai pris le partie d'ajouter en grappe les feuilles, tout comme la suppression. Afin de limiter les problèmes que j'avais lors de la copie des feuilles avec le noms d'Excel, chaque nom cible la feuille et non pas le classeur, à voir si cela ne perturbe pas trop votre fonctionnement.
Les couleurs d'origines ne sont pas respectées pour un soucis de simplification... A voir également.

@ bientôt

LouReeD

Rechercher des sujets similaires à "augmenter diminuer feuilles copiees nombre case"