|
Publicité ' | ||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : août 2006 Messages : 20 ![]() |
Bonjour à tous !
J'ai besoin de convertir des valeurs chiffrées dans des tableaux Word de l'anglais vers le français, ou au contraire du français vers l'anglais. C'est une manipulation assez simple à l'aide d'un simple chercher/remplacer. Pour passer du français à l'anglais, je remplace la virgule par un point et l'espace par une virgule : 1 123,56 > 1,234.56 Pour passer de l'anglais vers le français, je remplace la virgule par une espace et le point par une virgule : 1,234.56 > 1 123,56 Cette recherche s'effectue sur une sélection de cellules et lorsque Word demande si on doit étendre au reste du document, la réponse "Non" suffit à limiter cette recherche à la sélection... Tout ceci fonctionne admirablement bien manuellement et lorsque j'enregistre mes manips dans une macro... Le problème, c'est que quand je relance cette macro, le traitement s'opère, non pas seulement sur la sélection, mais sur tout le document... (tous mes espaces sont remplacés par des "virgules", les "virgules" par des "points"... Bref c'est la chianlit... J'ai cherché partout d'où cela peut bein provenir et je sèche lamentablement... Je travailles sous WinXP, et Office 2003... Voici un exemple de code : Code :
|
||
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Inscription : février 2007 Messages : 7 ![]() |
Je pense que tu devrai sélectionner une zone avant de lancer ta routine... quand tu ouvres ton classeur en automatique, aucune sélection n'est en cours donc par défaut la sélection est probablement l'ensemble de la feuille active non ?
Je suggère donc un Range(quelquechose).Select avant de lancer ta macro. Dites moi si j'me fourvoie... ^^ |
|
|
00
|
|
|
#3 | ||
![]() ![]() |
tu peu parcourir les tableaux de ton document WORD ... et ensuite les cellules de ces tableaux ...
Code :
__________________
page à bbil : dernières entrées : Débuter en VB6 Mes contributions en téléchargement Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI Impératif "A LIRE AVANT DE POSTER"
|
||
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : janvier 2007 Messages : 72 ![]() |
Salut,
dans ton code, remplace dans Code :
Selection.Find.Execute Replace:=wdReplaceAll @++
__________________
~Mortalino~ "Le mystérieux Chevalier : Provençal, le Gaulois" |
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : août 2006 Messages : 20 ![]() |
GRAND MERCI à toi BBil...
Ta réponse est géniale et j'ai réussi à régler grâce à toi la quasi majorité de mon problème... Cependant, il me reste quelques points à résoudre... Comme tu peux le voir dans le code ci-dessous, j'ai dupliqué ton bout de code pour en faire plusieurs macros que j'appelle successivement pour réaliser les tâches de rechercher / remplacer nécessaires à mon passage du français vers l'anglais et inversement pour les valeurs chiffrées de mes tableaux Word. C'est redoutable d'efficacité. Me reste le cas ou il ne s'agit pas d'une espace standard mais d'une espace insécable... J'ai tenté de mettre le code ^s (voir partie du code placée en commentaire) mais cela ne fonctionne pas. J'imagine que dans ton code cela doit être renseigné différemment. Comment coder l'insécable dans ta macro ? J'ai compensé ce problème en recherchant par avance tous les blancs de toute sortes (^w) mais dans ce cas évidemment le traitement s'effectue sur tout mon document avec les effets de bord que cela suppose... Cette solutions ne convient pas. Ta macro (géniale j'insiste pour moi qui débute en la matière) est parfaite pour un tableau constitué uniquement de chiffres, ce qui n'est pas le cas des documents que je doit traiter... Les têtières, certaines colonnes, contiennent souvent des textes et donc de la ponctuation (. , ...). Comment modifier ta macro pour qu'elle ne s'exécute que sur une sélection? (ce qui implique un lancement manuel de la dite-macro, j'en suis conscient)... Une dernière chose qui s'écarte un peu du sujet initial... Bien souvent, les tableaux que je traite sont des imports d'excel et les auteurs de ces tableaux utilisent les espace (sic) avant et/ou après les valeurs pour centrer ou aligner leur valeurs ce qui induit la présence de ces espaces dans Word une fois copiés/collés. Une solution simple dans Word consiste à centrer les valeurs puis à les aligner de nouveau à droite pour voir disparaitre les espaces avant et après les valeurs (mais pas les espaces présents au sein d'un chiffre formaté de la manière suivante par exemple 1 123,12). J'ai enregistré la manip via l'enregistreur de macro (le code généré est très simple) mais lorsque j'execute la macro l'effet désiré ne se produit pas (les espaces demeurent) alors que la même opération réalisée manuellement fonctionne... Une idée ? En tout cas, Merci beaucoup d'ores et déjà pour les renseignements que tu m'as donné... Voici mon code actuel : Code :
|
||
|
|
00
|
|
|
#6 | ||
![]() ![]() |
déjà tu n'as pa besoin de faire trois macros ... pour cela .. tu peu enchaîner tes 3 tâches à l'intérieur de la ta boucle...
du genre : Code :
dans cette boucle tb(0) ... contient la valeur de ta cellule tu peu commencer par tester celle-ci histoire de voir si tu dois la traduire où pas..? pour cela à toi de déterminer les conditions .. par exemple .. : s'il y as autre chose que des "chiffres" dans tb(0) je ne le traite pas.... pour ce qui est de l'espace insécable ...? j'ai pas bien compris de qu'el genre d'espace il sagissai...?
__________________
page à bbil : dernières entrées : Débuter en VB6 Mes contributions en téléchargement Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI Impératif "A LIRE AVANT DE POSTER"
|
||
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : août 2006 Messages : 20 ![]() |
Hello BBil,
en fait, la voie vers laquelle tu m'emmène m'intéresse au plus haut point... Cependant Mes faibles compétences en VBA (qui ne demandent qu'à évoluer) ne me permettent pas de parfaitement comprendre tout ce que tu me dit... Peux-tu m'exliquer comment, dans ta boucle, je fais le test en question ? Ton exemple est parfait, il faudrait effectivement qu'un test puisse détecter la présence unique de chiffres pour exécuter le travail, ça règle mon problème d'emblée... Si il y a du texte, et donc potentiellement des points et des virgules utilisés comme ponctuation, le traitement ne s'effectue pas. Si au contraire il y a seulement des chiffres, alors le travail s'effectue. Est-il possible que tu me commentes un peu ton code, la boucle et le test conditionnel... ? J'ai réussi à faire quelque chose de ressemblant en utilisant les caractères génériques dans mes recherches : [(0-9)],[(0-9)] pour ne remplacer QUE les virgules encadrées par des chiffres seulement par exemple... mais je ne sais pas comment intégrer les caractères génériques à ta macro... Pour répondre à ta question : Une espace insécable est un caractère typographique que l’on intercale entre deux mots (ou un mot et une ponctuation) qui ne doivent pas être séparés par un éventuel retour à la ligne automatique. L’espace insécable permet d’éviter qu’un mot ou une ponctuation soit rejeté et isolé en début de ligne lorsque cela nuirait à la fluidité de la lecture. PAr exemple, lorsque tu tapes du texte en français dans word, dès que tu insères les deux points ":", le point-virgule ";" ou le point d'interrogation "?", Word insère automatiquement une espace insécable pour que le signe de ponctuation soit toujours acclé au mot qui le précède... Sous word, dans les rechercher/remplacer cette espace est codifiée avec le symbole "^s"... J'ai essayé de l'intégrer au code mais VBA ne reconnait pas ce code dans ce contexte... Voila voila... J'espère ne pas trop t'ennuyer avec mes questions et j'espère que ce cas d'école sera utile au plus grand nombre... Il me tarde de te lire ... Merci encore . |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com