Détection auto de textes pour les mettre en gras

Bonjour Forum,

A votre avis, y a-t-il un moyen pour qu’Excel cherche certains textes dans une feuille de calcul, et les passe automatiquement en gras (à l’intérieur de la cellule) au fur et à mesure de la saisie ?

Et si oui, comment (je suis un bidouilleur débutant en VBA).

Merci !

(voir exemple joint, ce sera plus clair).

24exemple.xls (15.50 Ko)

Bonjour,

Essaie avec ce code à placer en VBA dans un module et lui associer un bouton

Code erroné et supprimé du post.

Si ok, n'oublie pas de cloturer en cliquant sur le V vert

Amicalement

Edit Dan : Erreur dans le code précédent

Sub test()
'Macro Dan pour Gloub le 15/11/2010
Dim cel As Range
Dim i As Byte
Dim nb As Integer, pos As Integer
For Each cel In Range("C8:C15")
    For i = 2 To 4
        nb = Range("A" & i).Characters.Count
        pos = InStr(1, cel, Range("A" & i), 1)
        If pos <> 0 Then cel.Characters(pos, nb).Font.Bold = True
    Next
Next
End Sub

Amicalement

Slt,

Dan, s'il y a plusieurs fois le même mot dans une cellule ? Quel serait le code ??

merci

re,

Moins évident cela. je vais voir cela.

Vois tout de même mon précédent post que j'ai édité car le code comportait une erreur.

Amicalement

Bonjour,

J'ai pas trouvé plus simple....

Sub mettre_en_gras()
Dim Cel As Range, C As Range
Dim XX
Dim I As Byte, Nb As Byte, Y As Byte
With Sheets("Feuil1")
    For Each Cel In .Range("A2:A" & .[A65000].End(xlUp).Row)
        Set C = .Columns(3).Find(Cel, LookIn:=xlValues, LookAt:=xlPart)
            If Not C Is Nothing Then
                FirstAddress = C.Address
                Do
                    XX = Split(C, " ")
                        For I = LBound(XX) To UBound(XX)
                            If XX(I) = Cel Then Nb = Nb + 1
                        Next I
                        For I = 1 To Nb
                            Y = InStr(Y + 1, C, Cel)
                            C.Characters(Y, Len(Cel)).Font.Bold = True
                        Next I
                        Y = 0: Nb = 0
                    Set C = .Columns(3).FindNext(C)
                Loop While Not C Is Nothing And C.Address <> FirstAddress
            End If
    Next Cel
End With
End Sub

Mais bon, ça fonctionne....

Bonne journée

re,

Comme suite à mon précédent post, voici un proposition pour trouver tous les mots dans une seule cellule :

Sub test2()
'Macro Dan pour Gloub le 15/11/2010
Dim cel As Range
Dim i As Byte
Dim nb As Integer, pos As Integer
pos = 1
For Each cel In Range("C8:C15")
    For i = 2 To For i = 2 To Range("A65536").End(xlUp).Row
        nb = Range("A" & i).Characters.Count
        Do While pos <> 0
        pos = InStr(pos, cel, Range("A" & i), 1)
        If pos <> 0 Then cel.Characters(pos, nb).Font.Bold = True
        If pos = 0 Then pos = 1: Exit Do
        pos = pos + nb
        Loop
    Next
Next
End Sub

N'oublie la correction sur mon précédent post.

Amicalement

Merci à tous les 2 pour vos réponses.

La macro test() ne détecte en effet que la première occurrence de chaque mot dans une cellule.

Je n'arrive pas à faire fonctionner test2() : j'obtiens le message d'erreur suivant : "Erreur de compilation : erreur de syntaxe" et la ligne

For i = 2 To For i = 2 To Range("A65536").End(xlUp).Row

apparait en surbrillance dans le débogueur.

Cela dit, la macro proposée par cousinhub me va bien, donc ce n'est peut-être pas la peine de continuer à bidouiller test2()...

Pour ce qui est de la macro mettre_en_gras(), comme je l'ai dit elle me va bien, mais j'aimerais bien :

– qu'elle s'applique dès qu'une cellule est créée ou modifiée, sans avoir à exécuter une macro manuellement

– qu'elle ne s'applique que dans la colonne C par exemple

Comment faire ?

Merci encore pour votre aide à tous les 2 !

C'est juste un for i = 2 qui est en trop. Elle fonctionne parfaitement.

Merci Dan. Merci cousinhub

Sub test2()
'Macro Dan pour Gloub le 15/11/2010
Dim cel As Range
Dim i As Byte
Dim nb As Integer, pos As Integer
pos = 1
For Each cel In Range("C8:C15")
For i = 2 To Range("A65536").End(xlUp).Row
nb = Range("A" & i).Characters.Count
Do While pos <> 0
pos = InStr(pos, cel, Range("A" & i), 1)
If pos <> 0 Then cel.Characters(pos, nb).Font.Bold = True
If pos = 0 Then pos = 1: Exit Do
pos = pos + nb
Loop
Next
Next
End Sub

