Création d'un dictionnaire de feuille à ne pas supprimer

Bonjour le forum

Alors voilà, j'ai un code qui me permet de supprimer des feuilles après utilisation par un utilisateur d'un classeur.

Dans le principe j'ai créé un dictionnaire avec les Index des feuilles à ne pas supprimer puis à la fermeture j'appel ma macro pour retirer d’éventuelles feuille rajoutées.

Je ne trouve pas se moyen très fiable... J'aurais préférer trouver un moyen de créer un dictionnaire avec le nom des feuilles en dure et non en fonction de leurs index

Quand je dit nom de feuille en dure je veux parler par exemple de Feuil1 (où Feuil1.Name="Toto")

Je met quand même ci-dessous le code que j'utilise actuellement :

Sub SuppFeuilles()
Dim Compteur

Application.DisplayAlerts = False 'Desactivation des messages de confirmation de suppression de feuiles
Set Dico = CreateObject("Scripting.Dictionary") 'Création d'un dictionnaire nomé Dico

Dico.Item("A") = 1 'Ajout d'une référence A = 1 (ici le numéro sera le numéro d'INDEX des feuilles A NE PAS SUPPRIMER)
Dico.Item("B") = 2 'Idem
Dico.Item("C") = 3 'Idem
'Ajouter autant d'items qu'il y à de feuille à ne pas supprimer

Tbl = Dico.items 'Création d'un tableau virutel avec tous les items du Dico
TT = Application.CountA(Dico.items) 'TT est le nombre d'items présent dans le Dico ou le nombre de feuille à garder

'On sais donc maintenant que l'on veux garder uniquement les 3 premiers onglet sois Feuil.Index 1,2 et 3
'Si des feuilles sont rajoutées par un utilisateur il y aura donc plus de 3 feuilles dans le classeur, alors on procède à la suppression

While Worksheets.Count > TT 'Tant qu'il y a plus de 3 feuilles dans le classeur
Compteur = 0 'Ici le compteur nous permttra de determiner si la feuille doit être supprimée ou non
For n = 0 To Dico.Count - 1 'Ici on va tester que l'index de chaque feuille est présent dans le Dico
     If Worksheets(Worksheets.Count).Index <> Tbl(n) Then Compteur = Compteur + 1
     If Compteur >= TT Then Worksheets(Worksheets.Count).Delete 'Si l'index de la feuille n'a pas été trouvée dans le Dico alors elle est supprimée
Next n 'On passe à la feuille suivante
Wend 'Fin de la procédure quand le nombre de feuille dans le classeur sera<4 feuilles
Application.DisplayAlerts = True 'Réactivation des messages de confirmation de suppression
End Sub

bonjour

mets les feuilles pérennes dans FichierA

et les feuilles de bidouillage par tes collègues dans divers FichiersB, C D etc

ta question ne se pose donc plus du tout

amitiés

Merci du retour jmd mais pourrais tu être plus clair ? Je ne comprend pas vraiment ce que tu veux dire

re

en gros éclate ton fichiers en plusieurs

  • un fichier pérenne, indestructible, qui contient les données durables
  • des fichiers séparés qui lisent les données et font des calculs et autres trucs. on peut effacer ces fichiers

amitiés

Bonjour à tous,

Si tu veux conserver tes feuilles dans le même classeur, le nom des onglets peut aussi être changé par l'utilisateur.

Utilise plutôt le codename de la feuille :

2019 05 28 13 08 50

Tu les renommes toutes celles à garder OrigineX par exemple et :

Sub suppParCodeName()
    Dim sh As Worksheet
    For Each sh In ThisWorkbook.Worksheets
        If Left(sh.CodeName, 7) <> "Origine" Then sh.Delete
    Next sh
End Sub

eric

Merci Eric, ton aide est toujours d'une grande utilité ! Ta solution est parfaite et ultra-simple

Un petit peu plus courte, mais c'est parce que je n'ai pas mis de commentaires

eric

Rechercher des sujets similaires à "creation dictionnaire feuille pas supprimer"