Autres Changer la couleur des caractères compris entre 2 chaînes de caractères sur une ligne dans Excel 2007 avec une Macro

excel12

XLDnaute Nouveau
Changer la couleur des caractères compris entre 2 chaînes de caractères sur une ligne dans Excel 2007 avec une Macro


Bonjour à tous!


Dans Excel 2007, j’ai une liste de phrases.

Dans la colonne A, j’ai plus de 3000 lignes où j’ai des phrases d’écrites.

Le texte est écrit en noir. Les lettres comprissent entre les chaînes de caractères «{{c1::» et «}}» doivent devenir de couleur rouge. Vous pouvez observer en dessous un exemple de ce que je souhaiterais réussir à faire.


Texte de départ

I {{c1::am}} 20 (years old), I{{c1::‘m}} 1 m 78 and I{{c1::‘m}} 72 kilos.

This room {{c1::is}} 3 metres long. Do you know this?

How {{c1::are}} you? I {{c1::am very happy}} and fine.

{{c1::There’s}} a fly in my soup.



Résultat à obtenir

I {{c1::am}} 20 (years old), I{{c1::‘m}} 1 m 78 and I{{c1::m}} 72 kilos.

This room {{c1::is}} 3 metres long. Do you know this?

How {{c1::are}} you? I {{c1::am very happy}} and fine.

{{c1::There’s}} a fly in my soup.


J’ai joint un fichier Excel avec le contenu de cet exemple. C’est seulement un petit échantillon des 3000 lignes à traiter.

J’aimerais avoir une Macro dans Excel 2007 pour procéder au changement de couleur automatiquement.

J’ai commencé à programmer. Vous pouvez voir, à la suite de ce message, le peu que j’ai réussi à faire. Je n'arrive pas à trouver comment dire au programme d’appliquer la couleur jusqu’à «}}».


S’il vous plaît, si possible, ajoutez des commentaires au travers des lignes de programmations. Je veux vraiment pouvoir comprendre au maximum et apprendre comment ça fonctionne et pouvoir un jour réussi à programmer par moi-même.


Merci beaucoup de prendre le temps de m’aider, parce que pour moi, c’est vraiment difficile et je n’arrive pas à trouver la solution.


Excel12

-----------------------------------------------

Sub Trou_écrire_couleur()

'

' Trou_écrire_couleur Macro

' Vérifie chaque ligne. Tout le contenu à l'intérieur des accolades doit devenir rouge. {{c1::}}

'



Dim DernLigne As Long

Dim i As Integer

DernLigne = Range("A" & Rows.Count).End(xlUp).Row 'Cherche la dernière ligne rempli depuis la colonne A

For i = 1 To DernLigne 'boucle de la ligne 1 à la dernière ligne

If InStr(Range("A" & i), "{{c1::") > 0 Then

With Application.ReplaceFormat.Font

.Subscript = False

.Color = 255

.TintAndShade = 0

End With



End If

Next i



End Sub
 

Pièces jointes

  • Changer la couleur des caractères compris entre 2 chaînes de caractères.jpg
    Changer la couleur des caractères compris entre 2 chaînes de caractères.jpg
    166.7 KB · Affichages: 32
  • Changer la couleur des caractères compris entre 2 chaînes de caractères.xlsx
    178.6 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour XL12,
En PJ un essai :
VB:
Sub Trou_écrire_couleur()
Dim DernLigne As Long, i As Integer, debut As Integer, fin As Integer
Application.ScreenUpdating = false
DernLigne = Range("A" & Rows.Count).End(xlUp).Row 'Cherche la dernière ligne rempli depuis la colonne A
For i = 1 To DernLigne                      'boucle de la ligne 1 à la dernière ligne
    Chaine = Range("A" & i)                 ' extrait la chaine à traiter
    debut = 0: fin = 0                      ' debut et fin sont les repères de la chaine à colorer
    For c = 1 To Len(Chaine)                ' pour toute la chaine
        If Mid(Chaine, c, 2) = "::" Then    ' on recherche le debut ::
            debut = c + 2
        End If
        If Mid(Chaine, c, 2) = "}}" Then    ' on recherche la fin }}
            fin = c
        End If
        If debut <> 0 And fin <> 0 Then     ' si debut et fin non nul alors on colore
            Range("A" & i).Select
            With ActiveCell.Characters(Start:=debut, Length:=fin - debut).Font
                .Color = RGB(255, 0, 0)     ' en rouge entre les deux
            End With
            debut = 0: fin = 0              ' on remet à zéro les pointeurs pour le prochain
        End If
    Next c
