OVH Cloud OVH Cloud

police

7 réponses
Avatar
rico34
Bonjour
Dim i As Integer
For i = 1 To ActiveDocument.Paragraphs.Count
If ActiveDocument.Paragraphs(1).Range.Font.Hidden = True Then
ActiveDocument.Paragraphs(1).Range.Delete
End If
Next i
End Sub

Ce bout de code doit supprimer tout texte correspondant à une police
masquée.
Apparemment, il ne trouve pas cette police masquée.
ActiveDocument.Paragraphs(1).Range.Font.Hidden = false

J'ai posé un espion mais je n'arrive pas à voir quelle est la variable
susceptible d'être modifiée.
Est ce qu'il y a un moyen de connaître quelles sont les variables qui sont
modifiées dans une boucle.
J'ai une boucle avec trois paragraphes. Les deux premiers en arial, le
troisième en arial masqué.

Merci pour les réponses.

7 réponses

Avatar
Circé
Bonjour,

Pourquoi ne pas utiliser le recherche-remplace ?... La macro n'est-elle
pas superfétatoire ?

Si la macro est nécessaire :

Sub suppr_cache()
ActiveDocument.ActiveWindow.View.ShowHiddenText = True
Selection.Find.ClearFormatting
With Selection.Find
.Font.Hidden = True
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True

End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Circé
http://faqword.free.fr

rico34 vient de nous annoncer :
Bonjour
Dim i As Integer
For i = 1 To ActiveDocument.Paragraphs.Count
If ActiveDocument.Paragraphs(1).Range.Font.Hidden = True Then
ActiveDocument.Paragraphs(1).Range.Delete
End If
Next i
End Sub

Ce bout de code doit supprimer tout texte correspondant à une police
masquée.
Apparemment, il ne trouve pas cette police masquée.
ActiveDocument.Paragraphs(1).Range.Font.Hidden = false

J'ai posé un espion mais je n'arrive pas à voir quelle est la
variable susceptible d'être modifiée.
Est ce qu'il y a un moyen de connaître quelles sont les variables qui
sont modifiées dans une boucle.
J'ai une boucle avec trois paragraphes. Les deux premiers en arial,
le troisième en arial masqué.

Merci pour les réponses.


Avatar
Anacoluthe
Bonjour !

'rico34' nous a écrit ...
Dim i As Integer
For i = 1 To ActiveDocument.Paragraphs.Count
If ActiveDocument.Paragraphs(1).Range.Font.Hidden = True Then
ActiveDocument.Paragraphs(1).Range.Delete
End If
Next i
End Sub


Si votre document fait 50 paragraphes vous bouclez 50 fois
sur le 1er paragraphe Paragraphs(1) !!!!!!!!!!!!!!!

Par ailleurs quand vous énumérez une collection en supprimant
des items de cette collection, vous risquez d'avoir de mauvais
résultats selon que la collection est re-comptée ou pas.
J'explique : si vous supprimez l'item N il y a 1 élément de moins
si bien que le N+1ème passe en item N et n'est plus concerné au
tour suivant N+1. Pour être certain d'éviter ce problème logique
énumérez votre collection à partir des derniers.

Ce qui devrait vous donner en reprenant votre syntaxe
(qui n'utilise pas For Each Next ni le RR de Circé pourtant
tous deux meilleurs ) :

Dim i As Integer
For i = ActiveDocument.Paragraphs.Count To 1 Step -1
If ActiveDocument.Paragraphs(i).Range.Font.Hidden = True Then
ActiveDocument.Paragraphs(i).Range.Delete
End If
Next i
End Sub

C'est mieux ?

Anacoluthe
« Il y a trois sortes de personnes : ceux qui savent compter
et ceux qui ne savent pas. »
- Benjamin DERECA

Avatar
Geo


Pourquoi ne pas utiliser le recherche-remplace ?...


