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 :

Réordonner des mots dans une phrase selon leur type


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Réordonner des mots dans une phrase selon leur type
    Bonjour à tous,

    Je cherche à réordonner des mots dans une phrase selon leur type en utilisant VBA dans Word 2007.

    Par exemple, si j'ai ça : [VERBE] travaille [VERBE] [NOM MASCULIN SINGULIER] l'élève [NOM MASCULIN SINGULIER], comment puis-je obtenir : [NOM MASCULIN SINGULIER] l'élève [NOM MASCULIN SINGULIER] [VERBE] travaille [VERBE] en utilisant VBA.

    Pourriez-vous m'aider avec ce problème, qui semble relativement simple, mais que je n'arrive pas à résoudre ?

    Il faudra sans doute tenir compte du nombre de mots que comprend chaque bloc. Aussi, ai-je déjà intégré dans ma base de données une formule qui compte le nombre de mots.

    Enfin, l'idéal serait d'avoir le code le plus court possible, sachant qu'il devra être intégré dans une macro déjà assez longue et que je dois réduire le temps de traitement au minimum pour des questions de performances.

    N'hésitez-pas à me poser des questions si mes explications ne sont pas assez claires.

    Merci pour votre aide et pour l'attention que vous porterez à ma requête,

    Paul

  2. #2
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Je ne vois pas beaucoup de solution car comment tu définis cette phrase
    [NOM MASCULIN SINGULIER] le français [NOM MASCULIN SINGULIER] [VERBE] travaille [VERBE] [NOM MASCULIN SINGULIER] l'élève [NOM MASCULIN SINGULIER]

    Effectivement, tu pourrais dire nom singulier puis verbe puis nom singulier mais c'est la structure que tu as là (le français travaille l'élève)!!!

    Comment peux-tu dire à ton mot le français qu'il se place après le verbe et encore on ne suppose avoir qu'un seul verbe dans la phrase.
    La seule solution est dans le cas où tu définis ton premier mot le français comme COD par exemple et encore la langue française est tellement complexe (comment travaillée avec la forme passive!!)

    Je ne vois pas trop l'aboutissement de la macro et surtout si la définition de tes termes te permet de réaliser une seule et unique phrase.
    Car dans ce cas, tu risques rapidement d'arriver à des incohérences.

    Je pense qu'avant de chercher une macro, il faudrait déjà bien définir tous les cas et faire un organigramme de l'ordre de tes mots selon leur type.
    Tu risques d'avoir à créer pas mal de nouveaux types.

    Si en revanche, tu veux toujours placer les noms communs avant le verbe et tu n'as que deux mots, tu peux alors travailler avec l'objet range et la fonction de recherche find.

    Pour ce qui est optimisation, on pourra par contre peut-être plus t'aider.
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  3. #3
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    Je suis d'accord avec Carden752 : la question que tu poses est trop sommaire pour correspondre à ton besoin réel.

    Ceci dit, si tu veux voir dans un cas simple le type de code à mettre en oeuvre, je te propose ce bout de code qui traite la phrase lue dans une variable de type String.
    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
    Sub subPBeecham()
     
    Const sPhraseAv     As String = "[VERBE] travaille [VERBE] [NOM MASCULIN SINGULIER] l'élève [NOM MASCULIN SINGULIER]"
    Const sBaliseNom    As String = "[NOM MASCULIN SINGULIER]"
    Const sBaliseVerbe  As String = "[VERBE]"
     
    Dim sNom        As String
    Dim sVerbe      As String
    Dim sPhraseAp   As String
    Dim i1          As Integer
    Dim i2          As Integer
     
    i1 = 1
    Do
        i1 = InStr(i1, sPhraseAv, sBaliseNom)
        If i1 = 0 Then Exit Do
        i2 = InStr(i1 + 1, sPhraseAv, sBaliseNom)
        If i2 = 0 Then Exit Do
        sNom = sNom & Mid$(sPhraseAv, i1, i2 + Len(sBaliseNom) - i1 + 1)
        i1 = i2 + 1
    Loop
     
    i1 = 1
    Do
        i1 = InStr(i1, sPhraseAv, sBaliseVerbe)
        If i1 = 0 Then Exit Do
        i2 = InStr(i1 + 1, sPhraseAv, sBaliseVerbe)
        If i2 = 0 Then Exit Do
        sNom = sNom & Mid$(sPhraseAv, i1, i2 + Len(sBaliseVerbe) - i1 + 1)
        i1 = i2 + 1
    Loop
     
    sPhraseAp = sNom & sVerbe
    MsgBox sPhraseAp
     
    End Sub
    Ici on regroupe tous les blocs balisés [NOM MASCULIN SINGULIER], puis tous les blocs balisés [VERBE].

    Il est bien évident que si le nombre de balises est important, on peut songer à réorganiser le code autour d'une liste, chaque élément de la liste correspondant à une balise, ce qui devrait éviter de multiplier les boucles Do ... Loop.

    Bien cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Une autre otpion serait de passer par du XML qui utilise des balises qui peuvent être traitées via un XSL.
    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 !

Discussions similaires

  1. [XL-2010] Couper/coller des mots d'une phrase dans une autre cellule
    Par oxxymore dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/01/2013, 14h02
  2. [XL-2007] Affiche un mot dans une cellule selon une phrase.
    Par Neptune64 dans le forum Excel
    Réponses: 3
    Dernier message: 28/09/2011, 23h02
  3. Comment extraire des mots dans une phrase (chaine de characteres)
    Par gilles06 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/07/2008, 18h54
  4. [RegEx] supprimer des mots dans une phrase
    Par anarchoi dans le forum Langage
    Réponses: 6
    Dernier message: 10/05/2007, 09h44
  5. Affichage des chiffres dans une phrases arabe
    Par omda dans le forum Oracle
    Réponses: 4
    Dernier message: 30/09/2005, 13h36

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