IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Problème de déplacement de texte bilingue [WD-2003]


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Problème de déplacement de texte bilingue
    Bonjour,

    Après une après-midi infructueuse sur un petit projet qui me tient à cœur, je lance cette bouteille à la mer.

    Mon problème est le suivant : pour perfectionner mon apprentissage de la langue grecque, je souhaite disposer de textes où alternent un paragraphe en grec suivi de sa traduction en français, et ainsi de suite ; je préfère cette disposition à un tableau sur 2 colonnes, trop serrées sur une tablette.

    Je dispose d'un fichier du texte grec, et d'un fichier de sa traduction française.

    J'ai collé le texte français à la suite du texte grec, pour n'en faire qu'un seul document, auquel j'ai voulu appliquer une macro Word 2003.
    J'ai gardé ouverts simultanément ce document gréco-français et un document vierge.
    Avec l'enregistreur de macro, j'ai transféré 1 par 1, et alternativement, les paragraphes grecs et français, en utilisant la fonction Rechercher / Format / Langue (j'ai aussi essayé Format / Police en différenciant la police du grec et celle du français) ; chaque fois qu'un nouveau paragraphe était trouvé, il était sélectionné, coupé, puis copié dans le document vierge...
    Cela a d'abord fonctionné sur un extrait de quelques paragraphes, mais non sur le texte entier : la macro se plantait soit pour sélectionner le paragraphe (sans doute parce que je n'entrais aucun mot dans la boite Rechercher), soit pour passer dans la fenêtre suivante ou revenir à la première.

    Voilà, n'étant pas du tout informaticien, j'aimerais savoir si quelqu'un peut m'aider à fabriquer le code de cette macro.

    Précision importante. Il faudrait si possible, 2 versions du code :
    - l'une où il fonctionnerait tout seul en boucle jusqu'à épuisement du texte
    - l'autre où il se contenterait de copier dans le fichier vierge les 2 premiers paragraphes gréco-français, et resterait ouvert sur ce fichier pour que je vérifie si le 2e paragraphe est bien la traduction du 1er (en effet, si à certains endroits le traducteur s'est permis de changer le nombre des paragraphes, tout sera vite décalé) ; dans cette 2e version, ce serait à moi de revenir manuellement dans la 1ère fenêtre, puis de relancer la macro pour le 2e couple de paragraphes - ce qui est quand même plus rapide qu'avec une série de copier-coller.

    PS, je serai absent sans Internet toute la semaine prochaine, donc le cas échéant ne pourrai répondre qu'à mon retour.

    Merci d'avance

  2. #2
    Membre éclairé Avatar de Souriane
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2009
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2009
    Messages : 541
    Points : 758
    Points
    758
    Par défaut
    Bonjour,

    Voici une piste de solution pour la 2e version que vous souhaitez avoir, celle ou la procédure s'arrête après avoir copier le paragraphe français et le paragraphe grec.

    Laisse-moi savoir si ça fonctionne pour toi et j'adapterai celui en boucle en conséquence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub RemplacerParTableau()
        Dim DocFrancais As Document
        Dim DocGrec As Document
        Dim DocFinal as Document
     
     
    'CHANGER LE CHEMIN D'ACCÈS ET LE NOM DES DOCUMENTS CI-DESSOUS :
       Set DocFrancais = Documents.Open(FileName:="C:\temp\FichierFrancais.docx")
       Set DocGrec = Documents.Open(FileName:="C:\temp\FichierGrec.docx")
       Set DocFinal = Documents.Open(FileName:="C:\temp\FichierFinal.docx")
     
    'Copie le paragraphe Français
        DocFrancais.Activate 'Active le fichier Français
        selection.MoveDown Unit:=wdParagraph, count:=1, Extend:=wdExtend
        selection.Copy
        selection.MoveRight Unit:=wdWord, count:=1
     
    'Colle dans le fichier final
        DocFinal.Activate 'Active le fichier Final
        selection.EndKey Unit:=wdLine
        selection.Paste
     
    'Copie le paragraphe Grec
        DocGrec.Activate 'Active le fichier Grec
        selection.MoveDown Unit:=wdParagraph, count:=1, Extend:=wdExtend
        selection.Copy
        selection.MoveRight Unit:=wdWord, count:=1
     
    'Colle dans le fichier final
        DocFinal.Activate 'Active le fichier Final
        selection.EndKey Unit:=wdLine
        selection.Paste
     
     
     End Sub
    Souriane
    __________________________________
    Une question bien posée est à moitié résolue!

    Merci de ne pas oublier de mettre RÉSOLU quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Merci et à bientôt
    Bonjour Souriane,

    Comme je l'avais précisé dans ma demande, j'ai été absent et sans Internet.
    Me voici de retour, et je veux avant tout te remercier d'avoir pris le temps de composer ce code.
    Je vais le tester - en effectuant les modifications que tu m'indiques pour le chemin des fichiers.
    Merci d'ailleurs d'avoir indiqué en commentaire chaque étape de la macro, car étant presque novice en la matière, j'apprends ce qui se passe en même temps.
    Donc à bientôt

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut 1er rapport
    1er essai infructueux, donc voici quelques questions pour Souriane :

    1) puis-je utiliser Word 2003 pour cette macro (je pose la question car les noms de fichiers fictifs que tu as placés dans le code sont au format docx, inconnu de Word 2003) ;

    2) dois-je créer le fichier final vierge (les 2 autres existent déjà) ;

    3) dois-je ouvrir les 2 (ou 3 - cf question précédente) fichiers concernés avant de lancer la macro, ou bien se charge-t-elle de les ouvrir d'après leur chemin d'accès ? Si elle les ouvre elle-même, cela signifie que je lance la macro à partir d'un document vierge à l'ouverture de Word ?

    4) voici comment j'ai récrit le nom et le chemin de mes fichiers ; est-ce correct ? (désolé, je ne sais pas inscrire ce bout de code dans un menu déroulant) :
    Sub RemplacerParTableau()
    Dim DocFrancais As Document
    Dim DocGrec As Document
    Dim DocFinal as Document

    Set DocFrancais =
    Documents.Open(FileName:="D:\Terre-fr.doc")
    Set DocGrec =
    Documents.Open(FileName:="D:\Terre-gr.doc")
    Set DocFinal =
    Documents.Open(FileName:="D:\Terre-fr-gr")

    Merci d'avance pour ces éclaircissements

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut 2e rapport
    2e essai concluant après modifications.

    J'ai modifié le code initial de Souriane, et obtenu une version I (version "pas à pas") qui fonctionne.
    1) suppression des lignes 16 et 27 (selection.MoveRight Unit:=wdWord, count:=1), qui décalaient chaque fois le curseur vers la droite, ce qui fait que les paragraphes copiés étaient tronqués du premier mot ;
    2) aux lignes 15 et 26 remplacement de "Copy" par "Cut", sinon la macro recopie toujours le même couple de paragraphes ;
    3) inversion des blocs "copie le paragraphe français" et "copie le paragraphe grec", car je souhaite lire la paragraphe grec avant sa traduction française.

    Donc voici la macro rectifiée (bien-sûr le nom et le chemin des fichiers est à modifier au gré de l'utilisateur) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Dim DocFrancais As Document
        Dim DocGrec As Document
        Dim DocFinal As Document
     
       Set DocFrancais = 
     
    Documents.Open(FileName:="D:\Terre-fr.doc")
       Set DocGrec = 
     
    Documents.Open(FileName:="D:\Terre-gr.doc")
       Set DocFinal = 
     
    Documents.Open(FileName:="D:\Terre-fr-gr.doc")
     
    'Coupe le paragraphe Grec
        DocGrec.Activate
        Selection.MoveDown Unit:=wdParagraph, Count:=1, 
     
    Extend:=wdExtend
        Selection.Cut
        Selection.MoveRight Unit:=wdWord, Count:=1
     
    'Colle dans le fichier final
        DocFinal.Activate
        Selection.EndKey Unit:=wdLine
        Selection.Paste
     
    'Coupe le paragraphe Français
        DocFrancais.Activate
        Selection.MoveDown Unit:=wdParagraph, Count:=1, 
     
    Extend:=wdExtend
        Selection.Cut
        Selection.MoveRight Unit:=wdWord, Count:=1
     
    'Colle dans le fichier final
        DocFinal.Activate
        Selection.EndKey Unit:=wdLine
        Selection.Paste
    Cela étant, Souriane (ou quelqu'un d'autre), je reste preneur d'une version II, ou la macro fonctionnera toute seule en boucle jusqu'à épuisement du texte.

    Merci de votre attention

  6. #6
    Membre éclairé Avatar de Souriane
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2009
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2009
    Messages : 541
    Points : 758
    Points
    758
    Par défaut
    Bonjour!

    Voici votre macro en loop :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Sub testlangue()
        Dim DocFrancais As Document
        Dim DocGrec As Document
        Dim DocFinal As Document
        Dim pAra As Paragraph
     
     Set DocFrancais = Documents.Open(FileName:="D:\Terre-fr.doc")
       Set DocGrec = Documents.Open(FileName:="D:\Terre-gr.doc")
       Set DocFinal = Documents.Open(FileName:="D:\Terre-fr-gr.doc")
     
     
    'Coupe le paragraphe Grec
        DocGrec.Activate
     
    'Pour chaque paragraphe contenu dans le document DocGrec, la macro va se répéter.
        For Each pAra In ActiveDocument.Paragraphs
        'selection.MoveDown Unit:=wdParagraph, count:=1, Extend:=wdExtend
        selection.Paragraphs(1).Range.Select
        selection.Cut
        selection.MoveRight Unit:=wdWord, count:=1
     
    'Colle dans le fichier final
        DocFinal.Activate
        selection.EndKey Unit:=wdLine
        selection.Paste
     
    'Coupe le paragraphe Français
        DocFrancais.Activate
        selection.Paragraphs(1).Range.Select
        selection.Cut
        selection.MoveRight Unit:=wdWord, count:=1
     
    'Colle dans le fichier final
        DocFinal.Activate
        selection.EndKey Unit:=wdLine
        selection.Paste
     
        DocGrec.Activate
     
    'Ceci est le code pour que la macro se répète :
        Next pAra
     
     
        End Sub
    Bonne chance!

    Souriane
    __________________________________
    Une question bien posée est à moitié résolue!

    Merci de ne pas oublier de mettre RÉSOLU quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Angélique
    Souriane,

    Vous êtes un ange, de répondre aussi vite.

    Je testerai demain cet enfant, en espérant que son "looping" ne partira pas en vrille.

    Par ailleurs, comme je l'avais signalé dans mon 1er message, cette version II suppose une traduction scrupuleuse, où le texte original et sa traduction contiennent bien le même nombre de paragraphes, sous peine de décalage.

    A très bientôt

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut 3e rapport
    Le "looping" de Souriane n'a pas loupé, merci encore.

    Je l'ai testé, pour aller plus vite, sur des fichiers fictifs, l'un rempli de "paragraphes" représentés par les chiffres 1 , 2 , 3, 4... l'autre de "paragraphes" représentés par a, b, c, d..., et j'ai bien obtenu un 3e fichier rempli des "paragraphes" 1,a,2,b,3,c,4,d...

    Je vérifierai quand même si des paragraphes normaux (remplis de texte) sont bien sélectionnés, et clorai alors la discussion.

    Question subsidiaire à Souriane : comment fait-on pour poser une question très simple, supposant une réponse ponctuelle, sans encombrer le forum de sujets superflus ? Peut-on (et comment) s'adresser directement à un membre qui nous a aidé, pour ce genre de questions ? Ou bien vaut-il mieux qu'elles soient posées à la fin d'une discussion, quitte à être un peu hors-sujet ?


  9. #9
    Membre éclairé Avatar de Souriane
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2009
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2009
    Messages : 541
    Points : 758
    Points
    758
    Par défaut
    Citation Envoyé par air_lent Voir le message
    Question subsidiaire à Souriane : comment fait-on pour poser une question très simple, supposant une réponse ponctuelle, sans encombrer le forum de sujets superflus ? Peut-on (et comment) s'adresser directement à un membre qui nous a aidé, pour ce genre de questions ? Ou bien vaut-il mieux qu'elles soient posées à la fin d'une discussion, quitte à être un peu hors-sujet ?

    Bonjour!

    Les questions n’encombrent pas le forum! Au contraire! Elles peuvent aussi être bénéfiques à d’autres utilisateurs dans des cas similaires.

    Si la question concerne toujours le problème en cours, vous le posez à la suite de votre première question, sinon, vous ouvrez un autre sujet. Il peut arriver que quelqu’un d’autre réponde à la question, même si une première personne avait débuté le « travail » avec vous alors mieux vaut le forum que d’aller en privé.

    Bye!

    Souriane
    __________________________________
    Une question bien posée est à moitié résolue!

    Merci de ne pas oublier de mettre RÉSOLU quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut 4e rapport... et rebond
    Voilà, le test grandeur nature (sur vrais textes) est fait : on obtient bien ce que je cherchais, 1er paragraphe en grec suivi de sa traduction en français, et ainsi de suite.

    Merci encore à Souriane...

    Je pense cependant qu'au moins deux autres variantes de cette macro seraient utiles, et qu'elles pourraient rentrer dans le cadre de cette discussion, puisqu'il s'agit toujours de mettre "face à face" deux langues. Mais si un membre confirmé préfère que j'ouvre un autre sujet, qu'il me le dise.

    Donc voici les nouvelles variantes, que j'appellerai III et IV :

    variante III : au lieu d'obtenir une alternance paragraphe grec / paragraphe français, créer un tableau sur deux colonnes, dont chaque cellule de gauche sera remplie par un paragraphe en grec, et chaque cellule de droite par le paragraphe correspondant en français. Il faudra que les cellules restent bien alignées, pour que le texte en grec et sa traduction restent toujours en face (cette précision est importante, car il arrive fréquemment qu'une traduction contienne un nombre de mots assez différent de l'original ; donc si on ne met pas les paragraphes dans des cellules, ils cesseront vite d'être alignés)

    variante IV : la même que III, mais en s'arrêtant après chaque couple de paragraphes pour vérifier si le traducteur n'a pas ajouté ou enlevé des paragraphes, ce qui décalerait la traduction par rapport au texte grec (voir mon 1er message).

    J'espère que cette nouvelle question est bien posée - donc à moitié résolue

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2013
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 21
    Points : 8
    Points
    8
    Par défaut Résolu
    Personne n'ayant répondu à ma dernière demande, je considère la question résolue pour ne pas laisser le sujet en suspens.

    Merci encore à Souriane


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2013] problème de déplacement d'un fichier texte
    Par Garrouch dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/03/2017, 12h44
  2. [MFC]Problèmes pour orienter du texte
    Par Deedier dans le forum MFC
    Réponses: 1
    Dernier message: 25/03/2005, 17h15
  3. Problème champs de type texte.
    Par Le-Cortex dans le forum Access
    Réponses: 7
    Dernier message: 06/01/2005, 15h42
  4. Problème de récupération de texte de formulaire
    Par bigourson dans le forum Langage
    Réponses: 4
    Dernier message: 15/09/2004, 17h27
  5. problème de passage de texte avec getvariable
    Par VincentB dans le forum Flash
    Réponses: 2
    Dernier message: 12/01/2004, 19h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo