Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 modifier format police mot seul dans plusieurs cellules EXCEL

MANTE

XLDnaute Junior
Bonjour, sur EXCEL 2019 (WINDOWS 10) je veux modifier le format de police de mots seulement dans plusieurs cellules chaque fois que celui-ci apparaît comme ça se fait facilement sur WORD. Par exemple mettre seulement le mot « liberté» en gras vert chaque fois qu’il apparaît dans une cellule d'une feuille EXCEL, (et non mettre le texte de la cellule tout entier en gras vert comme me le fait EXCEL).
J’ai fouillé dans les forums, trouvé cette macro que j’ai adaptée ci-dessous. Ça marche bien une fois, j’obtiens ce que je veux, tous mes « liberté » sont en gras vert, mais impossible d’enregistrer le fichier EXCEL sous xlsm prenant en charge les macros. J’ai un tas de refus. Dommage parce que cette macro me rends de gros services.
Je suis toujours aussi nul en VBA, alors si vous pouvez me modifier cette macro pour que je puisse enregistrer normalement sous xlsm …. Merci.



Sub libertéVert()

Dim Plage As Range, Cel As Range
Dim LeMot As String, AdrDeb As String

' --------------------------------------------
'A adapter en fonction du mot voulu Et de la Plage voulue
Set Plage = Sheets("Feuil1").Range("A1:Z2000")
LeMot = "liberté"
' --------------------------------------------

With Plage
Set Cel = .Find(LeMot, LookAt:=xlPart)
If Not Cel Is Nothing Then
AdrDeb = Cel.Address
Do
Modif Cel, LeMot
Set Cel = .FindNext(Cel)
Loop While Not Cel Is Nothing And AdrDeb <> Cel.Address
End If
End With
End Sub

Private Sub Modif(ByRef Cel As Range, LeMot)
Dim T As String
Dim Pos As Integer
T = Cel.Text
Do
'Respecte la casse Majuscule/Minuscule -------
‘Pos = InStr(Pos + 1, T, LeMot)
' Ne tient pas compte des Majuscule/Minuscule-
Pos = InStr(Pos + 1, T, LeMot, vbTextCompare)
' --------------------------------------------
If Pos > 0 Then
With Cel.Characters(Start:=Pos, Length:=Len(LeMot)).Font
.FontStyle = "Gras"
.ColorIndex = 4 'VERT
End With
End If
Loop Until Pos = 0
End Sub
 

Pièces jointes

  • TO INT Compilation Synthèse2009201838.xlsm
    907.2 KB · Affichages: 93
Solution
Bonjour Patrick, MANTE,

Franchement, c'est formidable !!!!!!! MAIS :

1) N'oublie pas que le fichier joint par MANTE n'est probablement pas son fichier réel ;
dans son fichier réel, il y sûrement beaucoup moins de cellules vides ; et même, si ça
se trouve, toutes les cellules sont « occupées » (ou ça arrivera dans un temps proche) ;
quel sera alors le temps d'exécution de ta macro ?

2) Si le fichier joint est le fichier réel, ou très similaire en taux d'occupation des cellules,
alors là oui, ta macro est vraiment très intéressante !!! mais à supposer que les cellules
seront toutes remplies (à plus ou moins long terme), que se passera-t-il ? est-ce que
le temps d'exécution de ta macro ne va...

MANTE

XLDnaute Junior
Merci, mais je ne reçois que des messages d'erreur dès que je veux enregistrer en xlsm, je suppose qu'il y a un bug dans le code. L'avez-vous exécuté ? Je n'ai fait que le copier coller en adaptant à mon mot dont je souhaite modifier le format de police.
Chez moi c'est l'exécution de la macro qui est longue pcq j'ai beaucoup de texte dans les cellules (mais je trouve ça beaucoup plus pratique que les tableaux word).
Je suis salement embêté pcq je ne connais presque rien de VBA, que j'ai besoin de cette macro, et que je vois que ça ne marche qu'à moitié seulement avec impossibilité d'enregistrer donc de continuer. Soyez sympa d'essayer de me trouver une solution. Merci.
 

