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. 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!...
    1
    1. 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
      0
      1. Re
        Macro toujours valable.

        Bonne suite
        0
    2. 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
      0
      1. Re,
        Montrez ce que vous avez comme code
        0
    3. 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
      0
      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.
        0
    4. 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
      0
      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.
        0
    5. 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
      0
      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 ?
        0
        1. Bonjour Claudine

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

          A+
          0
      2. 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.
        0
        1. 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
          0
          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
            0
        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.
          0
          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é ?
            0
          2. Re,
            Pas de soucis. Votre EXCEL: 2003 ou 2007-2010 pour vous mettre a dispo un exemple?

            A+
            0
        3. oui, mais l'onglet ne se cache pas
          0
          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.
            0
            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
              0
          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
            0
            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.
              0
              1. J'ai décortiqué ton fichier, je modifie la macro et te retourne le fichier
                A+
                0
            2. 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.
              0
              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
                0