XL 2016 Mise en forme Conditionnelle avec 3 conditions

melltel

XLDnaute Junior
Bonjour,
svp je reviens vers vous espérant avoir une solution.
j'ai crée un tableau( Feuille cotation_ENJEUX) avec des valeurs et j'aimerais faire une mise en forme conditionnelle à celui ci de telle sorte que:
quand on clique sur une cellule de poids, colonne k (fusionné), on obtient automatiquement la ligne du tableau coloré et,
la valeur de la cellule(Poid) est automatiquement remplie dans sa cellule poids retenu (colonne M fusionné).

jusqu'ici, je n'ai pas d'erreur et ce que j'ai fais ne fonctionne pas . please help!
merci d'avance.
 

Pièces jointes

  • ProTaxonomie - Co.xlsm
    33.8 KB · Affichages: 4
Solution
Bonjour Melltel,
Par pitié, évitez les cellules fusionnées. En VBA c'est la plaie à traiter.
En PJ j'ai supprimer le maximum de cellules fusionnées.
( Pour faire un retour à la ligne dans une cellule il suffit de faire ALT+Entrée. )
Pour le reste j'ai jonglé :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [C10:C40]) Is Nothing Then
        Dim Ligne%: Ligne = Target.Row
        Cells(Ligne, "C").Offset(0, 1).Select   ' Le select est obligatoire sinon on selectionne une cellule
        Selection = Cells(Ligne, "C")           ' et non les cellules fusionnées
        Mémorisé = Cells(Ligne, "C")    ' Mémorisation de la ligne cliquée
        While...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Melltel,
Par pitié, évitez les cellules fusionnées. En VBA c'est la plaie à traiter.
En PJ j'ai supprimer le maximum de cellules fusionnées.
( Pour faire un retour à la ligne dans une cellule il suffit de faire ALT+Entrée. )
Pour le reste j'ai jonglé :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [C10:C40]) Is Nothing Then
        Dim Ligne%: Ligne = Target.Row
        Cells(Ligne, "C").Offset(0, 1).Select   ' Le select est obligatoire sinon on selectionne une cellule
        Selection = Cells(Ligne, "C")           ' et non les cellules fusionnées
        Mémorisé = Cells(Ligne, "C")    ' Mémorisation de la ligne cliquée
        While Cells(Ligne, "C") <> ""   ' Recherche vers le haut de la première cellule vide
            Ligne = Ligne - 1
        Wend
        Ligne = Ligne + 1
        While Cells(Ligne, "C") <> ""   ' On traite vers le bas jusqu'à la première cellule vide
            If Cells(Ligne, "C") <> Mémorisé Then
                Range("B" & Ligne & ":C" & Ligne).Interior.Color = xlNone
            Else
                Range("B" & Ligne & ":C" & Ligne).Interior.Color = RGB(255, 255, 0)
            End If
            Ligne = Ligne + 1
        Wend
    End If
End Sub
NB: Dans un chapitre, on ne peux pas avoir deux poids identiques, sinon deux lignes sont en couleur, et on ne peut pas savoir quelle est celle sélectionnée.
 

Pièces jointes

  • ProTaxonomie - Co.xlsm
    37 KB · Affichages: 5

melltel

XLDnaute Junior
Bonjour Melltel,
Par pitié, évitez les cellules fusionnées. En VBA c'est la plaie à traiter.
En PJ j'ai supprimer le maximum de cellules fusionnées.
( Pour faire un retour à la ligne dans une cellule il suffit de faire ALT+Entrée. )
Pour le reste j'ai jonglé :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [C10:C40]) Is Nothing Then
        Dim Ligne%: Ligne = Target.Row
        Cells(Ligne, "C").Offset(0, 1).Select   ' Le select est obligatoire sinon on selectionne une cellule
        Selection = Cells(Ligne, "C")           ' et non les cellules fusionnées
        Mémorisé = Cells(Ligne, "C")    ' Mémorisation de la ligne cliquée
        While Cells(Ligne, "C") <> ""   ' Recherche vers le haut de la première cellule vide
            Ligne = Ligne - 1
        Wend
        Ligne = Ligne + 1
        While Cells(Ligne, "C") <> ""   ' On traite vers le bas jusqu'à la première cellule vide
            If Cells(Ligne, "C") <> Mémorisé Then
                Range("B" & Ligne & ":C" & Ligne).Interior.Color = xlNone
            Else
                Range("B" & Ligne & ":C" & Ligne).Interior.Color = RGB(255, 255, 0)
            End If
            Ligne = Ligne + 1
        Wend
    End If
End Sub
NB: Dans un chapitre, on ne peux pas avoir deux poids identiques, sinon deux lignes sont en couleur, et on ne peut pas savoir quelle est celle sélectionnée.
Merci Sylvanu
je ne savais pas que les cellules fusionnées étaient difficiles à gérées.
effectivement, dans ma conception on ne peut pas sélectionner deux poids identiques dans le même chapitre.
Vraiment Merci pour ton apport. je vais continuer de peaufiner à ma sauce.
 

