Suppression de feuilles et coloration d'onglets suivant liste

Bonjour le forum,

Pour finir avec mon projet, j'aurais besoin de deux choses:

Les feuilles de données sont nommées S01 à S53 et sont créées en dupliquant la précédente et en la renommant (hélas) manuellement.

1- A l'enregistrement du classeur, supprimer toutes les feuilles qui ne sont pas dans la liste de l'onglet Config (On garde les feuilles Sxx, Config, Data, mais peut être d'autres que je rajouterais dans la colonne)

2- Toujours à l'enregistrement (je pense que c'est le meilleur moment), vérifier et attribuer la couleur de l'onglet à l'onglet défini en feuille Config.

Vous en remerciant par avance.

Zyglur38

11suppr-onglets.xlsm (20.78 Ko)

Bonjour

Un essai à tester. Te convient-il ?

Bye !

Bonsoir zyglur38, gmb , le forum,

Une autre proposition....

Sub Suppression()
    Dim i As Integer, j As Integer
     Application.ScreenUpdating = False
       If MsgBox("Les onglets ne figurant pas dans la liste seront définitivement supprimés," & Chr(10) _
        & "voulez-vous continuer ?", vbYesNo, "Demande de confirmation") = vbYes Then
        For i = Sheets.Count To 1 Step -1
         On Error Resume Next
          j = Application.WorksheetFunction.Match(Sheets(i).Name, Range("A:A"), 0)
            If j = 0 And Sheets(i).Name <> "Config" Then
             Application.DisplayAlerts = False
              Sheets(i).Delete
             Application.DisplayAlerts = True
            Else
              Sheets(i).Tab.Color = Range("A" & j).Interior.Color
            End If
          j = 0
       Next i
      End If
End Sub
2suppr-onglets.xlsm (31.36 Ko)

Cordialement,

Bonsoir gmb, xorsankukai, le forum,

@gmb essai transformé !

@xorsankukai adaptée sans confirmation de suppression.

Merci bien à vous deux.

@gmb , juste une question : pourquoi TabloF n'a pas de type de variable de déclaré ?

Zyglur38

: pourquoi TabloF n'a pas de type de variable de déclaré ?

Dans la macro, tabloF est bien déclarée mais n'est pas typée. Or, quand une varialble n'est pas typée, elle est automatiquement considérée de type "Variant"

OK ?

Bye !

Re,

Merci gmb.

Zyglur38

Salut zyglur38,
Salut gmb, Xorsankukai,

la loi des séries : avez-vous jamais eu le cas où plusieurs post d'affilée présentent les mêmes caractéristiques ?
Pas plus tard que ce début d'après-midi, j'ai proposé un code pour la même problématique à Pillonel...

C'est pourquoi je le propose ici avec quelques adaptations... puisqu'il est là, tout chaud !
- conditions de départ :
* la liste dans 'Config' est triée order1:= xlAscending, header:= xlNo ;
* 'Config" et 'Data' sont immuables ;
* les feuilles 'Sxx' suivent donc logiquement dans le tri avec 'S01' déjà créée ;

- si 'S01' existe déjà, alors une feuille nouvellement créée reçoit le nom de la précédente, son n° étant incrémenté automatiquement, avec la couleur d'onglet de son "modèle". Tant qu'à faire, cette nouvelle feuille reçoit aussi le template de son "modèle" : tu parles bien de dupliquer

Private Sub Workbook_NewSheet(ByVal Sh As Object)
'
Application.ScreenUpdating = False
'
If Sheets.Count > 3 Then
    With Worksheets("Config")
        iRow = .Range("A" & Rows.Count).End(xlUp).Row
        Sh.Name = "S" & Format(CInt(Split(.Range("A" & iRow).Value, "S")(1)) + 1, "00")
        Sheets(Sheets.Count - 1).UsedRange.Copy Destination:=Sh.[A1]
        .Range("A" & iRow + 1).Value = Sh.Name
        .Range("A" & iRow + 1).Interior.Color = .Range("A" & iRow).Interior.Color
        Sh.Tab.Color = .Range("A" & iRow).Interior.Color
        .Range("A1:A" & iRow + 1).Sort key1:=.[A1], order1:=xlAscending, Orientation:=xlByRows, Header:=xlNo
        For x = 3 To iRow + 1
            Worksheets(.Range("A" & x).Value).Tab.Color = .Range("A" & x).Interior.Color
            Worksheets(.Range("A" & x).Value).Move after:=Sheets(Sheets.Count)
        Next
    End With
