XL 2019 code vba changement de couleur si modification de la cellule

syriak

XLDnaute Nouveau
Bonjour à tous,
je voudrai que sur mon fichier, le texte change de couleur lorsque nous modifions la cellule.
Je vous met ci-joins le code VBA utiliser mais le seul problème c'est lorsque que je veux insérer une nouvelle ligne, il y a un bug dans le code à cette ligne "
If Not Intersect(Cible, Range("A6:G354")) Is Nothing Then".

Quelqu'un saurait-il m'aider? Merci d'avance
Cdlt

Option Explicit

Dim MemChange As Variant


Private Sub Entree_Click()
Application.EnableEvents = False ' Pour Saisie
End Sub

Private Sub Modif_Click()
Application.EnableEvents = True ' Pour modif.
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Cible As Range, Ret As Boolean)
If Not Intersect(Cible, Range("A6:G354")) Is Nothing Then
Range("A1").Select ' Empêche la modification de couleur si double-clic dans une cellule
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Cible As Range)
If Not Intersect(Cible, Range("A6:G354")) Is Nothing Then
MemChange = Cible.Value ' Met en mémoire la valeur avant modif.
End If
End Sub


Private Sub Worksheet_Change(ByVal Cible As Range)
Dim Car As String
Dim Cpt As Long
Dim MotsAvant() As String
Dim MotsApres() As String
Dim Mot As String
Dim i As Long
Dim j As Long
Dim Dep As Long
Dim Lng As Long
Dim Rep As Long

If Not Intersect(Cible, Range("A6:G354")) Is Nothing Then
' Mise en tableau des mots de la cellule avant modif
i = 0
For Cpt = 1 To Len(MemChange) + 1
Car = Mid(MemChange, Cpt, 1)
If Car <> " " And Cpt <> Len(MemChange) + 1 Then
Mot = Mot + Car
Else
i = i + 1
ReDim Preserve MotsAvant(1 To i)
MotsAvant(i) = Mot
Mot = ""
End If
Next Cpt
' Mise en tableau des mots de la cellule après modif
i = 0
For Cpt = 1 To Len(Cible) + 1
Car = Mid(Cible, Cpt, 1)
If Car <> " " And Cpt <> Len(Cible) + 1 Then
Mot = Mot + Car
Else
i = i + 1
ReDim Preserve MotsApres(1 To i)
MotsApres(i) = Mot
Mot = ""
End If
Next Cpt
' Traitement
If UBound(MotsAvant) <> UBound(MotsApres) Then ' Si Nb. mots différent, on colorie le fond de cellule
Cible.Interior.ColorIndex = 3
Else ' Sinon si Nb. de mots identique
For i = 1 To UBound(MotsAvant) ' Pour tous les mots on vérifie si le
If MotsApres(i) <> MotsAvant(i) Then ' mot après est différent du mot avant
If i = 1 Then ' Si c'est le premier mot
Lng = Len(MotsApres(1)) ' Longueur = long. 1er mot (à colorier)
Dep = 0 ' Départ = au 1er caractère
Else ' Pour le deuxième mot et les suivants
Lng = Len(MotsApres(i)) ' Longueur = long. du mot à colorier
Dep = 0 ' RAZ décalage du départ
For j = i - 1 To 1 Step -1
Dep = Dep + Len(MotsApres(j)) + 1 ' Décalage du départ = Somme des "longueur + 1 espace" de tous les mots précédents
Next j
Dep = Dep + 1 ' Départ = position suivante
End If
Cible.Characters(Start:=Dep, Length:=Lng).Font.ColorIndex = 3 ' On colorie la partie modifiée suivant valeurs calculées ci-dessus
End If
Next i
End If
End If
End Sub
 

syriak

XLDnaute Nouveau
Je met ci-joint un fichier excel avec le code déja mis sous vba. J'ai du enlever le tableau car donné confidentiel... Mais vous pouvez quand même comprendre le principe sans tableau.
Cdlt
Cyriaque
 

Pièces jointes

  • brouillon code.xlsm
    25.4 KB · Affichages: 8

Wayki

XLDnaute Impliqué
Bonjour,
Normal que ça bug, vous enregistrez une valeur de cellule en ayant sélectionné une plage. Un on error resume next résoudrais le problème.
Ensuite sans votre tableau ça va être compliqué de vous aider.
J'ai fais un code beaucoup plus simple, voyez en application sur la cellule A1
A +
 

Pièces jointes

  • Color nouveaux caractères cellule.xlsm
    16.2 KB · Affichages: 5

syriak

XLDnaute Nouveau
Bonjour,
Normal que ça bug, vous enregistrez une valeur de cellule en ayant sélectionné une plage. Un on error resume next résoudrais le problème.
Ensuite sans votre tableau ça va être compliqué de vous aider.
J'ai fais un code beaucoup plus simple, voyez en application sur la cellule A1
A +
Bonjour,
Merci pour votre réponse, le code fonctionne bien néanmoins lorsque l'on ajoute un mot dans une cellule vide, le mot ne se met pas en rouge…
Cdlt
 

syriak

XLDnaute Nouveau
Bonjour,
Je regarde dès que possible
A +
Ci-joint le fichier excel avec le tableau mais sans les infos à l'intérieur, j'ai mis deux "phrases" d'exemple. si tu changes la phrases complète, tout se met en rouge. si tu modifie juste un seul mot, seul le mot se met en rouge.
Mon problème c'est que je ne peux ajouter de ligne, colonne ou autre sans qu'il y est un bog.
Cdlt
 

Pièces jointes

  • changement de couleur.xlsm
    48 KB · Affichages: 2

Discussions similaires

Réponses
4
Affichages
450

Statistiques des forums

Discussions
315 093
Messages
2 116 133
Membres
112 667
dernier inscrit
foyoman