Vba Word 2013 - Supprimer paragraphes doublons dans un document [Résolu]

Hantar - 8 janv. 2016 à 20:11 - Dernière réponse :  Hantar
- 8 janv. 2016 à 23:27
Bonjour,

J'ai un document qui est constitué de plusieurs paragraphes dont certains se retrouvent plusieurs fois à l'identique. J'ai écris une macro pour les supprimer, mais elle ne fonctionne pas : il ne se passe rien...

Voici le code :

Fin = oDoc.BuiltInDocumentProperties(wdPropertyParas)

For i = 1 To Fin - 1
myPar = oDoc.Paragraphs(i).Range.Text
For p = i + 1 To Fin
myKey = oDoc.Paragraphs(p).Range.Text
If myPar = myKey Then
oDoc.Paragraphs(p).Range.Select
Selection.Delete
End If
Next p
Next i


Je reçois le message d'erreur suivant :

Erreur d'exécution '5941' :

Le membre requis de la collection n'existe pas.
Afficher la suite 

Votre réponse

7 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 8/01/2016 à 20:17
0
Utile
Bonjour,
Déjà (et bein que je n'utilise pas personnellement Word) :
Lorsque l'on détruit en boucle (quel que puisse être le langage de développement) , on commence par la fin pour remonter vers le haut (step -1). Si non, on se fait forcément des croche-pieds avec les indexes.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 8 janv. 2016 à 20:43
0
Utile
Bonjour Hantar
Si la première boucle est bien
For i = Fin - 1 To 2 Step -1 
la boucle intérieure ne doit surtout pas être
For p = Fin -2 To 1 step - 1 
mais
For p = i-1 To 1 step - 1

De plus si on trouve un doublon c'est celle référencé par l'indice i qu'il faut supprimer et sortir de la boucle intérieure par Exit For !
Si il y avait un triplé entre i , p et un troisième paragraphe c'est en comparant p et ce troisième au prochaine tour de boucle qu'il s'éliminerait d'où l'utilité du Exit For

Un bonjour amical à ucfoutu en lui souhaitant bonne année et bonne santé
Salut,

J4ai suivi tes indications, la macro tourne, mais le résultat n'est pas efficient : il reste toujours des doublons, des triplons, des quadriplons, etc... (!!)
Le document que je traite à des paragraphes qui se retrouvent parfois une dizaine ou une quinzaine de fois...

Voici le code si tu vois ce qui peut être amélioré :

[Code]Fin = oDocCible.BuiltInDocumentProperties(wdPropertyParas)

For i = Fin - 1 To 2 Step -1
myPar = oDocCible.Paragraphs(i).Range.Text
For p = i - 1 To 1 Step -1
myKey = oDocCible.Paragraphs(p).Range.Text
If myPar = myKey Then
oDocCible.Paragraphs(p).Range.Select
Selection.Delete
Fin = oDocCible.BuiltInDocumentProperties(wdPropertyParas)
End If
If p >= Fin Then Exit For
Next p
If i >= Fin Then Exit For
Next i/Code
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention > Hantar - 8 janv. 2016 à 23:03
Fin = oDocCible.BuiltInDocumentProperties(wdPropertyParas)

For i = Fin - 1 To 2 Step -1
myPar = oDocCible.Paragraphs(i).Range.Text
For p = i - 1 To 1 Step -1
myKey = oDocCible.Paragraphs(p).Range.Text
If myPar = myKey Then
oDocCible.Paragraphs(p).Range.Select
Selection.Delete
Exit For
End If
Next p
Next i
Hantar > vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 8 janv. 2016 à 23:14
Fonctionne parfaitement !
Merci beaucoup pour ton aide
vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention > Hantar - 8 janv. 2016 à 23:18
ok Hantar
Essaie de comprendre le code aussi
Mets le sujet en résolu et meilleurs voeux !
Hantar > vb95 1568 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 21 mai 2018 Dernière intervention - 8 janv. 2016 à 23:27
meilleurs voeux à toi aussi et pour le code c'est ok
Commenter la réponse de vb95

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.