End If
'
Application.ScreenUpdating = True
'
End Sub

- je lis que certaines feuilles non-inscrites dans 'Config' doivent être éliminées : logique ! ... mais d'où viennent-elles ???
- dans l'attente d'une réponse à cette dernière question et imaginant que tu veux (peut-être ??) tester certaines options sur ces feuilles "étrangères", tu peux renommer une (nouvelle, c'est mieux, me semble-t-il) feuille en cliquant DROIT sur son nom en 'Config'

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
'
Dim sItem$, sSheet$
'
If Target.Column = 1 And Target <> "" And Target <> "A" Then
    Cancel = True
    sItem = Target
    sSheet = Application.InputBox("Quel nouveau nom donnez-vous à la feuille '" & sItem & "' ?", "PILLONEL-Info", , , , , , 2)
    If sSheet <> "" And sSheet <> "Faux" And sSheet <> "A" Then
        With Worksheets("Config")
            Worksheets(sItem).Name = sSheet
            Worksheets(sSheet).Tab.Color = RGB(255, 255, 255)
            Target.Delete shift:=xlUp
        End With
    End If
End If
'
End Sub

- une feuille renommée est supprimée de 'Config' et reçoit un onglet sans couleur ;

- une macro effectue les manip' de suppression d'onglets AVANT le Save tout en réactualisant éventuellement les couleurs d'onglet existants.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'
Dim iOK%
'
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'
With Worksheets("Config")
    For x = Sheets.Count To 3 Step -1
        iOK = 0
        For y = 1 To .Range("A" & Rows.Count).End(xlUp).Row
            If Sheets(x).Name = .Range("A" & y).Value Then _
                Sheets(x).Tab.Color = .Range("A" & y).Interior.Color: _
                iOK = 1: _
                Exit For
        Next
        If iOK = 0 Then Sheets(x).Delete
    Next
End With
'
Application.DisplayAlerts = True
Application.ScreenUpdating = True
'
End Sub

À tester, comme on dit...

Et, m..., "Service (de téléchargement) non disponible..."
Je mettrai le fichier plus tard. Déso...

EDIT : voilà le fichier !

4suppr-onglets.xlsm (32.23 Ko)


A+

Bonsoir curulis57,

Avant de tester...

Les feuilles S01 à S53 représentent les feuilles de pointage d'heure du personnel. On duplique la précédente, on change la date dans une cellule pour avoir une feuille pour ladite semaine. La feuille config est cachée car elle contient des colonnes de tri, des listes déroulantes, etc. Un groupe de semaine représente la période de paye et du calcul des RTT. Le changement de couleur nous alerte sur le changement de période et le risque de perdre nos RTT si on ne les pose pas.

Je ne veux pas que les salariés puissent créer d'autres feuilles dans ce classeur, car chaque salarié a son classeur et un classeur tiers vient y récupérer des données.

En analysant ton code, tu classes par ordre alphabétique les classeurs et tu supprimes tous ceux après la 3eme feuilles qui ne s'appellent pas Sxx c'est ca ?

Mais que se passe t'il si le salarié crée une feuille qui s'appelle '001' ou si j'ai besoin d'une feuille qui s'appelle 'test' ?

Je pars essayer ton code.

Le code bloque sur avec 'l indice n'appartient pas à la sélection'..

   Worksheets(.Range("A" & x).Value).Tab.Color = .Range("A" & x).Interior.Color

Zyglur38

Ouais, ouais, magnifique, et, à part un fichier-exemple complètement vide de tout ce que tu décris, on a eu droit à quoi, dis-moi ?
Difficile de faire mieux, sans rien savoir de concret...

Et oui,...


A+

Je comprends pas ton message...

J'ai joins mon fichier au départ.

Dans mon dernier message j'explique juste comment on procède au boulot et pas ce que je demande.

Ton fichier fonctionne en effet si le fichier config n'est pas renseigné, or il l'est au départ avec toutes les feuilles nommées. C'est juste que les feuilles, elles, ne sont pas créées.

Merci quand même.

Zyglur38

Salut zyglur,

on recommence gentiment, si tu veux bien. J'avais tout compris de travers...
Cela dit, ça m'a fait découvrir un nouveau monde de possibilités extraordinaires : la nuit n'a pas suffit... Pff, il faudrait même des années...

- tu dupliques les feuilles (uniquement les "Sxx", si j'ai bien compris) et copies une date, j'imagine, pour créer un agenda complet grâce à des formules : quelle cellule, quelle donnée, exactement ? Une seule ?
- tu veux interdire la suppression ou la création d'une feuille : j'ai trouvé plusieurs trucs cette nuit qui devraient faire le boulot ;
- quel est le code couleur à appliquer aux onglets ?
- tu seras le seul à pouvoir créer des nouvelles feuilles : j'ai trouvé comment faire malgré l'icône de création à droite des onglets ;
- à part les "Sxx", les noms de feuille sont les noms standard (feuille1...) ou tu as un type de noms que tu souhaites appliquer à la création ?
- ces autres feuilles doivent être donc vides à la création ?
- tu seras aussi le seul à pouvoir les renommer.


A+

Bonsoir curulis57,

Du coup voici mon fichier "complet".

Le code VBA sera protégé par mot de passe et la feuille "Config" cachée par "xlSheetVeryHidden".

La colonne A de Config contient le nom et la couleur déja renseigné de toutes les feuilles.

Le fichier est donné à chaque salarié avec les 2 premières feuilles S01 et S02 (sans compter : PROJETS, HORS-PROJETS, AIDE et CONFIG pour le moment).

Ces 4 dernières feuilles seront les dernières feuilles du classeur.

Pourquoi je donne que les 2 premières feuilles ? La 1ère pour le formalisme, et la cellule "O44" qui ne contient pas de formule (on renseigne cette cellule non protégée au départ avec son solde de RTT de l'année précédente)

Les cellules "R44" de toutes les feuilles ne sont pas protégées pour permettre de forcer à la main une correction sur un solde de RTT, la cellule "O44" contient désormais une formule pour récupérer le solde de la feuille précédente.

On renseigne en "F6" la date de la semaine.

Création d'une nouvelle feuille (faite par chaque salarié) :

Le salarié se positionne sur la dernière feuille Sxx (par exemple S02), la duplique pour la créer juste après, la renomme en S03, efface les informations liées à la semaine précédente. Renseigne la nouvelle date en F6 (Pour S04: 25/01/2021) et cela jusqu'à la semaine 52 ou 53. (Oui, le salarié ne duplique QUE les Sxx)

Si tu travailles sur un projet, tu le choisit dans la colonne D15:D23 et tu renseignes tes heures, si c'est du Hors Projet, tu sélectionne la rubrique en D24:D39 et tu commentes en E.

Les couleurs MFC en E46:J46 c'est pour tirer l'oeil sur le nombre d'heures de la journée qui doit faire 7.7 heures.

A l'enregistrement, la feuille prend la couleur définie dans "Config" et supprime d'autres feuilles qui auraient pu être crées pour mettre de notas ou autres calculs à la sauce de chacun.

J'ai testé ta création de feuille en cliquant sur le +, mais si la feuille a été créée et supprimée, elle ne se recrée pas à la bonne place si d'autres la succèdent.

Cordialement Zyglur38

Rechercher des sujets similaires à "suppression feuilles coloration onglets suivant liste"