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