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 :

Mise en surbrillance d'un mot dans une cellule selon une liste de mot [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut Mise en surbrillance d'un mot dans une cellule selon une liste de mot
    Bonjour.
    Je souhaiterai mettre automatiquement en surbrillance (en gras ou en couleur) un mot contenu dans une cellule à chaque fois que dans toute feuille on quitte la cellule (sur tout changement d'une valeur de cellule par exemple). Ce mot sera contenu dans une liste de mots stockés dans une colonne.
    J'ai essayé d'adapter le code suivant mais je n'y arrive pas:

    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
     
     
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
     
        Dim xHStr As String, xStrTmp As String
        Dim xHStrLen As Long, xCount As Long, I As Long
        Dim xCell As Range
        Dim xArr
        Dim xArr2
        On Error Resume Next
        xHStr = ' ici je dois mettre la référence à la liste de mot stockés dans une feuille, initialement le code appelait une boite de dialogue
     
        If TypeName(xHStr) <> "String" Then Exit Sub
        Application.ScreenUpdating = False
     
        xArr2 = Split(xHStr, ",") 'initialement décompose les mots entrés dans le boite de dialogue
        For j = 0 To UBound(xArr2)
            xHStr = xArr2(j)
     
            xHStrLen = Len(xHStr)
            For Each xCell In Selection
                xArr = Split(xCell.Value, xHStr)
                xCount = UBound(xArr)
                If xCount > 0 Then
                    xStrTmp = ""
                    For I = 0 To xCount - 1
                        xStrTmp = xStrTmp & xArr(I)
                        xCell.Characters(Len(xStrTmp) + 1, xHStrLen).Font.ColorIndex = 3
                        xStrTmp = xStrTmp & xHStr
                    Next
                End If
            Next
        Next
     
        Application.ScreenUpdating = True
    End Sub
    Merci pour votre aide

  2. #2
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour,

    tu as regardé du côte des mises en forme conditionnelles ?

    Nom : __Capture d’écran 2024-01-19 145525.png
Affichages : 70
Taille : 41,6 Ko

    Selectionne la plage de saisie, et crée une MEFC avec une formule du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI($E$1:$E$5;A1)<>0
    où $E$1:$E$5 est ton dictionnaire, A1 la première cellule de la zone de saisie.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    Bonjour

    Merci pour cette proposition mais en fait c'est bien mettre en surbrillance un mot dans une cellule et non pas toute la cellule . C'est pourquoi j'avais pensé à vba parce qu'avec la MFC je n'ai pas trouvé non plus.

    Nom : Capture d’écran (27).png
Affichages : 57
Taille : 169,0 Ko

    Merci d'avance

  4. #4
    Membre éprouvé
    Inscrit en
    Décembre 2002
    Messages
    803
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 803
    Points : 1 262
    Points
    1 262
    Par défaut
    Bonjour, voici ma solution, à mettre dans le module de la feuille.
    J'utilise la colonne A pour stocker les mots à colorer mais tu peux changer si tu veux.

    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
    48
    49
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Dim Cellule As Range
        Dim Liste As Range
        Dim Mot As String
        Dim Pos As Integer
        Dim Mots As Variant
        Dim motListe As Variant
        Dim i As Integer, j As Integer
     
        'Colonne contenant les mots à colorer, changer si besoin
        Set Liste = ThisWorkbook.Sheets("Feuil1").Range("A1", Range("A1").End(xlDown))
     
        'Boucle sur les cellules modifiées
        For Each Cellule In Target
            'Ignore les modifications dans la colonne A, changer si colonne Liste modifiée
            If Cellule.Column <> 1 Then
                'Divise le contenu de la cellule en mots
                Mots = Split(Cellule.Value, " ")
     
                'Boucle sur les mots de la cellule
                For i = 0 To UBound(Mots)
     
                    'Récupère le mot courant
                    Mot = Mots(i)
     
                    'Compare le mot courant avec les mots de la liste
                    For Each motListe In Liste
                        'Si le mot courant correspond à un mot de la liste
                        If Mot = motListe.Value Then
     
                            'Récupère la position du dernier caractère du mot
                            Pos = InStrRev(Cellule.Value, Mot)
     
                            'Si le mot est trouvé, colorie les caractères du mot
                            If Pos <> 0 Then
                                Cellule.Characters(Start:=Pos, Length:=Len(Mot)).Font.Color = RGB(255, 0, 0)
                            End If
     
                        End If
                    Next motListe
     
                Next i
     
            End If
     
        Next Cellule
     
    End Sub

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    C'est exactement cela. Grand merci !!!

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

Discussions similaires

  1. mise en italique de mots dans une liste
    Par Sylvain255 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 12/05/2022, 19h27
  2. mise en surbrillance d'un caractère dans une chaine
    Par tseai dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/03/2016, 11h57
  3. Mise en forme de l'affichage dans une liste
    Par nunurs83 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/05/2007, 20h47
  4. [MySQL] Mise en forme de la date dans une ligne
    Par Donald08 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 01/08/2006, 13h28
  5. Réponses: 1
    Dernier message: 24/04/2006, 16h16

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