Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Bonjour,
Via la macro ci-dessous, je cherche à colorier en rouge tous les mots "toto" dans ma feuille active, cependant à chaque lancement de la macro j'ai une erreur "424 Objet requis" que je n'arrive pas à résoudre. Pourriez-vous m'aider s'il vous plaît?
L'erreur 424 souligne en jaune "With ActiveDocument.Content.Find"
VB:
Sub ColourChange()
Application.ScreenUpdating = False
Dim arrWords, i As Long
arrWords = Array("toto", "2nd string", "3rd string")
With ActiveDocument.Content.Find
.ClearFormatting
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = True
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
With .Replacement
.ClearFormatting
.Text = "^&"
.Font.Color = wdColorRed
End With
For i = 0 To UBound(arrWords)
.Text = arrWords(i)
.Execute Replace:=wdReplaceAll
Next
End With
Application.ScreenUpdating = True
End Sub
Normalement, on n'en est plus à utiliser "If InStr(c.Value, "toto") puisque j'ai posté une macro paramétrée
(voir le message#14 -> macro MakeMe_Red)
Macro qui permet justement d'indiquer le mot recherché...
Et je viens de tester avec des cellules fusionnées: pas d'erreur chez moi.
Histoire qu'on teste sur la même base 😉
Mode opératoire du test
1) Sur une feuille vide, tu lances la macro nommée Gribouille_Tribute
2) Tu regardes le résultat sur la feuille active
3) Tu lances ensuite la macro nommée Macro_Principale
Normalement les mots mis en paramètre dans la macro sont coloriés et mis en gras.
(en tout cas, c'est le résultat que j'obtiens sur mon PC)
VB:
Sub Gribouille_Tribute()
Dim i&, j&
For i = 1 To 10
For j = 1 To 5
Cells(i, j) = "Ainsi donc," & _
Choose(Application.RandBetween(1, 5), "toto", "titi", "tata", "tutu", "Staple") & _
" est dans: " & Cells(i, j).Address(0, 0)
Next j
Next i
ActiveSheet.UsedRange.Columns.AutoFit
End Sub
Sub Macro_Principale()
Application.ScreenUpdating = False
'ici on colorie en rouge (couleur par défaut dans la macro Colorier_Mot)
Colorier_Mot ActiveSheet.UsedRange, "toto"
'ici on colorie en vert
Colorier_Mot ActiveSheet.UsedRange, "titi", 14
'ici on colorie en violet
Colorier_Mot ActiveSheet.UsedRange, "Staple", 47
End Sub
Private Sub Colorier_Mot(Plage As Range, LeMot As String, Optional vCouleur As XlColorIndex = 3)
Dim c As Range
For Each c In Plage
If InStr(c.Value, LeMot) > 0 Then
With c.Characters(InStr(c.Value, LeMot), Len(LeMot)).Font
.ColorIndex = vCouleur: .Bold = True
End With
End If
Next c
End Sub
Histoire qu'on teste sur la même base 😉
Mode opératoire du test
1) Sur une feuille vide, tu lances la macro nommée Gribouille_Tribute
2) Tu regardes le résultat sur la feuille active
3) Tu lances ensuite la macro nommée Macro_Principale
Normalement les mots mis en paramètre dans la macro sont coloriés et mis en gras.
(en tout cas, c'est le résultat que j'obtiens sur mon PC)
VB:
Sub Gribouille_Tribute()
Dim i&, j&
For i = 1 To 10
For j = 1 To 5
Cells(i, j) = "Ainsi donc," & _
Choose(Application.RandBetween(1, 5), "toto", "titi", "tata", "tutu", "Staple") & _
" est dans: " & Cells(i, j).Address(0, 0)
Next j
Next i
ActiveSheet.UsedRange.Columns.AutoFit
End Sub
Sub Macro_Principale()
Application.ScreenUpdating = False
'ici on colorie en rouge (couleur par défaut dans la macro Colorier_Mot)
Colorier_Mot ActiveSheet.UsedRange, "toto"
'ici on colorie en vert
Colorier_Mot ActiveSheet.UsedRange, "titi", 14
'ici on colorie en violet
Colorier_Mot ActiveSheet.UsedRange, "Staple", 47
End Sub
Private Sub Colorier_Mot(Plage As Range, LeMot As String, Optional vCouleur As XlColorIndex = 3)
Dim c As Range
For Each c In Plage
If InStr(c.Value, LeMot) > 0 Then
With c.Characters(InStr(c.Value, LeMot), Len(LeMot)).Font
.ColorIndex = vCouleur: .Bold = True
End With
End If
Next c
End Sub
Staple1600, tu es le meilleur!!!
Cela fonctionne parfaitement chez moi!
juste un petit détail la macro "Gribouille_Tribute" a élargi mes cellules sinon tout fonctionne parfaitement bien.
Merci pour le temps consacré.
MU
En effet j'avoue 🙂 j'avais hâte de tout tester...
Cependant un dernier petit souci, quand deux mots sont identiques dans la même cellule il n'en colorie qu'un
Merci encore
MU
Private Sub Colorier_Mot2(Plage As Range, LeMot As String, Optional vCouleur As XlColorIndex = 3)
Dim c As Range, xMC As Object, xM As Object
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\b" & LeMot
For Each c In Plage
If .test(c.Value) Then
Set xMC = .Execute(c.Value)
For Each xM In xMC
With c.Characters(xM.FirstIndex + 1, xM.Length).Font
.ColorIndex = vCouleur: .Bold = True
End With
Next
End If
Next
End With
End Sub
Sub testZ()
Application.ScreenUpdating = False
Colorier_Mot2 ActiveSheet.UsedRange, "titi", 14
End Sub
Là aussi, cela fonctionne.
Le seul bémol qui me vient à l'esprit, c'est qu'il vaut mieux (et ce avec les deux dernières macros que je t'ai proposé) que la feuille ne contiennent pas trop de cellules à traiter
Le temps d'exécution risque d'être long ou il se peut même que la macro plante.
Donc pour être prudent, je dirai pour conclure: [Vincent Cassel Tribute]
Jusqu'ici, tout va bien...
Jusqu'ici, tout va bien...
Jusqu'ici, tout va bien...
Jusqu'ici, tout va bien...
Ces deux macros fonctionnent bien, mais... [/Vincent Cassel Tribute] 😉
Private Sub Colorier_Mot2(Plage As Range, LeMot As String, Optional vCouleur As XlColorIndex = 3)
Dim c As Range, xMC As Object, xM As Object
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\b" & LeMot
For Each c In Plage
If .test(c.Value) Then
Set xMC = .Execute(c.Value)
For Each xM In xMC
With c.Characters(xM.FirstIndex + 1, xM.Length).Font
.ColorIndex = vCouleur: .Bold = True
End With
Next
End If
Next
End With
End Sub
Sub testZ()
Application.ScreenUpdating = False
Colorier_Mot2 ActiveSheet.UsedRange, "titi", 14
End Sub
Là aussi, cela fonctionne.
Le seul bémol qui me vient à l'esprit, c'est qu'il vaut mieux (et ce avec les deux dernières macros que je t'ai proposé) que la feuille ne contiennent pas trop de cellules à traiter
Le temps d'exécution risque d'être long ou il se peut même que la macro plante.
Donc pour être prudent, je dirai pour conclure: [Vincent Cassel Tribute]
Jusqu'ici, tout va bien...
Jusqu'ici, tout va bien...
Jusqu'ici, tout va bien...
Jusqu'ici, tout va bien...
Ces deux macros fonctionnent bien, mais... [/Vincent Cassel Tribute] 😉
Je confirme la deuxième proposition fonctionne à merveille!!!
Jusqu'ici, tout va bien...
Jusqu'ici, tout va bien...
Jusqu'ici, tout va bien...
Jusqu'ici, tout va bien...
Merci infiniment Staple1600!!!! le meilleur
Bonne fin de dimanche.
MU
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD