1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| Option Explicit
Sub essaiMiseEnRouge()
Dim unePlage As Range
Dim Retour As Long
'A adapter
Const ChaineDepart As String = "Nouveau Nom"
Const CouleurRouge As Long = 3
'On défnie la zone qui devra être traitée
Set unePlage = Feuil1.Range("C17:C20")
'On appelle la fonction de mise en Rouge
Retour = MiseEnRouge(unePlage, ChaineDepart, CouleurRouge)
'On informe du nombre de modification
MsgBox "Il y a eu " & CStr(Retour) & " modification" & IIf(Retour > 1, "s.", "."), Title:="Compte Rendu"
End Sub
Function MiseEnRouge(Plage As Range, ChaineDepart As String, uneCouleur As Long) As Long
Dim aCell As Range
Dim iDepart As Integer, lenRouge As Integer
'On boucle sur la plage
For Each aCell In Plage
'On s'assure que la cellule est du bon format (qu'elle contient "NouveauNom")
'Ici on met vbTextCompare pour ne pas tenir compte de la casse (majuscul/minuscul)
iDepart = InStr(1, aCell.Value, ChaineDepart, vbTextCompare)
If iDepart > 0 Then
'On détermine la longueur de la chaine qui devra passer en rouge
lenRouge = InStr(iDepart, aCell.Value, vbLf) - iDepart + 1
'On vérifie que le retour à la ligne à été trouvé
If lenRouge <= 0 Then
'Nom trouvé, on prend la fin de la chaine
lenRouge = Len(aCell.Value) - iDepart + 1
End If
'On reteste (après une éventuelle modification à la ligne précédente
If lenRouge > 0 Then
'On passe la chaine en rouge
aCell.Characters(iDepart, lenRouge).Font.ColorIndex = uneCouleur
'On incrémente le retour
MiseEnRouge = MiseEnRouge + 1
End If
End If
Next
End Function |
Partager