melltel

XLDnaute Junior
C'est ainsi.
Le fusionnage n'est qu'un artifice d'affichage.
C'est bien un tableau au sens XL du terme.
Bonsoir Sylvanu,
tu m'as déjà aidé mais stp je reviens vers toi pour avoir encore de l'aide. stp
quand on clique sur le poids, ça colore la ligne en jaune et ça remplie automatiquement la valeur du poids dans la colonne de droite ( poids retenu)
Mais stp je n'arrive pas à modifier le clique. je souhaite plutôt faire le clique sur les lignes de gauche (B) qui contiennent le texte. et non plus sur les poids .
de telle sorte que lorsque je clique sur la ligne de gauche, sa colore la ligne B , la valeur de son poids et sa recopie cette valeur dans la colonne de droite(poids retenu) .

Espérant que tu me comprenne,
Merci déjà!
 

Pièces jointes

  • ProTaxonomie.xlsm
    33.6 KB · Affichages: 6

melltel

XLDnaute Junior
Bonsoir Sylvanu,
tu m'as déjà aidé mais stp je reviens vers toi pour avoir encore de l'aide. stp
quand on clique sur le poids, ça colore la ligne en jaune et ça remplie automatiquement la valeur du poids dans la colonne de droite ( poids retenu)
Mais stp je n'arrive pas à modifier le clique. je souhaite plutôt faire le clique sur les lignes de gauche (B) qui contiennent le texte. et non plus sur les poids .
de telle sorte que lorsque je clique sur la ligne de gauche, sa colore la ligne B , la valeur de son poids et sa recopie cette valeur dans la colonne de droite(poids retenu) .

Espérant que tu me comprenne,
Merci déjà!
voici ce que j'ai fait et qui ne marche pas !
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [B10:B40]) Is Nothing Then
'Range("C10:C40").Select
'Selection.Locked = True
'MsgBox MSG, vbExclamation, "Ne pas modifier les cases en jaune"

Dim Ligne%: Ligne = Target.Row
Cells(Ligne, "B").Offset(0, 1).Select ' Le select est obligatoire sinon on selectionne une cellule
Selection = Cells(Ligne, "B") ' et non les cellules fusionnées
Mémorisé = Cells(Ligne, "C") ' Mémorisation de la ligne cliquée
While Cells(Ligne, "C") <> "" ' Recherche vers le haut de la première cellule vide
Ligne = Ligne - 1
Wend
Ligne = Ligne + 1
While Cells(Ligne, "C") <> "" ' On traite vers le bas jusqu'à la première cellule vide
If Cells(Ligne, "C") <> Mémorisé Then
Range("B" & Ligne & ":C" & Ligne).Interior.Color = xlNone
Else
Range("B" & Ligne & ":C" & Ligne).Interior.Color = RGB(255, 255, 0)
End If
Ligne = Ligne + 1
Wend
End If
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Rapidement, je pense qu'il suffit de faire :
VB:
If Not Intersect(Target, [B10:C40]) Is Nothing Then
ainsi l'action s'exécutera qu'on clic sur la colonne B ou la colonne C.
Ou si on veut que seule la colonne B soit active :
Code:
If Not Intersect(Target, [B10:B40]) Is Nothing Then

[B10:C40] représente la plage ou l'action se fera.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
S'il vous plait, utilisez les balises ( </> à droite de l'icone GIF ) pour le code, c'est plus lisible.
Je n'ai pas cherché ce qui ne marchait pas dans votre code, j'ai horreur des devinettes. La prochaine fois dites au moins ce qui ne va pas, ça simplifie la tache.

Voir PJ avec code modifié. On peut cliquer sur les colonnes B ou C indifféremment.
'MsgBox MSG, vbExclamation, "Ne pas modifier les cases en jaune"
Si vous voulez interdire la modification des textes en colonnes B et C il suffit de repositionner le curseur en colonne A avec :
VB:
Range("A" & Ligne).Select ' Ainsi on ne peut pas modifier la cellule en jaune
A supprimer si vous n'en voulez pas.
 

Pièces jointes

  • ProTaxonomie - Co (1).xlsm
    37.6 KB · Affichages: 4

melltel

XLDnaute Junior
Bonjour,
S'il vous plait, utilisez les balises ( </> à droite de l'icone GIF ) pour le code, c'est plus lisible.
Je n'ai pas cherché ce qui ne marchait pas dans votre code, j'ai horreur des devinettes. La prochaine fois dites au moins ce qui ne va pas, ça simplifie la tache.

Voir PJ avec code modifié. On peut cliquer sur les colonnes B ou C indifféremment.

Si vous voulez interdire la modification des textes en colonnes B et C il suffit de repositionner le curseur en colonne A avec :
VB:
Range("A" & Ligne).Select ' Ainsi on ne peut pas modifier la cellule en jaune
A supprimer si vous n'en voulez pas.
Merci Sylvanu!
 

Discussions similaires