soan

XLDnaute Barbatruc
Inactif
Bonjour MANTE, chris,

Tu as écrit :
« mais impossible d’enregistrer le fichier EXCEL sous xlsm prenant en charge les macros »
et : « je ne reçois que des messages d'erreur dès que je veux enregistrer en xlsm ».

Je ne comprends vraiment pas ces 2 phrases, car le fichier que tu as joint est pourtant
bien un fichier .xlsm ; c'est donc la preuve que tu as pu enregistrer ton fichier en tant
que "Classeur Excel (prenant en charge les macros)" ; serait-ce qu'un miracle se serait
produit ? si oui, va vite à l'église pour brûler un cierge en l'honneur de cet événement
extraordinaire, et prépare-toi à ce que ta jolie maison devienne un lieu de pèlerinage
aussi célèbre que celui de Lourdes.


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

chris a écrit : « Pas de problème d'enregistrement, mais un temps de traitement
important vu la taille de la plage et le contenu. »

Je confirme pareil : je peux enregistrer sans aucun problème, et le temps d'exécution
de la macro est vraiment très, très long ! (c'est normal, vu la taille de la plage à
traiter, et les nombreuses occurrences du mot "liberté" à colorer en vert)


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

Je te retourne ci-dessous ton fichier modifié, avec la macro optimisée.

* fais Ctrl e : ça lance la macro libertéVert() ; ça, c'est très facile à faire ; y'a aucun
problème de c'côté-là !

* maintenant, voici le plus dur à faire : tu vas devoir patienter un bon moment,
disons, montre en main, environ 2 bonnes grosses minutes ; tu crois que ça
ira quand même ? alors pendant ce long temps d'attente, je te propose de
regarder le joli texte affiché dans la barre de titre, juste à droite du nom de
fichier : "(Ne répond pas)" ; bon, en fait, t'inquiète pas : Excel n'est pas bloqué,
et continue bien gentiment à exécuter la macro, en arrière-plan ; si tu es trop
las d'attendre, profites-en pour aller boire un café et papoter un peu avec tes
collègues de bureau, mais essaie quand même de revenir avant que 2 longues
minutes ne se soient écoulées ; sinon, ton chef risque de râler après toi, et je ne
voudrais surtout pas que tu sois renvoyé à cause de moi ! ... comment ? c'est
toi le chef de la boîte ? ah, ben ok : tu pourras te virer toi-même si tu traînes
trop longtemps près de la machine à café
.

... environ 2 bonnes grosses minutes plus tard :



ah, ben oui, hein ? fallait bien ce temps-là pour traiter la plage D2:BL231 !

* détection automatique de la dernière ligne utilisée, selon la colonne A
* détection automatique de la dernière colonne utilisée, selon la ligne 1

(tu n'as donc pas besoin d'indiquer, dans le code VBA, quelle est la plage à traiter)

Les temps ne sont pas toujours les mêmes ; par exemple, j'ai eu 1,9 mn et 1,85 mn ;

mais bon, entre amis, on ne va pas chipoter pour quelques poignées de secondes
en plus ou en moins, n'est-ce pas ?

Et puis, je dois t'avouer quelque chose : j'ai seulement Windows 7 et Excel 2007 ;
alors que toi, tu as Windows 10 et Excel 2019 ; en plus, ma RAM est de seulement
8 Go, et j'ai un vieux processeur poussif Intel Core i5-3450 à 3.10 GHz.

Alors il se pourrait que ce soit un peu plus rapide sur ton PC ; quel dommage, tout de
même ! tu auras moins de temps pour flirter avec la belle et séduisante secrétaire de
l'étage ! faudra faire avec... (non, pas ces choses-là, hein ? censuré !)


soan
 

Pièces jointes

  • TO INT Compilation Synthèse2009201838.xlsm
    918.8 KB · Affichages: 13

MANTE

