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?

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.


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.