Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Macro de comptage

1 réponse
Avatar
danielos
Bonjour,

Dans un document word, j'ai un tableau et je souhaitais compter le=20
nombre d'occurrence de 2 mots =E0 l'int=E9rieur du tableau qui n'est qu'u=
ne=20
partie du document.

J'arrive bien =E0 s=E9lectionner le texte concern=E9 (tableau) avec 2 sig=
nets=20
mais par contre la boucle ne s'arr=EAte pas =E0 la fin de la s=E9lection =
et=20
continue jusqu'=E0 la fin du document.... Quand au second comptage, il le=
=20
passe directement et m'indique 0.
Je ne vois pas trop d'o=F9 vient le pb. Si l'un ou l'une d'entre vous=20
pouvait avoir la gentillesse de m'=E9clairer, je l'en remercie d'avance.

Sub Compte()

Dim X As Long, Y As Long
Dim Plage As Range
Dim Count As Integer, Count1 As Integer
Dim searchtext As String

'Selection du texte entre 2 signets
X =3D ActiveDocument.Bookmarks("Debutablo").Start
Y =3D ActiveDocument.Bookmarks("Fintablo").End
Set Plage =3D ActiveDocument.Range(Start:=3DX, End:=3DY)
MsgBox Plage.Text 'simplement pour voir le texte s=E9lectionn=E9

'Comptage
Count =3D 0
searchtext =3D "Titulaire"
With Plage.Find
Do While .Execute(FindText:=3Dsearchtext$, Format:=3DFalse,=20
MatchCase:=3DFalse, MatchWholeWord:=3DTrue) =3D True
Count =3D Count + 1
Loop
End With
MsgBox searchtext$ & " a =E9t=E9 trouv=E9 " & Count & " fois"
ActiveDocument.Bookmarks("Nb1").Range.Text =3D Count

Count1 =3D 0
searchtext =3D "Stagiaire"
With Plage.Find
Do While .Execute(FindText:=3Dsearchtext$, Format:=3DFalse,=20
MatchCase:=3DFalse, MatchWholeWord:=3DTrue) =3D True
Count1 =3D Count1 + 1
Loop
End With
MsgBox searchtext$ & " a =E9t=E9 trouv=E9 " & Count1 & " fois"
ActiveDocument.Bookmarks("Nb2").Range.Text =3D Count1

End Sub

Merci encore.
Daniel

1 réponse

Avatar
JièL
Hello,

Le 18/09/2015 15:28, danielos a écrit :
Bonjour,

Dans un document word, j'ai un tableau et je souhaitais compter le
nombre d'occurrence de 2 mots à l'intérieur du tableau qui n'est qu'une
partie du document.



Essaye ça
Sub Compte()

Dim Plage As String
Dim Compteur As Integer, Compteur1 As Integer
Dim searchtext As String
Dim Tableau() As String

Plage = LCase(ActiveDocument.Tables(1).Range.Text)

searchtext = LCase("Titulaire")
Tableau = Split(Plage, searchtext)
Compteur = UBound(Tableau())

Debug.Print searchtext & " a été trouvé " & Compteur & " fois"

searchtext = LCase("Stagiaire")
Tableau = Split(Plage, searchtext)
Compteur1 = UBound(Tableau())

Debug.Print searchtext & " a été trouvé " & Compteur1 & " fois"

End Sub

Le 1 de ActiveDocument.Tables(1) correspond au numéro d'ordre du tableau

LCase c'est pour tout transformer en minuscule des fois qu'ils ne soient
pas toujours écrit de la même manière

Et perso, je préfère les Debug.Print ça permet de rester dans la fenêtre
de code et de tout voir sans devoir cliquer sur OK à chaque boite de
dialogue

Merci encore.
Daniel



--
JièL