Et ça évite de seposer des questions sur le fait que tout le
paragraphe, y compris la marque de fin de paragraphe, est masqué ou
pas.

--
A+

Avatar
Circé
Bonjour Geo,

Geo a pensé très fort :


Pourquoi ne pas utiliser le recherche-remplace ?...


Et ça évite de seposer des questions sur le fait que tout le
paragraphe, y compris la marque de fin de paragraphe, est masqué ou
pas.


Oui je pense que c'est effectivement moins risqué...

Circé


Avatar
rico34
"Anacoluthe" a écrit dans le message de news:
ur8P%
Bonjour !

'rico34' nous a écrit ...
Dim i As Integer
For i = 1 To ActiveDocument.Paragraphs.Count
If ActiveDocument.Paragraphs(1).Range.Font.Hidden = True Then
ActiveDocument.Paragraphs(1).Range.Delete
End If
Next i
End Sub


Si votre document fait 50 paragraphes vous bouclez 50 fois
sur le 1er paragraphe Paragraphs(1) !!!!!!!!!!!!!!!

Par ailleurs quand vous énumérez une collection en supprimant
des items de cette collection, vous risquez d'avoir de mauvais
résultats selon que la collection est re-comptée ou pas.
J'explique : si vous supprimez l'item N il y a 1 élément de moins
si bien que le N+1ème passe en item N et n'est plus concerné au
tour suivant N+1. Pour être certain d'éviter ce problème logique
énumérez votre collection à partir des derniers.

Ce qui devrait vous donner en reprenant votre syntaxe
(qui n'utilise pas For Each Next ni le RR de Circé pourtant
tous deux meilleurs ) :

Dim i As Integer
For i = ActiveDocument.Paragraphs.Count To 1 Step -1
If ActiveDocument.Paragraphs(i).Range.Font.Hidden = True Then
ActiveDocument.Paragraphs(i).Range.Delete
End If
Next i
End Sub

J'ai récupéré le bout de code pour supprimer des liens hypertexts que tu

m'avais passé.
J'ai surement modifié de façon incorrecte.
Je l'ai adapté à la suppression de tableau
Sub SupprimerTousTableaux()
'
Dim i As Integer
For i = 1 To ActiveDocument.Tables.Count
ActiveDocument.Tables(i).ConvertToText (wdSeparateByTabs)
Next i
End Sub

Je l'ai adapté à la suppression de police masquée. Le premier correspond au
résultat souhaité. Le deuxième non.

Merci en tout cas.


Avatar
rico34
"Circé" a écrit dans le message de news:

Bonjour,

Pourquoi ne pas utiliser le recherche-remplace ?... La macro n'est-elle
pas superfétatoire ?

Si la macro est nécessaire :

Sub suppr_cache()
ActiveDocument.ActiveWindow.View.ShowHiddenText = True
Selection.Find.ClearFormatting
With Selection.Find
.Font.Hidden = True
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True

End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub



Je n'arrive pas à supprimer les tableaux en police masquée avec cette macro.
Mais les paragraphes en police masquée sont supprimés.

Avatar
Anacoluthe
Bonjour !

'rico34' nous a écrit ...
J'ai récupéré le bout de code pour supprimer des liens hypertexts que tu
m'avais passé.


Précisément, relisez ma réponse précédente. Dans le cas des liens
hypertexte (LHT) , quand on a 100 LHT à supprimer on peut supprimer
100 fois le 1er LHT, car une fois le 1er supprimé c'est le deuxième
qui devient premier etc. Ce principe ne peut s'appliquer à toutes
les collections et surtout pas si vous ne supprimez pas TOUS les
items : si vous ne supprimez pas le 1er parce qu'il n'est pas masqué
par exemple, vous bouclez 100 fois sur le premier sans rien faire.
C'est simplement logique non ?

Anacoluthe
« Il y a trois sortes de personnes : ceux qui savent compter
et ceux qui ne savent pas. »
- Benjamin DERECA