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,
Image 1.jpg

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
Ca fonctionne merci et apparemment ça enregistre bien sous xlsm. Merci beaucoup Soan, je devrais m'en sortir avec ce que tu as fait avec cette dernière macro. Plus que le problème de "femme", (façon de parler) qui ne se mets pas à la couleur couleur voulue, alors que pour "matern" ça fonctionne maintenant.
Je vais poster un autre pb sur le forum que je t'adresserai également si ru peux y faire quelque chose. A bientôt.
 

soan

XLDnaute Barbatruc
Inactif
@MANTE

Tu as écrit : « le problème de "femme" qui ne se met pas à la couleur voulue » ;
je viens de penser à quelque chose : si c'est avec " femme ", alors c'est peut-
être parce que les espaces ne sont pas des espaces "normaux" (code Ascii 32)
mais des espaces insécables (code Ascii 160) ; dans ce cas, sur ta feuille de
calcul "Feuil1", fais tout ce qui suit :

Sélectionne D2 ; fais Ctrl h ➯ fenêtre "Rechercher et remplacer" (note que c'est
déjà sur le 2ème onglet "Remplacer")
; dans la case « Rechercher : » : appuie sur
la touche Alt, maintiens-là enfoncée, tape 0160 sur le pavé numérique, relâche
la touche Alt ; ça met un espace insécable ; dans la case "Remplacer par :", met
"@" ; clique sur le bouton "Remplacer tout" ; sur mon Excel 2007 , j'ai l'message
"Fonction non valide" ; je suppose que c'est à cause du trop grand nombre de
données ; mais ça a quand même fait le job (ou tout au moins une partie) ; clic
sur le bouton OK du message d'erreur ; puis clic sur le bouton "Fermer" de la
fenêtre "Rechercher et remplacer".

Fais Ctrl Début ➯ ça retourne en D2 ; fais Ctrl f ➯ fenêtre "Rechercher et
remplacer", mais cette fois, c'est sur le 1er onglet "Rechercher" ; dans la case
"Remplacer par :", met "@" ; clic sur le bouton "Suivant" ; ça s'est arrêté sur
C10 (tu le vois plus facilement dans la zone "Nom" de la barre de formule,
côté gauche) ; et tu vois facilement, en C10, un "@" entre "l'homme" et
"1948" ; il était là, ton espace insécable ! (ce sera à toi de voir si tu veux
le remplacer par un espace normal ou par un espace insécable, mais plus
tard) ; continuons : clic sur bouton "Suivant" ; arrêt sur C19 ; là, il y avait
2 espaces insécables en fin de cellule ; Alt v (idem que clic sur "Suivant") ;
arrêt sur B39 ; il y a : "ONU@?" ; Alt v ; C45 ; il y a là 2 "@" ; Alt v ; C46 ;
7 "@" consécutifs en début de cellule ; etc... et en C62 : oh, comme c'est
amusant ! dans la cellule, il n'y a pas de caractère "@" ; alors pourquoi donc
ça s'est arrêté sur C62 ? regarde dans la barre de formule : ils sont bien là,
tes "@" ; il y en a même 7 ; mais dans la cellule, comme c'est en police
"Symbol", ça affiche 7 signes "
" ; accessoirement, tu peux aussi remarquer
cette autre curiosité : il y a plusieurs caractères grecs dans ta cellule ; et la
traduction est dans ta barre de formule ; si tu mets la la police "Calibri",
ça redevient "normal" ; en C64 aussi, tu peux utiliser ton interprète Calibri
grec / français. ;) décidément, on rencontre de tout dans ton fichier : des
problèmes de féminisme, des interprètes de l'ONU (NATO pour les ricains) ;
y'aura quoi d'autre, après, à part des atrocités sur la torture ? (hélas !)

