Mise en forme conditionnelle pour mettre en surbrillance les employés affectés à un chantier spécifique dans un planning Excel

Bonjour,
Je travaille avec un planning Excel où :

  • Les employés sont listés dans la colonne D (de D8 à D40).
  • Chaque employé est affecté à différents chantiers, indiqués dans d’autres colonnes du planning.
  • En dessous du tableau de planning, j’utilise une fonction NB.SI pour calculer le nombre de répétitions d’un chantier spécifique (par exemple, 610).

Je cherche une solution VBA qui permettrait, lorsque je clique sur une cellule contenant une formule NB.SI (ex. celle calculant le nombre de fois que le chantier 610 apparaît), de mettre en surbrillance en jaune les lignes des employés affectés à ce chantier.

L’objectif est que, en cliquant sur une cellule NB.SI :

  1. La macro vérifie la formule NB.SI pour identifier le critère (le numéro de chantier).
  2. La macro recherche ce critère dans la colonne D.
  3. La macro met en surbrillance en jaune toutes les lignes des employés affectés au chantier correspondant.

merci par avance à toute personne qui me donnera une idée.

voici la macro mais elle fonctionne pas

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  • Dim rangeNB_SI As Range*

  • Dim criterion As String*

  • Dim foundCell As Range*

  • Dim firstAddress As String*

  • Dim ws As Worksheet*

  • ’ Définir la feuille active*

  • Set ws = Me*

  • ’ Définir les plages NB.SI et employés*

  • Set rangeNB_SI = ws.Range(« G42:GF90 ») ’ Ajustez cette plage selon l’emplacement de vos formules NB.SI*

  • Set rangeEmployees = ws.Range(« D8:D40 ») ’ Plage des employés*

  • ’ Effacer les surbrillances précédentes dans les colonnes D à G du planning*

  • ws.Range(« D8:G40 »).Interior.ColorIndex = xlNone*

  • ’ Vérifier si la cellule sélectionnée est dans la plage des formules NB.SI*

  • If Not Intersect(Target, rangeNB_SI) Is Nothing Then*

  •    ' Vérifier si la cellule contient une formule NB.SI*
    
  •    If Target.HasFormula And InStr(1, Target.Formula, "NB.SI", vbTextCompare) > 0 Then*
    
  •        ' Extraire le critère de la formule NB.SI*
    
  •        criterion = Split(Split(Target.Formula, ",")(2), ")")(0)*
    
  •        criterion = Replace(criterion, """", "") ' Enlever les guillemets*
    
  •        ' Rechercher le critère dans la colonne D du planning*
    
  •        With rangeEmployees*
    
  •            Set foundCell = .Find(What:=criterion, LookIn:=xlValues, LookAt:=xlWhole)*
    
  •            If Not foundCell Is Nothing Then*
    
  •                firstAddress = foundCell.Address*
    
  •                Do*
    
  •                    ' Mettre en surbrillance en jaune la colonne D de la ligne correspondante*
    
  •                    ws.Range("D" & foundCell.Row & ":G" & foundCell.Row).Interior.Color = RGB(255, 255, 0)*
    
  •                    Set foundCell = .FindNext(foundCell)*
    
  •                Loop While Not foundCell Is Nothing And foundCell.Address <> firstAddress*
    
  •            End If*
    
  •        End With*
    
  •    End If*
    
  • End If*
    End Sub

Merci à tous

je suppose que c’est plus facile/pratique de mettre « criterium » dans une cellule et d’utiliser une MFC.
Et … c’est plus facile si vous donnez un fichier anonymisé comme exemple.

Bonjour,
veuillez trouvez en piece jointe le classeur excel, donc je rééxplique un peu, mon objectif est quand je clique sur une cellule qui contient une NB SI supérieur à 1 la colonne D des employé se met jaune, exemple si chantier 610 ya un seul empl donc il va le mettre en jaune aprés quand je change de cellule c’est pareil sur toute une plage, mais le seul soucis c’est que je pense fallait changer la fonction parce que la fonction NB SI elle compte nombre de répétition d’un chantier sur une plage, mais la fonction qui va mettre un lien avec la colonne D j’ai essayer une recherche X et index equiv mais ça marche pas comme je veux,
Merci par avance
Classeur1.xlsm (79,5 Ko)

la ligne 41 contient la valeur que vous voulez mettre en surbrillance (si le nombre est supérieur à 1).
Pour cela vous clicquez avec la souris droite sur une cellule (avec formules) de la plage E42:GD87. (voir macro Worksheet_BeforeRightClick (autrement le double-clicque est aussi possible)

Il y a aussi une MFC pour cette plage, 0 = font gris, 1 = normal, >1 = font rouge.
Classeur1 (49).xlsm (84,8 Ko)

Je vous remercie d’abord pour votre réponse, je pense que mon problème est compliqué à résoudre, moi, je voudrais si je clique sur les formules NB-SI dans la plage, exemple je sélectionne 10, je voudrais qu’il me sélectionne, tous les dix employé sur la colonne D, mais le problème si que ya pas de relation entre la NB SI et la colonne D, je me suis dit j’essaie avec une rechercheX là comme ça il va faire un lien avec la colonne des employés, merci par avance

Classeur1 (49).xlsm (85,8 Ko)
avec Worksheet_BeforeRightClick

je vous remercie, je vais juste essayer de rejouter une lignes sur le code quand je change de cellule ça va changer la coloration de l’ancienne cellule et mettre la nouvelles
merci pour votre aide

franchement j’arrive pas à résoudre le probléme, dans le code que vous avez mis il séléctionne juste une colonne mais je voudrais quand je déplace entre les cellule ça change la coloration, enfin meme si pas une coloration si on essaye de changer avec un filtre genre quand je clic sur la cellule il filtre ce qui a en dessus , merci d’avance

avec Worksheet_SelectionChange
en ligne 41 = effacer tous les couleur
en sélectant une cellule avec NB.SI un couleur aléatoire dans la plage D8:D38, les anciens couleurs restent.
Classeur1 (49).xlsm (84,3 Ko)

franchment je sais pas c’est qoui le probléme,ça fonctionne pas toujours, moi ce que je voudrais exemple quand je décends dans la plage NB SI , je voudrais quand je clique sur une cellule contient NBSI >=1 ça me met en jaune l’employé de la colonne D, exemple NB SI a séléctionner 4 je voudrais qu’il me met en jaune les 4 employé de la colonne D, mais là le probléme est que toujours la mise en forme reste pour les anciennes sélections
merci par avance

c’est ce que j’avais compris de votre denrière réaction. Mieux comme ceci ?
Donc c’est uniquement la plage D8:D38 pour ce couleur jaune ?
Classeur1 (49).xlsm (84,1 Ko)

oui exactement mais le soucis c’est que je voudrais quand je change de cellule, la coloration dans la colonne D va changer automatiquement en un clique, exemple je clique sur le chantier 610 qui représente un 10 donc ça va mettre en jaune les 10 employé, aprés quand je clique sur une autre cellule exemple dans la meme colonne ya chantier 614 donc ça va coloré l’employé concerne dans la colonne D, et ça j’aimerais qu’il soit appliqué sur toute la plage qui contient les NBSI. MERCI par avance

peut-être ceci, Vous faites un double-clicque dans une cellule de la plage E8:GD38 et vous recevez les cellules D8:D38 en couleurs correspondant avec les valeur de la colonne dans laquelle vous avez clicqué.
Classeur1 (49) (1).xlsm (85,9 Ko)

Une suggestion (sans vérifier les formules):

Mise en forme conditionnelle (evenement).xlsm (82,5 Ko)
Que j’ai déjà envoyé dans l’autre sujet :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("D8:D38").Interior.ColorIndex = 0
On Error GoTo fin
Dim b As Integer
Dim c As String
Dim d As Integer
Dim cellule As Range
d = Range("D" & Target.Row).Value
c = Target.Address & ":" & "D" & Target.Row
b = Range(c).Count - 1

For Each cellule In Range("D8:D38")
If cellule.Offset(0, b) = d Then
cellule.Interior.ColorIndex = 4
End If
Next
fin:
End Sub

je vous remercie ça marche trés bien
merci encore une fois

farid

bonjour,

je vous emercie également ça marche trés bien merci, je voudrais savoir juste si je rajoute des lignes à ma colonne D quand je modfier dans la macro (D8:D44), elle a du mal a fonctionnée, mais je gère ça. un grand merci à vous deux

1 « J'aime »