XL 2016 erreur 424

MURET31

XLDnaute Nouveau
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
 

Staple1600

XLDnaute Barbatruc
Re

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.
 

Staple1600

XLDnaute Barbatruc
Re

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
 

MURET31

XLDnaute Nouveau
Re

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
 

Staple1600

XLDnaute Barbatruc
Re,

MURET31
Tu n'as pas été assez attentif en lisant mon message... :rolleyes:
J'avais écris
Mode opératoire du test
1) Sur une feuille vide, tu lances la macro nommée Gribouille_Tribute
Cette macro (Gribouille_Tribute) ne sert à rien d'autre que de créer des données pour faire le test ;)

Donc ce qui suit ci-dessous, heurte la sensibilité de mon œil gauche (et une larme, presque coule sur l’œil droit)
juste un petit détail la macro "Gribouille_Tribute" a élargi mes cellules sinon tout fonctionne parfaitement bien.
Pas de sinon, palsambleu!
Tout fonctionne bien puisque c'était fait pour et testé avant soumission sur le forum
;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Une autre façon de faire (avec RegEx)
VB:
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]
;)
 

MURET31

XLDnaute Nouveau
Re

Une autre façon de faire (avec RegEx)
VB:
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
 

Discussions similaires

Statistiques des forums

Discussions
311 729
Messages
2 081 974
Membres
101 854
dernier inscrit
micmag26