Bon, je te souhaite quand même bonne chance pour tes jeux de coloriage ;
si tu veux, j'ai quelques albums de coloriage ; je les ai piqués à ma p'tite
sœur ; quand elle s'en est aperçu, elle a été très fâchée : elle a déposé une
plainte contre moi, au Préfet de Paris et à l'ONU. :confused::oops:o_O:rolleyes::p


Pour ton autre problème sur le forum, j'essayerai d'y répondre si c'est
dans mes compétences (je ne sais pas tout faire, loin de là ! ;)).

NB : j'ai employé le mot "ricains", mais c'est pas de façon péjorative : j'ai juste abrégé !
perso, j'aime bien les Américains pour avoir libéré la France, mais je ne les aime pas
pour avoir envahi le Vietnam, et plusieurs autres choses vraiment pas sympa ! (c'est
un très, très gros euphémisme !) ; et pour ceux qui sont partis au Vietnam, la plupart
y ont été obligés par leur pays ; d'autres n'ont pas eu d'autre choix que de déserter :
c'était ça ou être fusillé pour insubordination ! :(


soan
 

MANTE

XLDnaute Junior
  • Tu es vraiment une mine d’or. Je m’en occupe dans quelques heures car là je sors d’une intervention sous anesthésie locale et je vais me mettre sous antalgique.
  • Je prépare mon autre question avec PJ.
  • PS. Pour les ricains l’ONU c’est UN (United Nations), organisation internationale crée à la fin du 2° conflit mondial, à laquelle adhèrent la plupart des pays du monde, et NATO c’est l’OTAN (Organisation du Traité de l’Atlantique Nord qui ne regroupe que certains pays), mais ça reste dans l’esprit du maintien de la paix, peut-être un peu plus sécuritaire pour l’OTAN, … enfin, quand ça marche. Merci encore.
 

soan

XLDnaute Barbatruc
Inactif
Ah oui ! mdr !!! j'ai confondu OTAN et ONU !!! pourtant, je le savais !!! d'ailleurs, l'ONU,
au tout début, s'appelait la SDN : Société des Nations

Si je ne me trompe pas, c'était principalement les Allemands qui avaient réussi ce tour de
force de transformer la SDN en ONU ; et c'était sûrement la RFA (Allemagne de l'Ouest,
côté Occident) ; pas la RDA (Allemagne de l'Est, côté Soviétique).

Voici 3 articles qui, je pense, devraient beaucoup t'intéresser :


* De la SDN à l'ONU

* SDN - Registre de la Mémoire du Monde

* La Société des Nations

À tout hasard, petit complément sur l'OIT (une section de l'ONU) :

* Organisation Internationale du Travail

Je te souhaite une bonne lecture ! :)

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

Pour ta santé, je te souhaite bon courage, et un prompt rétablissement !!!
pour l'exo Excel, rien ne presse, alors ta santé prime avant tout ! ;)

Pour t'aider à mieux supporter ta convalescence, je t'offre ces 6 liens :

MusiK YL ; MusiK EO ; MusiK SH ; MusiK IK ; MusiK GD ; MusiK AK

Bon divertissement !

soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour Patrick, MANTE,
Image 1.jpg

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 pas brutalement augmenter, de façon
exponentielle, détruisant ainsi le formidable gain de temps initial ? si je me trompe
et que le temps d'exécution reste dans des proportions identiques, alors BRAVO !!!
et je n'aurai alors plus aucune réserve sur ta solution !!!

3) Ma macro utilise aussi la « méthode des tableaux » : Tbl = [D2].Resize(nbl, nbc)
ensuite, ça lit ce tableau qui est en mémoire RAM ; donc même s'il est très grand,
le temps est insignifiant ; c'est seulement quand il faut colorier des mots d'une
cellule qu'on est bien obligé de le faire sur une cellule de la feuille de calcul ;
alors je ne comprends pas pourquoi ma méthode est si lente par rapport à la
tienne ? (cela pour un nombre de mots identiques : 2)

4) Dans mon dernier fichier, il y a ces 3 listes :