XLDnaute Junior
Un grand merci à vous tous de vos réponses, de vous être penchés sur mon problème (je vais en soumettre un autre relatifs aux graphiques sur carte), corrections, et aimables allusions aux miracles, au suggestions pour utiliser le temps d'enregistrement effectivement long.
Je finis par enregistrer mais au prix toujours de messages d'erreur, qui me disent que mon fichier est récupéré pcq endommagé, ou autres avatars .... Amicalement.
 

soan

XLDnaute Barbatruc
Inactif
@MANTE

Tu as écrit : « Je finis par enregistrer mais au prix toujours de messages d'erreur,
qui me disent que mon fichier est récupéré pcq endommagé, ou autres avatars .... »


Ces 3 liens t'aideront peut-être :

Réparation d'un classeur endommagé

Réparer un classeur endommagé

Réparer fichier excel endommagé

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

Si ça n'a pas marché :

Essaye : menu Fichier, Options Excel, Ressources ; à droite, clique sur le bouton
« Diagnostiquer » ; peut-être que ça va détecter des erreurs et les réparer ?

À tout hasard, au cas où c'est dû à un virus, fais une analyse complète de ton
PC avec ton antivirus ; attention : les antivirus bas de gamme et / ou gratuits
ne sont pas toujours suffisamment efficaces.

Si tu enregistres sur une clé USB, c'est peut-être ta clé USB qui est défectueuse ?
si c'est sur ton disque dur (SSD ou non) que tu enregistres, peut-être qu'il est
défectueux, et qu'il faut le changer ?

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

Je mets ci-dessous le code VBA du fichier de mon post #4 :
VB:
Option Explicit

Sub libertéVert()
  Dim Tbl, nbl&, nbc%, chn$, mot$, lng%, p%, k&, t0&, lig&, col%
  nbl = Cells(Rows.Count, 1).End(3).Row - 1
  nbc = Cells(1, Columns.Count).End(1).Column - 3
  Tbl = [D2].Resize(nbl, nbc): Application.ScreenUpdating = 0
  mot = "liberté": lng = Len(mot): t0 = Timer
  For lig = 1 To nbl
    For col = 1 To nbc
      chn = Tbl(lig, col): p = 1 - lng
      Do
        p = InStr(p + lng, chn, mot, 1): If p = 0 Then Exit Do
        With Cells(lig + 1, col + 3).Characters(p, lng).Font
          .Bold = -1: .ColorIndex = 4 'vert
        End With
        k = k + 1
      Loop
    Next col
  Next lig
  MsgBox "Temps : " & Round((Timer - t0) / 60, 2) _
    & " mn  ;  " & k & " mot(s) coloré(s)"
End Sub
soan
 

MANTE

XLDnaute Junior
Merci Soan, je viens de lancer mon antivirus (ESET) qui tourne encore. Pressé d'utiliser ta macro je l'ai adaptée avec "éducationGrasVert" en remplaçant le mot liberté et en l'appelant sub libertéGrasVert(). Je l'ai insérée dasn un module (peut-être ne fallait-il pas, ... à la suite de ta précédente aurait été préférable ?). Au bout 6 mn environ une fenêtre me dit que le temps est de5,84 mn pour 201 mots, ... sauf que, ça fait près de 25 mn que ça dure, que j'ai toujours le sablier et pas la main. C'est normal Docteur ?
 

MANTE

XLDnaute Junior
J'ai dit une bêtise, je n'avais pas cliqué sur OK. Effectivement les "éducations " apparaissent en vert sauf quelques uns toutefois, mais en gros ta macro fonctionne bien. Si je veux la renouveler avec plusieurs autres mots, qu'est ce que je fais ? je reproduis ta macro et l'adapte, et la colle chaque fois dans un nouveau module ? Autre ? Merci de to aide précieuse.!
 

soan

XLDnaute Barbatruc
Inactif
Bonjour MANTE,

Voici ton nouveau fichier.

Ctrl e ➯ ça met en vert tous les mots "liberté" et "éducation"



Comme c'est pour plus d'un mot, j'ai enlevé ce qui était pour
indiquer le nombre de mots colorés ; et quand tu verras cette
petite fenêtre de message, tu verras aussi la feuille (dessous).

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

