Condition sur une chaine de caractères

cibleo

XLDnaute Impliqué
Bonsoir le forum,

Soit 3 cellules A1, B1 et C1.
Une seule d'entre elles peut contenir 1 ou plusieurs caractères rouges (Pas l'ensemble des caractères de la cellule) , comment retrouver son adresse.
Dans l'exemple, c'est B1.
Le but : utiliser l'adresse de la cellule trouvée dans un Select Case.

Le code ci-dessous fonctionne, si tous les caractères se trouvent colorés en rouge.:(
Pouvez-vous m'aider à reformuler la condition ?

Code:
Sub Marquage()
Dim Mavariable As String, j As Byte
For j = 1 To 3
    If Cells(1, j).Font.ColorIndex = 3 Then
           Mavariable = Cells(1, j).Address
           MsgBox Mavariable
        Exit Sub
    End If
Next
End Sub

Bonne soirée Cibleo
 

Pièces jointes

  • Adress.xls
    17.5 KB · Affichages: 70

Softmama

XLDnaute Accro
Re : Condition sur une chaine de caractères

Bjour cibleo,

tu peux modifier ta macro ainsi :
VB:
Sub Marquage()
Dim j As Byte, k As Integer
For j = 1 To 3 'On scanne les 3 cellules
    For k = 1 To Len(Cells(1, j)) 'On scanne chaque caractère de la cellule
    If Cells(1, j).Characters(k, 1).Font.ColorIndex = 3 Then MsgBox "le " & k & "ème caractère de la cellule " &Cells(1, j).Address & " est rouge": Exit For
    Next k
Next j
End Sub
 
Dernière édition:

cibleo

XLDnaute Impliqué
Bonjour Softmama,

Pour mon cas, j'ai remplacé exit For par exit Sub et c'est tout bon.

Code:
Sub Marquage1()
Dim Mavariable As String, j As Byte, k As Integer
For j = 1 To 3 'On scanne les 3 cellules
   For k = 1 To Len(Cells(1, j)) 'On scanne chaque caractère de la cellule
          If Cells(1, j).Characters(k, 1).Font.ColorIndex = 3 Then Mavariable = Cells(1,j).Address: Exit Sub
   Next k
Next j
End Sub

Plus qu'à l'adapter à mon Select Case, si complément je reviens.

Merci Cibleo
 

cibleo

XLDnaute Impliqué
Bonjour le forum,

Comme j'ai intégré ce bloc d'instructions dans un Select Case, Exit Sub en remplacement de Exit For me faussait le résultat.
J'ai donc réecrit comme ceci avec 2 Exit For.

Code:
Sub Marquage1()
Dim j As Byte, k As Integer, Mavariable As String, trouve As Boolean
trouve = False
For j = 1 To 3 'On scanne les 3 cellules
   For k = 1 To Len(Cells(1, j)) 'On scanne chaque caractère de la cellule
     If Cells(1, j).Characters(k, 1).Font.ColorIndex = 3 Then
       Mavariable = Cells(1, j).Address: trouve = True: Exit For
     End If
   Next k
   If trouve = True Then Exit For
Next j
MsgBox Mavariable
End Sub

Question : Un Do...loop Until n'aurait-il pas été plus judicieux ?

Cibleo
 

Discussions similaires

Réponses
3
Affichages
316

Statistiques des forums

Discussions
312 429
Messages
2 088 354
Membres
103 824
dernier inscrit
frederic.marien@proximus.