LM1 = Array("liberté", "éducation")
LM2 = Array(" femme ", " fille ", " garçon ", " fémin ", " gross ", " allait ", " matern ")
LM3 = Array("genre", "sex")

LM1 : 2 mots ; LM2 : 7 mots ; LM3 : 2 mots ; soit 11 mots en tout ; à l'exécution :

Image 2.jpg


(dans mon post #15, c'était 5,04 mn)

5) Dans ta macro, il y a ces 2 lignes :
VB:
LM = Array("liberté", "éducation")
couleurs = Array(vbGreen, vbMagenta)
donc : il n'y a que 2 mots et 2 couleurs ; de plus, c'est "liberté" en vert et "éducation"
en magenta ; ta macro ne m'a pas l'air adaptée pour faire plusieurs mots en vert,
puis plusieurs mots en magenta ; si tu regardes ma macro, tu verras qu'il y a une
liste de mots pour chaque couleur, ce qui était demandé par MANTE.

6) Pour pouvoir réellement comparer le temps d'exécution de nos 2 méthodes,
peux-tu adapter ta macro de façon que ça traite les mêmes 3 listes ? (la 1ère
en vert ; la 2ème en rose ; la 3ème en rouge)


soan
 

patricktoulon

XLDnaute Barbatruc
Attend j'essaie de trouver encore une méthode plus rapide

