IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Colorier chaine de caractères jusqu'à un retour chariot


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut Colorier chaine de caractères jusqu'à un retour chariot
    Bonjour,

    Voilà le topo !

    J'aimerai colorier en rouge une chaine de caractères qui débute par exemple par "NOUVEAU NOM" jusqu'à un retour chariot.

    Exemple

    ANCIEN NOM : DEVELOPPEZ
    NOUVEAU NOM : DEVELOPPEZ.COM

    Il faudrait colorier en rouge toute la ligne finalement jusqu'à un "vbCrLf"

    Merci d'avance !

    Edit : Si "NOUVEAU NOM : DEVELOPPEZ.COM" se trouve également dans une autre cellule, est-ce que cela serait plus simple à mettre en place ?

  2. #2
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    J'ai trouvé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Sub ChgTxtColor()
        Set myRange = Range("A1:A100")  'The Range that contains the substring you want to change color
        substr = "delete"   'The text you want to change color
        txtColor = 3   'The ColorIndex which repsents the color you want to change
     
        For Each myString In myRange
            lenstr = Len(myString)
            lensubstr = Len(substr)
            For i = 1 To lenstr
                tempString = Mid(myString, i, lensubstr)
                If tempString = substr Then
                    myString.Characters(Start:=i, Length:=lensubstr).Font.ColorIndex = txtColor
                End If
            Next i
        Next myString
    End Sub
    Mais celui ne fonctionne pas avec une valeur de cellule

    Si je change :

    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    substr = Range("A1").Value
    Cela ne fonctionne pas...

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Dans le code que tu fournis, SubStr contient la chaine qu'il faut passer en rouge. Cette chaine est recherchée dans les différents range.
    Te concernant c'est un peu différent, il te faut adapter le code pour qu'arrivé à cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myString.Characters(Start:=i, Length:=lensubstr).Font.ColorIndex = txtColor
    i pointe le début de ta chaine "Nouveau Nom" et que
    lenSubStr contienne le nombre de caractères entre le début de "Nouveau Nom" et le retour chariot.

    Tu auras besoin, en plus des fonction déjà utilisées dans la code (Mid, Len,..) de la fonction InStr

    Quelle est ta démarche, tu souhaites faire des essais toi même ?
    Quoi que tu fasses (chercher par toi même ou demander un code), fait un retour, je te proposerai une solution.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Un détail tout de même, le retour à la ligne est réalisé par un vbLf pas vbCrLF.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre averti
    Homme Profil pro
    Salarié
    Inscrit en
    Septembre 2020
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Salarié

    Informations forums :
    Inscription : Septembre 2020
    Messages : 62
    Par défaut
    Salut Qwazerty !

    Merci pour tes messages, oui je parlais bien d'un retour chariot et non retour à la ligne.
    Finalement j'ai contourné le problème en faisant autrement ^^

    Merci tout de même à toi !

    @+ et bon dimanche !

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Je te remercie pour ce retour.
    Je dépose tout de même ici le code que j'avais préparé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/11/2013, 20h29
  2. Replace d'une chaine de caractère par un retour chariot
    Par cyrilleEyes dans le forum Informix
    Réponses: 4
    Dernier message: 14/03/2008, 18h14
  3. supprimer Retour ligne ou retour chariot dans chaine caractères
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 4
    Dernier message: 31/01/2008, 08h57
  4. Récupérer un caractère sans le retour chariot
    Par thierryG dans le forum Débuter
    Réponses: 4
    Dernier message: 08/11/2007, 10h47
  5. remplacer un caractère par un retour chariot
    Par illight dans le forum Langage
    Réponses: 4
    Dernier message: 16/02/2007, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo