Macro cache au fur et à mesure

Résolu
Bonjour,

J'ai fait une macro pour cacher mes onglets qui s'appel SF02 N° 1 SF02 N° 1A etc jusqu'au n° 25 par rapport aux informations que je mets sur ma feuille SF03

Si je mets 1 l'onglet reste si 0 il s'enlève mais ma macro fonctionne si je clic sur ma macro à la fin.

Je voudrais améliorer ma macro en disant que dès que je mes 0 l'onglet correspondant se cache sans attendre la fin.

Voic ma macro :

Sub Cache_Onglets()
For x = 1 To Sheets.Count
If Left(Sheets(x).Name, 4) = "SF02" Then
Sheets(x).Activate
If Range("E12").Value = 0 And Range("E12").Value <> "" Then
'Cache Onglet
Sheets(x).Visible = False
End If
End If
Next x
End Sub

Merci de votre aide que vous voudrez bien m'apporter.

Bien cordialement

17 réponses

Résumé de la discussion

Le sujet concerne une macro Excel qui masque automatiquement les onglets commençant par SF02 lorsque la cellule E12 prend la valeur 0, mais qui ne s’applique qu’en lançant manuellement la macro. Des réponses suggèrent d’utiliser l’événement SheetChange dans ThisWorkbook pour surveiller E12 et cacher immédiatement les feuilles SF02 lorsque la valeur devient 0, sans nécessiter l’exécution manuelle. Le code proposé vérifie que seule la cellule E12 est modifiée et détermine, pour chaque feuille dont le nom commence par SF02, si la condition est satisfaite puis change sa propriété Visible. Des échanges évoquent aussi des conseils pour réafficher les onglets et des exemples exacts à copier.

