Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/03/2011, 16h04   #1
Invité de passage
 
Inscription : juillet 2007
Messages : 1
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 1
Points : 0
Points : 0
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
pbeecham est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 19h25   #2
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

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

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 592
Points : 1 592
Envoyer un message via MSN à carden752
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
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 20h59   #3
pgz
Expert Confirmé Sénior
 
Avatar de pgz
 
Homme Pierre GONZALEZ
Développeur Office VBA
Inscription : août 2005
Messages : 3 412
Détails du profil
Informations personnelles :
Nom : Homme Pierre GONZALEZ
Âge : 58
Localisation : France

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

Informations forums :
Inscription : août 2005
Messages : 3 412
Points : 5 934
Points : 5 934
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 :
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
pgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 10h50   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h02.


 
 
 
 
Partenaires

Hébergement Web