Couleur onglet en fonction de condition

Bonjour,

Je débute en macro excel (voir en excel poussé tout court) et là malgré de nombreuses recherches je sèche.

je souhaiterai que mon onglet change de couleur une fois que toute les cellules de B2:C25 soient remplis (non vide).

J'ai pensé qu'avec comme condition en C26 si B2:C25 non vide alors la case change de couleur et associer ce changement de couleur à l'onglet.

Mais je ne trouve pas la condition pour les cellules vide/non vide et peut etre est-il possible de le faire directement ?

Bon courage si vous souhaitez m'aider

Arthur

61test.xlsx (13.23 Ko)

Bonjour,

Voilà une proposition!

98garulfo.xlsm (15.24 Ko)

Pour ceux que ça intéresse:

Private Sub Worksheet_Activate()
checkData
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
checkData
End Sub

Private Sub checkData()
Dim plage As Range
Set plage = Range("B2:C25")
Dim test As Boolean
test = True
For Each cellule In plage
    If cellule = "" Then
        test = False
        Exit For
    End If
Next cellule

If test = False Then
    Feuil1.Tab.Color = vbRed
Else
    Feuil1.Tab.Color = vbGreen
End If
End Sub

bonjour,

une proposition

Sub aargh()
    For Each ws In Worksheets
        ws.Activate
        If Application.WorksheetFunction.CountA("B2:C25") = 48 Then
            ActiveSheet.Tab.Color = vbRed
        End If
    Next
End Sub

Bonjour Garulfo !

Voici une petite macro qui colore la plage et l'onglet si toutes les cellules sont remplies, et qui retire les couleurs si une des cellules de la plage passe en vide.

Le code pour ceux qui ne veulent pas télécharger le fichier :

Sub Couleur_onglet()

    Cellsaverif = Range("B2:C25")
    For Each cell In Cellsaverif
        If cell = "" Then vide = vide + 1
        If vide > 0 Then Exit For
    Next

    If vide = 0 Then
        ThisWorkbook.ActiveSheet.Tab.ColorIndex = 3
        ThisWorkbook.ActiveSheet.Range("B2:C25").Interior.ColorIndex = 3
    End If

    If vide > 0 Then
        ThisWorkbook.ActiveSheet.Tab.ColorIndex = xlNone
        ThisWorkbook.ActiveSheet.Range("B2:C25").Interior.ColorIndex = xlNone
    End If

End Sub

Tout d'abord merci beaucoup de votre aide

J'ai réussi à faire fonctionner dans d'autre fichier les codes de d3d9x et Gaz0line mais pas celui de Mr sulfurique (code trop concentré peut être )

Cependant j'ai peut être voulu faire mon malin en pensant que j'allais réussir à adapter vos propositions mais ça ne fonctionne pas avec le fichier qui sera utilisé et qui contient déjà des macro. ça sera un fichier pour le suivi de la formation de nouveau personnel.

Il y a une macro qui duplique une page donc ça fait "buger" la proposition de d3d9x et comme ce fichier va être utiliser par plusieurs personnes pas forcement concerné par l'informatique, je ne souhaite pas qu'il ai encore un bouton sur lequel cliquer (cas de Gaz0line).

Avez-vous d'autres idées ?

48test.xlsm (34.22 Ko)

Cellules fusionnées = mon code ne fonctionnera pas ^^

D'ailleurs je pense qu'aucun des codes proposés ne fonctionnera!

Si c'est une feuille que tu crée et que tu supprimes, aucun code utilisant "worksheet_change" ne pourra fonctionner!

(Sauf si on insère dans le code de la feuille le code à utiliser en la créant... ce qui soit dit en passant est vraiment pas une bonne idée)

rhaa c'est le problème quand on veut modifier des fichiers excel déjà existant et qu'on s'y connais pas trop.

Donc je pense pouvoir réussir à supprimer la fusion des cellules (jusque là ça va) mais la feuille se crée automatiquement comme copie de la feuille d'origine.

(j'ai fait en sorte que les gens renseignent juste 2-3 choses dont le nom sur le formulaire puis clique sur sauvegarder, ça duplique le formulaire renseigné tout en mettant le nom sur le nouvel onglet et ca remet à zero le formulaire de base)

J'imagine que comme c'est une copie le code est lui aussi copié non ? (et oui mon inculture est grande)

Bonjour,

nouvelle proposition

Sub aargh()
    For Each ws In Worksheets
        c = Application.WorksheetFunction.CountA(ws.Range("C5:D25"))
        If c = 42 Then
            ws.Tab.Color = vbRed
        Else
            ws.Tab.Color = xlNone
            ws.Tab.TintAndShade = 0
        End If
    Next
End Sub

C'est une proposition fonctionnelle h2so4, mais

  • il faudrait plutôt l'utiliser sur une seule feuille (celle-ci étant créé par VBA, on a un contrôle sur son nom)
  • elle nécessite de cliquer sur un bouton.

A mes confrères codeurs, pensez-vous qu'il soit possible d'utiliser un module de classe? Du type

Public wbPerso as new worksheetPerso
Sub Workbook_Open()
Set  wbPerso.bidule = Sheet("nomFeuille")
End sub

Et dans le module de classe mettre le code?


Edit:

Ce qui je propose fonctionne!

54testgarulfo.xlsm (17.26 Ko)

merci merci mille fois du temps que vous prenez pour mon problème.

Du coup j'ai testé (avec difficulté pour insérer les codes haha) ta proposition d3d9x sur mon fichier. malheureusement ca fait toujours le même problème, l'onglet dupliqué à partir de celui de base reste rouge même quand les cases sont remplis à posteriori.

En effet le formulaire de base ("conditionnement") ne sera jamais remplis intégralement du premier coup, c'est sa copie qui sera compléter au fur est à mesure.

J'ai pensé à une autre solution :

- est-il possible de crée une condition "quand C5:D25" non vide" une case ( J100 par exemple) devient vert puis on rentre le code suivant (trouvé sur le net)

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
  On Error Resume Next
  ActiveWorkbook.Sheets(Sh.Name).Tab.ColorIndex = Sheets(Sh.Name).[W2].Interior.ColorIndex
End Sub

apres je ne sais pas créer la condition " si C5:D25 non vide alors J100 devient vert"

Est-ce une bonne idée ?

78testd3d9x.xlsm (44.57 Ko)
Rechercher des sujets similaires à "couleur onglet fonction condition"