Bobot (l’IA à votre service)
  1. Re,

    Ce n'est rien, et il serait possible d'améliorer le code. J'ai préféré écrire 4 lignes par feuille pour te permettre de le comprendre et surtout de le reproduire. J'ai supprimé des codes inutiles par contre tu as deux Modules avec des codes dont 1 inutile que tu peux supprimer.
    Si tu as besoin n'hésite pas de revenir sur le forum et évite d'ouvrir plusieurs discussions similaires
    1. Merci merci Merci encore à vous tous qui vous êtes donnés beaucoup de mal avec ma macro.
      Merci encore Mike-31 pour ta précieuse aide car vraiment je n'y serai pas arrivée toute seul.

      Encore merci.
      1. Re,

        C'est plus parlant avec ton fichier, pour commencer sur ta feuille SF03 dans quelle cellule veux tu saisir 1 ?

        Si je comprends bien, en mettant 1 dans ta cellule à définir, feuille SF03 toutes les feuilles s'affichent ou simplement les SF02 ?

        A+
        Mike-31

        Une période d'échec est un moment rêvé pour semer les graines du savoir.
        1. J'ai décortiqué ton fichier, je modifie la macro et te retourne le fichier
          A+
      2. Bonsoir,

        Je vous joint mon fichier

        Dans l'onglet SF03 je mets un 1 et dans l'onglet SF02 il se met tout seul et je veux quand il y a un 1 dans la cellule E12 que l'onglet reste et quand il y a 0 l'onglet se cache

        http://cjoint.com/?3BxroF3YP1J

        Merci de votre aide
        1. Re,

          En E12 tu saisis 0 tous les onglets se cachent, ensuite 2 affiche la feuil2, 3 la feuil3 etc ...
          En E12 le numéro de feuille peut être remplacé par son nom

          https://www.cjoint.com/?BBxq0MLRKsH
          A+
          Mike-31

          Une période d'échec est un moment rêvé pour semer les graines du savoir.
          1. Bonjour Mike-31
            Il semble que la demande a evolue depuis la proposition que j'ai faite le 24 janvier. Je vous laisse la main.
            Bye
        2. Encore moi,

          Et pardon pour mon ignorance sur le sujet. Je viens de faire ce que vous me dites puis j'ai enregistré mais rien ne se passe. Et quand je fais outil macro elle n'apparaît pas dans la liste des macros, et quand je fait Alt F11 à l'écrant apparraît ma première macro comment dois-je faire car je pense que je suis vraiment bête et excuser moi encore une fois.
          1. Contributeur
            e viens de faire ce que vous me dites puis j'ai enregistré mais rien ne se passe
            Avez -vous essayé ensuite de modifier une cellule et de voir si l'onglet était caché ?
          2. Re,
            Pas de soucis. Votre EXCEL: 2003 ou 2007-2010 pour vous mettre a dispo un exemple?

            A+
        3. Pardon pour Mike, mais comme nous somme a 2 sur mon log ma collègue m'avait dit que ta solution était OK mais je n'ai pu l'appliquer et comme il y a quelque temps j'avais commencé a faire les démarches j'ai repris le relais et je lui est demandé de ne plus prendre mon log afin qu'il n'y est pas de soucis d'interprétation.

          Pour répondre à f0894009 :

          Je voulais que quand je mets un 1 dans ma cellule E12 l'onglet reste et si je mets un 0 l'onglet se cache.

          Dans l'attente de votre aide
          1. Re,

            Ouvrir VBA par Alt+F11
            double click sur ThisWorkbook
            Copiez le code ci-dessous

            Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
            If Target.Count > 1 Then Exit Sub 'sortie si plus d'une cellule selectionnee

            If Target.Column <> 5 And Target.Row <> 12 Then 'cellule E12 selectionnee ??
            'pas E12
            Else
            With Sheets(Sh.Name)
            If Left(.Name, 4) = "SF02" And .Range("E12").Value = 0 And .Range("E12").Value <> "" Then
            .Visible = False
            End If
            End With
            End If

            End Sub

            A votre ecoute pour toutes explications
        4. Salut,

          Il est fortement déconseillé d'ouvrir plusieurs discussions sur le même sujet qui n'a pour effet que de disperser les intervenants alors que des discussions restent en souffrances.
          Des solutions t'on été données sur cette discussion qui on été remerciées par des votes négatifs alors que le sujet à été mis en statut résolu drôle façon de remercier les intervenants qui donnent sans compter
          A+
          Mike-31

          Une période d'échec est un moment rêvé pour semer les graines du savoir.
          1. J'ai trouver ma colonne sur la gauche et j'ai clic double clic sur This Workbook, j'ai copier la macro, j'ai enregistrer mais elle ne fonctionne pas je pense qu'il me manque une petite chose par exemple à la place de mettre :

            Sub Cache onglets() on doit mettre autre chose et à la fin de la macro à la place de mettre End Sub on devrait aussi mettre autre chose.

            Mais ma question est Quoi ?
            1. Bonjour Claudine

              Vous devez mettre le code que je vous ai fourni.
              Votre macro Sub Cache onglets() ne sert plus.

              A+
          2. Pardon mais les macro ne sont pas simple pour moi et j'ai des laccunes

            Alors voilà ou j'en suis :
            1 - quand je fais Alt+F11 je tombe sur ma première macro
            2 - je n'ai pas de colonne de gauche pour double clic sur 'This Workbook'

            j'ai en haut de l'écran ma barre d'outil

            en dessous un à gauche un déroulant ou il y a d'écrit général et à droite un déroulant ou il y a d'écrit cache_onglets
            puis la macro suivante :

            Sub Cache_Onglets()
            For x = 1 To Sheets.Count
            If Left(Sheets(x).Name, 4) = "SF02" Then
            Sheets(x).Activate
            If Range("E12").Value = 0 And Range("E12").Value <> "" Then
            'Cache Onglet
            Sheets(x).Visible = False
            End If
            End If
            Next x
            End Sub

            Merci de me guider encore une fois
            1. Je suis un peut blonde mais je n'est pas mis le code f894009 dans ma macro

              Voici exacement se que j'ai mis :
              Sub Cache_Onglets()
              If Target.Column <> 5 And Target.Row <> 12 Then 'cellule E12 selectionnee ??
              'pas E12
              Else
              With Sheets(Sh.Name)
              If Left(.Name, 4) = "SF02" And .Range("E12").Value = 0 And .Range("E12").Value <> "" Then
              .Visible = False
              End If
              End With
              End If

              End Sub

              Dite moi se que je fais mal ou se que je dois faire ou comment procéder.

              Merci d'avance
              1. Contributeur
                Ce qu'il faut faire :

                1°) ouvrir VBA (Alt+F11)
                2°) Dans la colonne de gauche, double-cliquer sur 'This Workbook'
                3°) Copier sans rien changer la macro de f894009
                4°) enregistrer

                Le principe de sa macro est qu'il s'agit d'une macro événementielle, qui se déclenche lors d'une action spécifique (ici la modification d'une cellule). Ce qui la différencie de vos macro, c'est que pouvoir les lancer, vous devez cliquer sur un bouton, ou les lancer manuellement. Les macro événementielles se déclenche automatiquement.
            2. comme code j'ai erreur d'execusion '424'

              Sub Cache_Onglets()
              If Target.Column <> 5 And Target.Row <> 12 Then 'cellule E12 selectionnee ??
              'pas E12
              Else
              With Sheets(Sh.Name)
              If Left(.Name, 4) = "SF02" And .Range("E12").Value = 0 And .Range("E12").Value <> "" Then
              .Visible = False
              End If
              End With
              End If

              End Sub

              La ligne If traget. se met en surbrillance
              1. Contributeur
                Bonjour,

                il ne faut pas récupérer le code de f894009 et le mettre dans votre macro, mais bien de copier ce qu'il a écrit.

                La macro a utiliser est simplement celle de f894009, ni plus, ni moins.
            3. Je viens d'essayer votre macro et la première ligne se met en rouge il ne excel ne veut pas du "sub"

              Encore merci de votre aide
              1. Re,
                Montrez ce que vous avez comme code
            4. Pour reafficher les onglets j'ai fait cette macro est-elle toujours valable avec votre macro.

              Sub affOnglet()
              Dim w As Worksheet
              For Each w In Worksheets
              If Left(w.Name, 4) = "SF02" Then
              w.Visible = True
              End If
              Next w
              End Sub

              Merci de votre aide

              Je viens d'essayer votre macro et la première ligne se met en rouge il ne excel ne veut pas du "sub"

              Encore merci de votre aide
              1. Re
                Macro toujours valable.

                Bonne suite
            5. Bonjour,

              Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
              If Target.Count > 1 Then Exit Sub 'sortie si plus d'une cellule selectionnee

              If Target.Column <> 5 And Target.Row <> 12 Then 'cellule E12 selectionnee ??
              'pas E12
              Else
              With Sheets(Sh.Name)
              If Left(.Name, 4) = "SF02" And .Range("E12").Value = 0 And .Range("E12").Value <> "" Then
              .Visible = False
              End If
              End With
              End If

              End Sub

              Vous copier ce code dans ThisWorkbook du VBA

              Bonne suite

              PS: vous savez comment faire pour reafficher les onglets caches!...