Recalculer Excel VBA sur toutes les feuilles de calcul à l'ouverture et au changement de tabulation

0

J'ai 13 feuilles de travail avec 12 d'entre eux pour chaque mois. Il y a une cellule dans chacune des 12 feuilles avec le nom du mois.

J'ai reçu un script VBA pour vérifier si le mois en cours correspond à la cellule et pour modifier la couleur de l'onglet en conséquence, mais un calcul dans la feuille est nécessaire pour la mise à jour.

Private Sub Worksheet_Change(ByVal Target As Range)
If Format(Date, "MMMM") = Range("E3").Value Then
    Me.Tab.ColorIndex = 10
Else
    Me.Tab.ColorIndex = xlColorIndexNone
End If
End Sub

Si j'arrête de mettre à jour la feuille du mois dernier et que je passe à la feuille suivante, les deux onglets sont mis en surbrillance car la feuille précédente n'a pas été mise à jour. Je veux juste que la feuille de travail du mois en cours soit mise en évidence.

Existe-t-il un moyen de recalculer toutes les feuilles de classeur ouvert et de changement de tabulation?

Gavsiu
la source

Réponses:

0

Dans le ThisWorkbookmodule vient de mettre

Option Explicit

Private Sub Workbook_Open()
    Dim mySheet As Worksheet
    For Each mySheet In ThisWorkbook.Sheets
        If mySheet.Cells(3, 5).Value = Format(Date, "MMMM") Then
            mySheet.Tab.ColorIndex = 10
        Else: mySheet.Tab.ColorIndex = xlColorIndexNone
        End If
    Next
End Sub

Maintenant, il n'a plus besoin de calculer quoi que ce soit et va simplement vérifier toutes les feuilles à chaque ouverture.

Raystafarian
la source
0

Oui. Dans l'éditeur VB, accédez à l'objet ThisWorkbook. En haut de la fenêtre de code, vous verrez une liste déroulante qui dit "(général)" ou "classeur". S'il indique "(Général)", ouvrez le menu déroulant et choisissez "Classeur" à la place. Il peut très bien insérer un nouveau sous-marin pour vous immédiatement; si c'est le cas, supprimez-le.

Maintenant, en haut à droite, vous avez une autre liste déroulante qui dit probablement "Ouvrir". Utilisez le menu déroulant pour choisir "Ouvrir", puis à nouveau pour choisir "Activer la feuille". Cela devrait insérer deux nouveaux sous-programmes dans votre fenêtre de code - Workbook_Openet Sheet_Activate. Notez que vous voulez les créer en utilisant les listes déroulantes, pas simplement en tapant les noms - ils risquent de ne pas fonctionner correctement si vous les tapez simplement.

Vous pouvez maintenant mettre le code de votre choix dans ces sous-programmes et le code sera exécuté lorsqu'il détectera l'événement en question (c'est-à-dire en ouvrant le classeur ou en sélectionnant une feuille de calcul). La structure exacte que vous avez demandée ressemblerait à ceci:

Private Sub Workbook_Open()
    Application.Calculate
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Application.Calculate
End Sub

Je ne dis pas que c'est le moyen le plus efficace de le faire, mais cela devrait répondre à votre question.

Werrf
la source
Quel est le moyen le plus efficace alors? Cela ne me dérange pas de lire si vous voulez simplement le lier.
dimanche
En outre, cela ne semble pas résoudre mon problème. Je dois encore éditer une cellule dans la feuille pour que l'onglet de couleur change.
dimanche