Dans le code VBA, il y a : LM = Array("liberté", "éducation")

Si tu veux mettre en vert 4 autres mots, par exemple
"pêche", "pomme", "poire", et "abricot" :


LM = Array("pêche", "pomme", "poire", "abricot")

Tu peux ajouter autant de mots que tu veux, mais plus il y en a,
plus le temps d'exécution sera long ! environ 2 mn par mot ➯
avec 10 mots, ça doit faire dans les 20 mn ! maint'nant c'est ok :
t'as tout l'temps pour aller papoter avec ta jolie secrétaire !
(et plus si affinités... )


soan
 

Pièces jointes

  • TO INT Compilation Synthèse2009201838.xlsm
    919.6 KB · Affichages: 11

MANTE

XLDnaute Junior
Merci Soan,

Donc J’ouvre ton fichier l’enregistre sous un autre nom (avec date et heure pour ne pas me mélanger) sans pb (PJ)

Je copie ta macro dans VBA

Je modifie ta macro pour les mots : femme fille garçon fémin gross allait matern, en gras rose (mon fichier étant déjà plein de rouge, bleu, vert, …)

(Ce sont des mots clés pour moi ou leur racine. Tu as du comprendre que je faisais une recherche sur les droits des femmes, enfants et minorités au travers des textes internationaux pour une consultance de formation ultérieure)


Option Explicit



Dim Tbl, nbl&, nbc%, mot$



Private Sub Job()

Dim chn$, lng%, p%, lig&, col%

lng = Len(mot)

For lig = 1 To nbl

For col = 1 To nbc

chn = Tbl(lig, col): p = 1 - lng

Do

p = InStr(p + lng, chn, mot, 1): If p = 0 Then Exit Do

With Cells(lig + 1, col + 3).Characters(p, lng).Font

.Bold = -1: .ColorIndex = 26 'rose

End With

Loop

Next col

Next lig

End Sub



Sub EnGrasRose()

Dim LM, i As Byte, t0&

nbl = Cells(Rows.Count, 1).End(3).Row - 1

nbc = Cells(1, Columns.Count).End(1).Column - 3

Tbl = [D2].Resize(nbl, nbc): Application.ScreenUpdating = 0

'LM : Liste de Mots ; à adapter !!!

LM = Array(« femme », « fille », « garçon », « fémin », « gross », « allait », « matern »)

t0 = Timer

For i = 0 To UBound(LM)

mot = LM(i): If mot <> "" Then Job

Next i

Application.ScreenUpdating = -1

MsgBox "Temps : " & Round((Timer - t0) / 60, 2) & " mn"

End Sub

Je la colle dans VBA à la suite de la tienne (il ne fallait pas ? fallait-il la mettre dans un autre module ?)

Je colle cette liste dans la cellule D2 à titre de contrôle post exécution de macro
femme fille garçon fémin gross allait matern en normal noir

J’exécute


  • Fenêtre : Nom ambigu Private Sub Job(), je supprime « job » à tout hasard et re exécute > fenêtre temps affiché> OK
  • Contrôle en D2, j’ai : femme fille garçon fémin gross allait matern > pour femme et matern, il ne se passe rien et fille garçon fémin gross allait sont en vert tel que reproduit ici, alors que je les voulais en rose (code couleur 26)
  • Mais c'est tout ce qui se passe, ces mots n'apparaissent pas colorés et gras dans les autres cellules où ils existent