combien de temps tu met pour trouver tout les cellules pour chaque array de mot ?
je met 0 seconde , 05 dixieme pour le plus grand array LM
VB:
'sub de test
Sub Start()
    Dim LM1, LM2, LM3, t0
    Dim plage As Range, NbL&, NbC&
    NbL = Cells(Rows.Count, 1).End(3).Row - 1
    NbC = Cells(1, Columns.Count).End(1).Column - 3
    Set plage = Range([D2], Cells(NbL, NbC))   'la grille a partir de D2 jusqu'en bas et a droite
    LM1 = Array("liberté", "éducation")
    LM2 = Array(" femme ", " fille ", " garçon ", " fémin ", " gross ", " allait ", " matern ")
    LM3 = Array("genre", "sex")
    couleur = Array(vbGreen, vbMagenta, vbCyan)
    q = Array(LM1, LM2, LM3)
    For i = 0 To UBound(q)
        t0 = Timer
        Set p = GetCelwithPartValue(plage, q(i))
        x = Format(Timer - t0, "#0.00")
        MsgBox "plage contenant """ & Join(q(i), " , ") & """" & vbCrLf & "trouvé en " & x & "sec" & vbCrLf & p.Address
    Next
End Sub

Function GetCelwithPartValue(plage, Arr)
    Dim i&, t, c, p As Range
    tableau = plage.Value
    For i = 0 To UBound(Arr)
        For t = 1 To UBound(tableau)
            For c = 1 To UBound(tableau, 2)
                If Not tableau(t, c) = "" Then
                    If InStr(1, CStr(tableau(t, c) & " "), Arr(i), vbTextCompare) > 0 Then
                        'Debug.Print plage.Cells(t, c).Address
                        If p Is Nothing Then Set p = Cells(t, c) Else Set p = Union(p, Cells(t, c))
                    End If
                End If
            Next
        Next
    Next
    Set GetCelwithPartValue = p
End Function
 

MANTE

XLDnaute Junior
  • Merci à Soan pour son attachement à ce pb et sa recherche de d’amélioration incessante, pour ses belles vidéo YT émouvantes (j’ai répondu sur l’une d’entre elles), pour sa bibliographie (je connaissais la SDN surtout pcq elle a été la 1° à éditer une déclaration des droits de l’enfant en 1924, suivie par l’ONU en 1959, puis par la Convention CIDE de 1989, ONU toujours, suivie de 2 protocoles facultatifs. Dans le même ordre d’idée : la Convention OUA des droits et bien-être de l’enfant de 1975-1990, de la la convention islamique des DE de 2005, et d’autres que je n’ai pas encore inventoriées, notamment, femmes, enfants, minorités dans le christianisme, et le judaïsme (les 3 religions du livre), …ces détails ici précisés expliquent la suite).

  • Merci à Patrick de suggérer également. Je ne suis pas spécialiste VBA, à peine exploitant si besoin, raison pour laquelle je m’adresse aux réseaux d’aides et ai la chance de tomber sur des pro. Dans le cas présent je suis bien incapable de suivre le débat entre Soan et Patrick pour la rapidité, mais je note tout à des fins d’utilisation ultérieure, et vous suis reconnaissant de vos contributions.

  • Pour éclairer un peu vos échanges, je suis retraité de l’éducation nationale, intervient parfois dans des pays en développement pour des bureaux d’études ou ONG (Alain MANTE, profil sur LINKEDIN pour curiosités sur mon parcours si besoin). En ce moment je fais une recherche sur les droits des femmes, enfants (donc petites filles), et minorités potentiellement exclues (composées de femmes et filles pour moitié, comme le reste de l’humanité), au travers des textes internationaux visibles avec liens dans mon tableau en ordre chronologique. La première partie de mon travail a consisté à les inventorier exhaustivement (et c’est loin d’être terminé) sur le net, convertir leurs formats PDF (small PDF) généralement ou copiés collés en WORD. Ca fait une quantité de plus de 2000 pages, dont pour la recherche des droits par mots clés, j’ai utilisé des macro, faciles sur WORD et sans passer par VBA. Longues à construire en raison du grand nombre de mots et que je dois régulièrement remettre à jour (exp ci après)
MacroG : genre sex femme fille garçon fémin gross allait matern enceinte enfa mère sœur fami cell huma homme être person individ vieil vieu commun soci

MacroInEx : intégr intègr Inser inclu éga inég équit parité discri exclu margin stéréo préjug préjud autonom émancip présen particip réussi

MacroEnsei : ensei édu scol éco coll lyc alpha profess primai élémentaire achèv second présco spéc super tech cyc appr instruct redoubl taux transition brut net admis public déficient menta dys pourcent stat exam classe établiss admis univ grand

MacroSanté : vie viv survi dévelop santé soin reprod VIH sida planif besoin réédu pauvr faim malad soi grand VIRUS COVID sani crise

MacroDroits : droit instit éta gouv cult relig tribun loi Art préamb dign libr liber responsab nom natio citoy parit éco civ expr inform circu priv propri plann minor fav devoir doit adopt éco rura inform prot mari stat sécu vio phys mor psy esclav respect légis harc porno prostit trait vuln handic abu agres exploit préco illic stup subst tort prison inhum hostil dégrad confl arm réfug migr déplac réput crim mutil géni respon plaid avoc plaint recou urb nombr trav domesti ménag cour raison

MacroODD : paix just eau sain parten environ durab objec oblig hygiè clima nourri mang repas laver assos hygiè environ clima faim pauvr santé éga équit

  • Ce me permet de cribler tous mes textes et autres rapports à l’aide de ces mots clés, et dans le cas présent d’en prélever les articles qui intéressent ces droits. Le pb se pose avec WORD où il devient impossible de ranger tout ces articles relatifs aux droits (80 environ en têtes de colonne de mon tableur et tous les textes officiels en tête de ligne, plus de 90), d’où mon recours à EXCEL dont ce n’est effectivement pas l’usage premier. Ce me permet ensuite de trier par droit, de relever rapidement où il apparait, d’en associer certains par texte officiel chronologique, … etc. Mais effectivement mon travail est en cours, les cases sont loin d’être toutes remplies.
  • Si je pouvais trouver le moyen de copier coller du texte WORD aux polices de mots déjà formatées (car tous mes textes WORD le sont déjà) dans des cellules EXCEL mon pb serait résolu, mais les formats de police ne se conservent pas de WORD à EXCEL. Si vous connaissez ce moyen, je suis preneur aussi.

  • Bien cordialement.
 

patricktoulon

XLDnaute Barbatruc
je pense que si ca doit être mis ajour régulièrement excel n'est pas la solution
beaucoup trop lourd comme travail
si de D2 a la derniere il n'y avait pas de lien dans les cellules
donc que du texte j'ai peut etre une solution plus rapide que j'utilise pour les gros travail sur texte dans cell
c'est un peu tordu mais ca fonctionne
il faut qu'a la base ça soit du texte non formaté et qu'il n'y ai pas de fusions de cellules
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Alain, Patrick,

Je suis content que tu aies apprécié mes vidéos émouvantes ! mais je n'ai pas vu ta
réponse ; sur quelle vidéo YouTube as-tu répondu ? je n'ai pas de compte YouTube,
donc je ne pourrai peut-être pas lire ta réponse.


Sur "MusiK EO", j'ai 2 anciennes réponses, pas de nouvelle ; pour tous les autres sujets
"MusiK" : « Réponses: 0 » ; comme il y a beaucoup de vues, je crois que les gens écoutent
la musique, mais s'ils ont aimé (ou non), ils ne reviennent pas pour le dire ! :confused: peut-être
qu'eux aussi ont répondu sur YouTube ? mais comment savoir ? faudrait que je lise les
commentaires de toutes les vidéos que j'ai proposées pour peut-être tomber dessus ?
et si les gens n'ont pas répondu avec le même pseudo qu'ils utilisent sur XLD, je ne
pourrai pas les reconnaître ! :(


Nombre de vues minimum : 71 ; c'est pour "MusiK DK" ; nombre de vues maximum :
196 ; c'est pour "MusiK EO" ; et bien sûr, le forum Excel est beaucoup plus fréquenté
que "Le salon de XLD" ! :p (il faut en tenir compte)


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

Patrick a écrit : « si ça doit être mis à jour régulièrement excel n'est pas la solution
beaucoup trop lourd comme travail »
; je le pense aussi, mais si ce n'est pas avec
Excel, l'autre solution que tu proposes serait avec quel logiciel ? peut-être un
logiciel spécial de recherche documentaire ? par exemple :


BCDI : Logiciel de recherche documentaire

Superdoc : Les logiciels de gestion documentaire

cnrs - Exploration des données

soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@patricktoulon

Je viens de voir le code VBA de ton post #21.

Il y a bien les 3 listes LM1, LM2, LM3, et je te remercie de les avoir ajoutées.

Il y a 3 messages "plage contenant ... trouvé en ... sec", et le temps est très
court puisque 0,01sec ; 0,05sec ; 0,01 sec ; mais c'est juste que ça trouve
les données, ça ne les met pas en gras et en couleur ; exemple :

Image.JPG


cellule D2 (avant et après exécution de ta macro) : à part le fond
qui est en vert clair, pour le texte : il n'y a ni gras, ni couleur.

(or pour ma macro, c'est ça qui prend du temps !)


soan
 

patricktoulon

XLDnaute Barbatruc
c'est juste pour te montrer la recherche de cells

et je viens de découvrir qu'a la base le fichier #15 (celui que j'ai pris comme base) était corrompu ou encore des problèmes de compatibilité 2013 et autres versions

sincèrement avec A1:Bl230 contenant pas plus de 300 cells pleines 1mo c'est bizarre et je me souviens que la première fois il m'avait réparer le xml du fichier
bref a mon avis ce fichier a des soucis
modifier 300 cellules ne devrait pas prendre + de 50 sec a 1 m30 si ca dure plus y a un blême c'est sur ;)

je vais essayer de le recharger et y mettre mon astuce
 

Discussions similaires

Réponses
2
Affichages
140

Statistiques des forums

Discussions
312 103
Messages
2 085 310
Membres
102 859
dernier inscrit
Diallokass