Vérifier si la cellule contient un "X" avant de réaliser une boucle
Bonjour à tous,
Je souhaite réaliser un planning avec le nombre d'heure par dossier et par personne.
Pour ce faire j'ai rentré le planning sous forme de couleur. Chaque couleur correspond à une phase.
J'ai ensuite créé une formule qui me permet de traduire les couleurs en horaire.
Or ce que je souhaiterai à présent c'est que cette formule ne soit activé que sur la colonne JFA.
En effet, sur la colonne DME, je vais ensuite copier la même formule dans VBA mais je vais modifier le nombre d'heure selon la couleur.
Il y aura donc plein de fois cette formule, chaque formule étant dédiée à chaque personne.
Ce que je souhaiterai connaitre c'est comment je fais pour que la formule ne s'active que si, sur la même ligne, la colonne E est cochée?
Ci joint mon fichier avec le programme réalisé.
Espérant avoir été assez clair.
Je vous remercie d'avance pour votre temps !
Bonjour Jeremie44
Pas certain que ce soit la meilleure façon de procéder, ceci dit, voici le code modifié et optimisé
Sub ChangeValueBasedOnCellColor() 'JFA
Dim dCol As Long, dLig As Long, Lig As Long
Dim Rng As Range
' Avec la feuill active
With ActiveSheet
' Dernière colonne du planning
dCol = .cells(12, Columns.Count).End(xlToLeft).Column
' Dernière ligne du planning
dLig = .Range("A" & Rows.Count).End(xlUp).Row
' Parcourir chaque ligne
For Lig = 13 To dLig
' Tester la colonne JFA qui doit contenir un X ou X
If InStr(1, .Range("E" & Lig), "x", vbTextCompare) > 0 Then
' Si ligne à traiter
For Each Rng In .Range(.cells(Lig, "P"), .cells(Lig, dCol))
' Si colonne visible
If Rng.EntireColumn.Hidden = False Then
' Appliquer ce qu'il faut
With Rng
Select Case .Interior.Color
Case Is = RGB(166, 166, 166) 'Gris
.Value = 0.5
Case Is = RGB(112, 48, 160) 'Violet
.Value = 4
Case Is = RGB(192, 0, 0) 'Rouge foncé
.Value = 20
Case Is = RGB(146, 208, 80) 'Vert clair
.Value = 10
Case Is = RGB(0, 176, 240) 'Bleu clair
.Value = 1.5
Case Is = RGB(0, 112, 192) 'Bleu foncé
.Value = 10
Case Is = RGB(255, 192, 0) 'Orange
.Value = 16
End Select
End With
End If
Next Rng
End If
Next Lig
End With
Application.DisplayAlerts = False
End Sub
A tester
Bonjour Bruno,
Merci beaucoup pour ton retour.
Cela fonctionne et effectivement je suis d'accord avec toi, il faudra essayer de faire un programme plus simple !
Bonne journée à toi,