1
votes

Comment créer une macro en un clic pour les onglets de code couleur en fonction du contenu du nom de la feuille?

J'ai une macro pour importer plusieurs fichiers dans une seule feuille et leur donner des noms avec des caractères légaux. Ces fichiers et noms de fichiers varieront de temps en temps en fonction des besoins du projet. Je voudrais colorer le code comme les feuilles par nom de feuille.

Je dois donc parcourir toutes les feuilles à la recherche de phrases particulières. Comme toutes les feuilles contenant le mot «page», elles seraient colorées en bleu. Ainsi, les doublons de titre de page et les titres de page trop longs seraient tous deux des onglets bleus. Alors que les pages contenant la phrase H1 seraient toutes rouges. Donc H1 Duplicates et H1 Too Long seraient tous les deux des tabulations rouges.

Il y a des moments où un titre inclurait à la fois la page et H1, donc je dois faire une exception pour cela et choisir une couleur unique. P >

Je me rends compte que je dois parcourir toutes les feuilles en vérifiant leur existence et en indiquant ce que le nom contient et la couleur que je veux utiliser, mais je n'arrive pas à trouver une macro en un clic qui n'est pas Ce n'est pas un sous-marin privé pour accomplir cela.

Sub TabColor()

Sheets("canonicals missing").Tab.Color = vbBlack
Sheets("canonicals nonindexable canonic").Tab.Color = vbBlack
Sheets("h1 duplicate").Tab.Color = vbRed
Sheets("h1 missing").Tab.Color = vbRed
Sheets("h1 multiple").Tab.Color = vbRed
Sheets("h1 over 70 characters").Tab.Color = vbRed
Sheets("page titles duplicate").Tab.Color = vbBlue
Sheets("page titles missing").Tab.Color = vbBlue
Sheets("page titles over 65 characters").Tab.Color = vbBlue
Sheets("page titles same as h1").Tab.Color = vbBlue

End Sub

J'ai choisi la route exacte du titre car il y a des moments où ils contiennent deux mots-clés comme "page" et "h1", alors j'ai pensé il vaut mieux être explicite. Cependant, si ces titres n'existent pas, cela s'arrête. Les titres varieront toujours, il n'y a donc aucun moyen de garantir exactement quels seront les titres dans un lot donné de fichiers .xls. Je ne sais pas comment parcourir chaque feuille et vérifier son existence. Je suis très nouveau sur VBA et je trébuche.


0 commentaires

3 Réponses :


0
votes

Quelque chose comme ça peut-être?

Utiliser un pour chaque boucle sur la collection feuilles de calcul et instr pour rechercher une chaîne dans une chaîne.

Sub test_tabcol()

Dim w As Excel.Worksheet

For Each w In ThisWorkbook.Worksheets

    If InStr(1, w.Name, "search for blue", vbTextCompare) <> 0 Then
        w.Tab.Color = vbBlue
    ElseIf InStr(1, w.Name, "search for red", vbTextCompare) <> 0 Then
        w.Tab.Color = vbRed
    Else
        w.Tab.Color = xlNone
    End If

Next w

End Sub


0 commentaires

0
votes

Voici une méthode qui colore les onglets en fonction de la couleur d'arrière-plan des cellules d'une feuille d'index. L'avantage de cette approche est que vous pouvez facilement modifier le texte de recherche et les couleurs. Le gif animé (cliquez pour une vue détaillée) me montre comment parcourir le code et les onglets de feuille sont colorés en fonction du texte dans les cellules colorées. Bien sûr, vous modifieriez le code en fonction de vos besoins.

 entrez la description de l'image ici

Sub colorTabs()
Dim sh As Worksheet, r As Range
Set sh = ThisWorkbook.Worksheets("index")
Set r = sh.Range("A1")
While r <> ""
    For Each sh In ThisWorkbook.Worksheets
        If InStr(sh.Name, r) Then sh.Tab.ColorIndex = r.Interior.ColorIndex
    Next sh
    Set r = r.Offset(1, 0)
Wend
End Sub


0 commentaires

0
votes

Comme vous avez coloré les onglets qui ne contiennent pas page ou H1 dans vbBlack dans votre exemple, je suppose que vous recherchez quelque chose comme ça

Sub ColorIt()

    Dim wks As Worksheet

    For Each wks In ActiveWorkbook.Worksheets

        ' Black for all sheets
        wks.Tab.Color = vbBlack

        ' Blue in case it contains 'page'
        If InStr(1, wks.Name, "page") Then
            wks.Tab.Color = vbBlue
        End If

        ' Red in case it contains 'H1'
        If InStr(1, wks.Name, "H1") Then
            wks.Tab.Color = vbRed
        End If

        ' Cyan (or another color) in case it contains 'page' and 'H1'
        If InStr(1, wks.Name, "page") > 0 And InStr(1, wks.Name, "H1") > 0 Then
            wks.Tab.Color = vbCyan
        End If

    Next wks

End Sub


0 commentaires