Condition sur une plage sélectionnée

David590

XLDnaute Occasionnel
Bonsoir à tous,

Je ne parviens pas à écrire deux conditions pour un groupe de cellules sélectionnées:

Si toutes les cellules de la sélection est = "" alors..
Si une cellule ou plus de la sélection est rouge (color.index=3) alors...

Merci pour votre aide
 

Hervé

XLDnaute Barbatruc
Re : Condition sur une plage sélectionnée

salut :)

pour le premier test, un solution possible en vba:

Code:
Public Sub toto()
Dim plg As Range

Set plg = Selection

If Application.CountA(plg) = 0 Then
    MsgBox ("Sélection vide")
Else
    MsgBox ("Sélection non vide")
End If
    
End Sub

pour la deuxième condition il te suffit de tester chaque cellule de ta sélection via une boucle

hésites pas à revenir en cas de souci, mais fournis un fichier exemple pour que l'on puisse t'aider plus efficacement

a plus
 

ROGER2327

XLDnaute Barbatruc
Re : Condition sur une plage sélectionnée

Bonjour à tous.


Hum... Pas de support... Demande imprécise...

Cela, peut-être ?​
Code:
Sub toto()
Dim nr&, r&, v&, Cel As Range

  With Selection

    For Each Cel In .Cells
      If Cel.Value = "" Then v = v + 1 Else Exit For
    Next
    If v = .Cells.Count Then _
      MsgBox "Toutes les cellules de la selection (" & .Address(0, 0) & ") contiennent """"." Else _
      MsgBox "Au moins une cellule de la selection (" & .Address(0, 0) & ") ne contient pas """"."

    For Each Cel In .Cells
      If Cel.Interior.ColorIndex <> 3 Then r = r + 1 Else Exit For
    Next
    If r = .Cells.Count Then _
      MsgBox "Aucune cellule de la selection (" & .Address(0, 0) & ") n'a un fond rouge." Else _
      MsgBox "Au moins une cellule de la selection (" & .Address(0, 0) & ") a un fond rouge."

    For Each Cel In .Cells
      If Cel.Interior.ColorIndex = 3 Then nr = nr + 1
    Next
    If nr = 0 Then _
      MsgBox "Aucune cellule de la selection (" & .Address(0, 0) & ") n'a un fond rouge." Else _
      MsgBox nr & " cellule" & IIf(nr > 1, "s", "") & " de la selection (" & .Address(0, 0) & ") " & IIf(nr > 1, "ont", "a") & " un fond rouge."
    
    If r = .Cells.Count And v = .Cells.Count Then _
      MsgBox "Aucune cellule de la selection (" & .Address(0, 0) & ") n'a un fond rouge" & vbLf & "et toutes les cellules de la selection contiennent """"." Else _
      MsgBox "Au moins une cellule de la selection (" & .Address(0, 0) & ") a un fond rouge" & vbLf & "ou ne contient pas """"."

  End With

End Sub


Bonne nuit.


ℝOGER2327
#8157


Samedi 28 Sable 143 (Saint Cervelas, penseur - fête Suprême Quarte)
7 Nivôse An CCXXIV, 0,4387h - terre végétale
2015-W53-1T01:03:10Z
 

David590

XLDnaute Occasionnel
Re : Condition sur une plage sélectionnée

Bonjour Hervé, Roger

Merci beaucoup pour vos réponses :)

Si je n'ai pas mis de fichiers exemple, c'est juste parce que pour certaine chose simple, je trouve que ça complique le problème pour pas forcement mieux le comprendre

Hervé ton code fonctionne mais pas dans mon cas, car les cellules ne sont pas réellement vide puisqu'elles sont en liaison avec une autres feuille, chose que j'ai omis de dire :eek:

J'ai donc fais les choses à moitié, c'est moins simple que je le pensais, vous avez parfaitement raison, désolé

Voila un fichier exemple en bonne et due forme dans lequel j'essai d'expliquer au mieux ma demande

Merci encore
 

Pièces jointes

  • Classeur exemple.xlsm
    36.7 KB · Affichages: 52
  • Classeur exemple.xlsm
    36.7 KB · Affichages: 56
Dernière édition:

Hervé

XLDnaute Barbatruc
Re : Condition sur une plage sélectionnée

salut :)

J'aurais donc besoin de changer toutes les lignes rouge en gris avec le bouton ci-dessus

le code ci dessous remet en blanc toute la plage B11:E100

Code:
Private Sub CommandButton2_Click()

'remet toutes lignes en blanc
Range(Cells(11, 2), Cells(100, 5)).Interior.ColorIndex = -4142

End Sub

et d’empêcher qu'une ligne devienne rouge si elle est complétement vide

le code ci dessous, teste si une valeur autre que la formule est présente en colonne B de la ligne sélectionnée.

si non, on sort si oui on change la couleur.

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim plg As Range
Dim c As Range
Dim cpt As Byte

If Not Application.Intersect(Target, Range("B11:e100")) Is Nothing Then
    Set plg = Range(Cells(Target.Row, 2), Cells(Target.Row, 5))
        'teste si cellule sans valeur
        For Each c In plg
            If c = 0 Then cpt = cpt + 1
        Next c
           ' si pas de valeur on sort
        If cpt = 4 Then
            TextBox2 = ""
            TextBox2.Activate
            Exit Sub
        End If
        'sinon on gêre la couleur
    With plg
        If .Interior.ColorIndex = -4142 Then
        .Interior.ColorIndex = 3
        Else
        .Interior.ColorIndex = -4142
        End If
    End With
End If

TextBox2 = ""
TextBox2.Activate
End Su
b

a plus
 
Dernière édition:

David590

XLDnaute Occasionnel
Re : Condition sur une plage sélectionnée

Re, ;)

Pour le premier code, c'est juste la ligne rouge que j'ai besoin de changer en gris, je n'ai pas précisé: gris color.index 3 par exemple

J'ai modifier mon fichier exemple pour être plus explicite

Pour le deuxième c'est impeccable, en plus le code beaucoup plus optimisé que celui que j'avais fait

J'aurais aimé peut être ajouter une réactivation de la textbox2 en cas de double clique

J'ai trouvé l’événement:
Code:
Private Sub worksheet_beforedoubleclick(ByVal target As Range, cancel As Boolean)
mais ca n'agit qu'avant le double clique, existe-il quelque chose qui agisse après ?

Merci encore :)
 

Pièces jointes

  • Classeur exemple2.xlsm
    42.1 KB · Affichages: 48
  • Classeur exemple2.xlsm
    42.1 KB · Affichages: 48
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 444
Messages
2 088 481
Membres
103 867
dernier inscrit
nykostinson