|
Publicité ' | ||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 8 ![]() |
Bonjour,
J'ai un un gros document disposé en colonnes et je voudrais repérer les textes qui sont trop longs pour tenir dans une colonne (en affichant une boîte de dialogue ou en les surlignant en jaune). Est-ce que quelqu'un aurait une idée pour faire ça simplement ? Avec mes remerciements anticipés. |
|
|
00
|
|
|
#2 | ||
![]() ![]() JF JousseaumeInscription : octobre 2007 Messages : 2 390 ![]() |
Salut superfetatoire,
C'est possible de détecter les mots qui dépassent une certaine longueur dans Word. Mais le problème est-ce que c'est ce qu'il te faut ? Je ne peux pas dire sans plus d'infos. Comment tu estimes que tes mots sont trop longs uniquement sur le nombre de caractères ou avec les ajustements de texte (gras, police à chasse fixe/variable, kerning & son petit frère, tracking...). Deuxième question : est-ce que tes colonnes sont identiques entre elles et identiques sur tout le document ? Tous ces questions peuvent se résoudre mais cela peut complexifier/simplifier la macro si tu es dans ces cas évoqués. Pour une base très très bête (le nombre de caractères), voici le code Code :
|
||
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 8 ![]() |
Merci pour ta réponse.
Ma question n'était effectivement pas assez précise. Toutes mes colonnes sont identiques (entre elles et sur tout le document). Le document est en police proportionnelle (Verdana), donc on ne peut pas se baser sur la longueur du texte. Exemple : J'ai la liste suivante : texte texte ok texte long mottroplong Voici ce que ça donne une fois mis en colonne : texte texte ok texte long mottropl ong Je voudrais que la macro me détecte que "texte long" et "mottroplong" ne rentrent pas dans la colonne. J'ai pensé à me placer au début de chaque ligne et à tester le caractère de fin (qui devrait être une marque de paragraphe si c'est c'est bon), mais je ne sais pas trop faire ça. |
|
|
00
|
|
|
#4 | |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 338 ![]() |
Salut,
Sans vouloir être rabat joie Citation:
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
|
00
|
|
|
#5 | ||||
![]() ![]() JF JousseaumeInscription : octobre 2007 Messages : 2 390 ![]() |
Salut superfetatoire,
Citation:
Citation:
Voilà le code correspondant (Attention, il s'agit d'une macro assez longue car elle doit calculée le n° de ligne, ce qui est long dans Word) ==> vois si tu as besoin dans la restreindre à une section ou par blocs de 100 paragraphes, voire sur ta sélection courante en fonction de tes besoins. Mais le principe est le même. Comme tu n'avais pas précisé, j'ai mis les paragraphes en surligné jaune, tu adapteras en fonction de tes besoins Code :
texte ok texte long mottropl ong Je n'ai pas trouver le surligné dans l'éditeur de DVP.com et j'ai mis le rouge (car le jaune ne se voit pas) ![]() @+ |
||||
|
|
10
|
|
|
#6 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 8 ![]() |
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 8 ![]() |
Sepia,
Merci beaucoup pour cette solution qui fonctionne très bien ! Le problème, c'est que c'est effectivement très lent. J'ai fait un essai avec un document d'environ mille lignes et obtenu le résultat dans un délai acceptable. Par contre, avec mon fichier de 100.000 lignes, j'ai laissé tourner pendant quatre heures sans que la macro ne rende la main. Je vais relancer cette nuit pour voir. |
|
|
00
|
|
|
#8 |
![]() ![]() JF JousseaumeInscription : octobre 2007 Messages : 2 390 ![]() |
Salut superfetatoire,
Si tu as des documents de cette taille (100 000 lignes), c'est beaucoup trop lent, il va falloir absolument voir pour une optimisation de cette macro. Je pensais que tu aurais eu une taille "raisonnable" et c'est pour cela que je t'ai averti du temps de traitement. Dis-moi si cela te semble OK (avec la contrainte d'une limite raisonnable) ou si tu veux que l'on voit comment faire pour améliorer (quitte à devoir tout refaire car en termes de code, on aura du mal à vraiment gagner sans repenser autrement la macro @+ |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 8 ![]() |
Bonjour,
J'ai laissé tourner la macro pendant environ 16 heures sans récupérer la main. J'ai pensé à une solution : Pour chaque paragraphe du document Se positionner au début du paragraphe Se positionner en fin de ligne Si le caractère suivant n'est pas une marque de paragraphe Surligner le paragraphe en jaune FinSi FinPour mais je n'arrive pas à la mettre en oeuvre. |
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Olivier LebeauContrôleur d'industrie Inscription : février 2006 Messages : 17 338 ![]() |
Salut,
Le passage par une sélection ne sera pas bon en terme de vitesse. Pour gagner du temps, il faut travailler avec des ranges.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ? Débutez en VBA Mes articles Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus ! |
|
|
00
|
|
|
#11 | |
![]() ![]() JF JousseaumeInscription : octobre 2007 Messages : 2 390 ![]() |
Salut superfetatoire,
Citation:
Il faut revoir l'algo. Je viens d'utiliser "wdVerticalPositionRelativeToPage" au lieu de "wdFirstCharacterLineNumber" comme propriétés. C'est mieux mais on reste dans le même ordre de temps. A titre de tests, j'ai pris ton exemple et j'ai fait un paragraphe de 3 cm avec une police "Verdana" de 20 points, et j'ai fait plein de copier-coller ==> 10 pages, 125 paragraphs et 63 détections en tout. Le 1er algo (avec wdFirstCharacterLineNumber) prend sur mon vieux Mac 23 sec. et le 2nd (avec wdVerticalPositionRelativeToPage) prend 21 sec. Je cherche. @+ |
|
|
|
00
|
|
|
#12 | ||
![]() ![]() JF JousseaumeInscription : octobre 2007 Messages : 2 390 ![]() |
Salut superfetatoire
L'utilisation du mode Normal de Word et d'un Application.ScreenUpdating = False fait passer de 21 sec à 13, on avance mais c'est quand même long. Voici le nouvel algo (attention, il faut passer en mode Normal) Code :
|
||
|
|
10
|
|
|
#13 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 8 ![]() |
Bonjour,
Merci de plancher sur mon problème ! Je vais laisser tourner cette nuit avec cette nouvelle version pour voir. @+ |
|
|
00
|
|
|
#14 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 8 ![]() |
Bonjour,
J'ai laissé tourner la macro pendant 9 heures et environ 15-20% du document a été traité. @+ |
|
|
00
|
|
|
#15 |
![]() ![]() JF JousseaumeInscription : octobre 2007 Messages : 2 390 ![]() |
Salut superfetatoire,
alors cette macro, elle finit par passer Noël ? @+ |
|
|
00
|
|
|
#16 |
|
Invité de passage
![]() Inscription : décembre 2011 Messages : 8 ![]() |
Bonjour,
En lançant sur plusieurs nuits, j'ai pu traiter tout mon fichier (en ajoutant des "marqueurs" toutes les 1000 lignes pour repérer la partie déjà traitée, et en supprimant celle-ci avant un nouveau lancement de la macro). Merci beaucoup pour tes recherches et la solution proposée. Bonne année 2012 ! @+ |
|
|
00
|
|
|
#17 |
![]() ![]() JF JousseaumeInscription : octobre 2007 Messages : 2 390 ![]() |
Salut superfetatoire,
Bonne année aussi. J'ai essayé d'autres méthodes mais je n'ai pas eu mieux en temps de réponse. J'ai regardé à utiliser des bibliothèques Java de manipulation de fichier Office (POI en l'occurrence) mais les fonctions ne sont disponibles pour manipuler ce type d'éléments avec Word 2003. Cela signifie que la solution est bonne mais à limiter à des fichiers de taille raisonnable ou que l'on soit patient ![]() @+ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com