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.
Bonjour,
Donc juste pour bien comprendre, avant de faire du code :
- 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 ?
- 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" ?
- 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 = Truepour 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.
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 SubAvec 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