Next i
End Sub
Je pense qu'on doit pouvoir faire mieux et plus rapide. Mais celle là marche tout de même.:)
NB: la prochaine fois, utilisez les balises </> pour mettre votre code, c'est plus lisible.
 

Pièces jointes

  • Changer la couleur des caractères compris entre 2 chaînes de caractères (1).xlsm
    186.4 KB · Affichages: 5
Dernière édition:

Iznogood1

XLDnaute Impliqué
Bonjour,

Dna sle fichier joint, execute la macro "Demo" (en espérant qu'elle fonctionne avec XL2007).

VB:
Option Explicit

Sub Demo()
  Dim r As Range
  Const MARQUEUR_DEBUT = "{{c1::"
  Const MARQUEUR_FIN = "}}"
 
  Dim Position_Debut As Integer
  Dim Position_Fin As Integer
  Dim Longueur_Marqueur_Debut  As Integer
 
  Longueur_Marqueur_Debut = Len(MARQUEUR_DEBUT)
 
  For Each r In Range("A1:A" & Range("A1").CurrentRegion.Rows.Count)
    Position_Debut = 1
    While InStr(Position_Debut, r.Value, MARQUEUR_DEBUT) <> 0
      Position_Debut = InStr(Position_Debut, r.Value, MARQUEUR_DEBUT)
      Position_Fin = InStr(Position_Debut, r.Value, MARQUEUR_FIN)
      If Position_Fin <> 0 Then
        r.Characters(Position_Debut + Longueur_Marqueur_Debut, _
        Position_Fin - Position_Debut - Longueur_Marqueur_Debut).Font.Color = vbRed
      End If
      Position_Debut = Position_Debut + 1
    Wend
  Next r
End Sub
 

Pièces jointes

  • Changer la couleur des caractères compris entre 2 chaînes de caractères.xlsm
    187.1 KB · Affichages: 8

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Iznogood, Re XL12,
Votre code marche très bien sur XL2007.
Sur mon PC et pour 5000 lignes mon code donne 1.02s et le votre 4.33s.
Cependant si on rajoute le fameux Application.ScreenUpdating = False en début de code on passe à 0.55s soit deux fois plus rapide que le mien.
Je savais qu'il y avait surement plus rapide mais je ne trouvais pas. :)
 

excel12

XLDnaute Nouveau
Wow! :) C’est super fantastique!!!! Je suis vraiment très content! :) Tout fonctionne parfaitement bien!

Sylvanu et Iznogood1, merci beaucoup! C’est vraiment très gentil d’avoir pris le temps de vous occuper de ma macro et je tiens à vous dire que je suis très reconnaissant de votre aide. C’est un soulagement, car cette macro me permettra d’accomplir en une seconde une tâche fastidieuse qui m’aurait demandé des heures interminables de travail.

Sylvanu, j’ai lu votre commentaire concernant les balises pour rendre le code plus lisible. Est-ce que le fonctionnement de ces balises ressemble à celui des balises en HTML? Comment est-ce qu’on les utilise?

</>code à écrire</>

<code à écrire/>
<code à écrire>

Je suis désolé de devoir poser une question qui doit être extrêmement simple pour vous, mais je ne sais pas comment les utiliser. Si possible, merci de me montrer un exemple. Par respect pour ceux qui m’aident, je veux apprendre à bien utiliser les balises dont vous me parlez. Ainsi, une prochaine fois, je serai en mesure de bien présenter ma question. Un proverbe dit : «Qui a peur de poser des questions, a honte d’apprendre». Alors je prends mon courage pour vous poser cette petite question.

Encore une fois, merci beaucoup!

Excel12
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
1.jpg

:)
VB:
Avec les balises c'est plus lisible !