En effet, elle fonctionne maintenant.

Comment faire alors qu'elle s'exécute :

  • uniquement dans une plage de cellules donnée (disons une plage de cellule nommée, comme ça elle restera évolutive, car j'ajoute et je retire des lignes en permanence)
  • dès qu'une cellule est modifiée et non après l'exécution "manuelle" de la macro?

Merci encore !!!

re,

...une plage de cellule nommée...

Quelle plage ? donne les références colonne et ligne ou quel nom de plage ? ici c'est --> Range("C8:C15")

C'est vrai, j'aurais dû préciser.

Je joins donc un fichier où j'ai nommé :

  • une plage de cellules où se trouvent des valeurs recherchées (plage "à_vérifier")
  • une plage de cellules (plage "à_mettre_en_forme")où se trouvent des valeurs à mettre en caractères gras si elles figurent dans la plage "à_vérifier".

L'idée est que la mise en caractère gras s'effectue dès qu'une cellule est modifiée.

Mais je ne sais pas modifier le code pour le faire.

Merci par avance pour toute aide !

35exemple-2.zip (7.29 Ko)

Le fichier te convient ??

Merci beaucoup pour ta réponse.

Ça marche en effet comme je voulais…ou presque :

– la mise en forme automatique s’applique dans toute la colonne C. Je préfèrerais qu’elle s’applique seulement à une plage de cellules limitée et évolutive (d’où l’idée d’une plage de cellule nommée)

– quand je tape une des valeurs recherchées dans une cellule hors de la colonne C, toutes les mises en forme de la colonne C s’annulent !

Sinon, comme je suis très ignare en VBA, je ne comprends pas bien où sont spécifiées les valeurs à rechercher dans le code (mon souci est l’évolutivité de la liste sans avoir à toucher au code quand la liste se rallonge, c’est pour ça que j’avais pensé là aussi à une plage de cellules nommée).

Quand tu dis évolutive, tu souhaite définir manuellement chaque plage ?

La plage ou doit se faire la recherche ?

La plage de valeur à rechercher ?

Dans la macro pour le moment, les valeurs à rechercher sont :

valeurs colonnes A (la macro balaie automatiquement chaque cellule remplie de la colonne A)

Et la plage ou se fait la recherche :

Ca prend automatiquement la plage C8 jusqu'à la dernière cellule remplie ...

Tu veux pouvoir renommer manuellement ?

Merci pour ton aide et ta réactivité.

En fait, je souhaite que la zone où s'effectue la mise en forme automatique soit limitée à une trentaine de lignes environ à l'intérieur d'une feuille de calcul.

Comme j'ajoute et je retire des lignes en permanence, je veux éviter d'avoir à corriger le code pour qu'il corresponde à la nouvelle dimension de cette partie de la feuille.

Il me semble que si cette zone était une plage de cellules nommée, je n'aurais pas à changer le code après chaque ajout ou suppression de lignes.

Pour ce qui est de l'autre problème (la disparition de toute mise en forme quand on tape une des valeurs recherchées hors de la zone cible), je ne sais pas si ça changerait qqch...

Dans ce fichier, tu peux définir manuellement tes plages :

  • la plage1 sera la plage des valeurs à rechercher
  • la plage2 sera la plage de recherche

Si tu veux changer manuellement la plage, tu supprimes l'ancienne plage, et tu reselectionnes la nouvelle plage et tu la renommes. Si tu modifies la plage1, tu renommes en plage1 si c'est plage2 tu renommes en plage2.

Dans ce fichier, plage1 et plage2 sont définies automatiquement.

Elle se définissent automatiquement de la manière suivante :

pour la plage1 : ca choisit A2:AX (avec X derniere cellule non vide colonne A)

pour la plage1 : ca choisit C8:CX (avec X derniere cellule non vide colonne C)

En espérant que cette fois ci, ce soit la bonne..

re,

...Quand tu dis évolutive, tu souhaite définir manuellement chaque plage ?...

Le code "test" n'était pas bien placé dans ton fichier "exemple2". Là il devait être dans un module.

Vois le fichier joint corrigé avec une plage définie depuis C8 et qui s'adaptera si tu la fais évoluer vers le bas de la colonne C.

La mise en gras s'adaptera de suite.

Amicalement

17exemple-3.zip (7.85 Ko)

Je crois qu'il voulait quelque chose comme le fichier V3 de mon précédent post.

Merci à tous les 2.

@ketamacanna :

La V3 me va bien, mais je n'arrive pas à bidouiller le code pour que plage1 se situe, disons colonne E (à la lecture du code, mes maigres connaissances du VBA ne me permettent pas de comprendre où et comment est définie "plage1").

Rechercher des sujets similaires à "detection auto textes mettre gras"