Qu’est ce que j’ai fait comme mauvaise manœuvre ? En fait pour ce travail (sans secrétaire hélas), je dois cribler tous ces textes internationaux avec une cinquantaine de mots clés, et répertorier les articles qui concernent les droits des femmes enfants et minorités dans un tableau. Je le fais facilement sur les textes bruts en WORD, mais faire le même tableau sur WORD est une galère. J’ai essayé de copier coller ces textes avec les mots en couleurs souhaités dans WORD mais je ne peux pas les coller avec ce format dans les cellules EXCEL (si c’est possible dis le moi car ça résoudrait mon pb, si non appliquer ta macro pour modifier les formats de police de plusieurs mots à la fois dans EXCEL, m'arrange bien, même si ça prend du temps !)

Merci de ton aide.
 

Pièces jointes

  • TO INT RetCorr2009221145 Compilation Synthèse.xlsm
    907.5 KB · Affichages: 4

soan

XLDnaute Barbatruc
Inactif
Re,



Voici ton fichier en retour.

Je te laisse lire le code VBA.

As-tu besoin d'une 3ème couleur ? tu ne peux pas utiliser toutes les couleurs de
l'arc-en-ciel, mais si t'utilises les 56 couleurs d'index, ce sera déjà pas mal !


soan
 

Pièces jointes

  • TO INT RetCorr2009221145 Compilation Synthèse.xlsm
    918.3 KB · Affichages: 4

MANTE

XLDnaute Junior
Merci Soan,

  • Pourquoi femme et matern restent-ils en noir non gras ? j’ai voulu vérifier si le changement prenait bien toute la table et à la dernière cellule BL231, j’ai collé la même liste de mots, re exécuté ta macro : même chose femme et matern restent en noir non gras. Pourtant ta ligne de code les mentionne bien :
LM2 = Array(" femme ", " fille ", " garçon ", " fémin ", " gross ", " allait ", " matern ")

  • Pour "liberté" et "éducation" en gras vert ça marche
  • Oui, je veux bien que tu me rajoutes une 3° couleur. « genre » et « sex » (racine de sexe, sexuel, sexiste, …) en gras rouge. Supposons que j’aie besoin d’en rajouter d’autres, suffit-il d’adapter et de rajouter ces lignes ?
'LM1 : liste de mots à mettre en vert

LM1 = Array("liberté", "éducation")

For i = 0 To UBound(LM1)

mot = LM1(i): Job 4 'vert

Next i

Merci, excuse moi d’insister lourdement mais tu me rends service là !
 

soan

XLDnaute Barbatruc
Inactif
Je suppose que les mots "femme" et "matern" qui restent en noir sont ceux
qui n'ont pas à la fois un espace à gauche et un espace après ; tu peux alors
mettre cette ligne de code à la place :

LM2 = Array("femme", " fille ", " garçon ", " fémin ", " gross ", " allait ", "matern")

Mais tu risques d'avoir d'autres « indésirables » ; c'est à toi de faire un choix entre
les deux ; je n'ai pas de solution à proposer pour que la sub devine si c'est mieux
de mettre en rose " femme " ou "femme" ; comme quoi, même en VBA, on trouve
des problèmes de féminisme.
oh, la la !!! j'ai comme une petite intuition
que les femmes ne vont pas apprécier ce que je viens d'écrire !!! (vous inquiétez
pas les filles, je blague, c'est tout ! )


Pour la 3ème couleur, patiente un moment : j'ai un autre exercice en cours
à terminer, puis je fais ta demande juste après.

soan
 

soan

XLDnaute Barbatruc
Inactif
C'est surtout la macro qui prends son temps, lollllll !

J'attendais qu'elle est fini pour mettre le résultat :



Pour le code VBA :

* j'ai ajouté LM3 dans la ligne Dim :

Dim LM1, LM2, LM3, i As Byte, t0&

* puis j'ai copié/collé :
VB:
  'LM2 : liste de mots à mettre en rose
  LM2 = Array(" femme ", " fille ", " garçon ", " fémin ", " gross ", " allait ", " matern ")
  For i = 0 To UBound(LM2)
    mot = LM2(i): Job 26 'rose
  Next i
* que j'ai adapté en :
VB:
  'LM3 : liste de mots à mettre en rouge
  LM3 = Array("genre", "sex")
  For i = 0 To UBound(LM3)
    mot = LM3(i): Job 3 'rouge
  Next i
donc oui, tu as bien compris le système.

(mais n'oublie pas de compléter la ligne Dim)

soan
 

Pièces jointes

  • TO INT RetCorr2009221145 Compilation Synthèse.xlsm
    918.5 KB · Affichages: 4

Discussions similaires

Réponses
2
Affichages
306
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…