Trouvez le paragraphe d'un mot sous word

Trouvez le paragraphe d'un mot sous word - VB/VBA/VBS - Programmation

Marsh Posté le 22-07-2009 à 17:33:48    

Bonjour,
 
Je souhaite créer une maccro sous Excell qui m'ouve un Word, cherche un mot, et me dit a quel paragraphe il se trouve (si ce n'est pas possible, alors a quel page il est)
 
J'ai deja effectué la partie ouverture du word et recherche du mot, par contre je n'ai aucune piste pour trouver le numero de paragraphe associé ou la page correspondante.......
 
Si vous avez des idées, je suis plus que preneur.
 
Merci d'avance

Reply

Marsh Posté le 22-07-2009 à 17:33:48   

Reply

Marsh Posté le 22-07-2009 à 23:02:06    

Tu entends quoi par paragraphe ?
 
La plus part des gens appuis sur Entrée pour faire un retour chariot, or, dans Word c'est un saut de paragraphe...
 
Donc ca risque de faire beaucoup de paragraphe


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-07-2009 à 08:26:59    

Ah oui....... d'ailleurs je fais partie de ces gens la....
 
Sinon ce que j'entendais par paragraphe c'etait la valeur du dernier titre renseigné, par exemple:
 
1 Explication  
     1.1 Mise en relief
La mise en relief de mon exemple passe par ce corps de texte
 
Ici le paragraghe dont je parlais correspondrait a: 1.1
Je ne souhaite pas renvoyer le nom du paragraphe, mais juste son numero.
 
Sinon, comme je le disais, si ce n'est pas possible, je me contenterais de la page....

Reply

Marsh Posté le 23-07-2009 à 10:43:41    

Re
 
Pour avoir le numéro de page de la selection en cours :
MsgBox Selection.Information(wdActiveEndPageNumber)
 
Ensuite pour faire une recherche dans un doc Word, j'avais deja repondu a cette question ici, jettes y un oeil


Message édité par SuppotDeSaTante le 23-07-2009 à 10:44:01

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-07-2009 à 14:06:44    

Merci, j'arrive effectivement à avoir le numéro de page.
 
Si vous avez des idées pour le paragraphe, dites le moi ^^

Reply

Marsh Posté le 23-07-2009 à 14:22:20    

Bah vu la maniere dont tu ecris, c'est assez chaud, ca veut dire remonter caractere par caractere jusqu'a trouver qqchose qui ressemble a TON systeme de paragraphe... En l'occurence, 1.1 ou 1
 
Ce qui fait que si tu as ecrit "1" dans le corp du paragraphe, ca sera detecter comme le paragraphe en lui meme. Ou alors il faut tester sur un chiffre, puis sur la police, gras etc. Seulement si tu mets toujours la meme mise en forme pour tes titres de paragraphes.
 
 
Sinon, dans Word pour ecrire normalement :
 
Paragraphe 1:
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Shift + Entrée
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Shift + Entrée
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Entrée
Paragraphe 2:
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Etc.


Message édité par SuppotDeSaTante le 23-07-2009 à 14:26:19

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-07-2009 à 14:59:26    

Bonjour,
 
Voila le code
 

Code :
  1. Selection.ExtendMode = True
  2. Selection.HomeKey unit:=wdStory
  3. num_para = Selection.Paragraphs.Count
  4. Selection.ExtendMode = False


 

Reply

Marsh Posté le 23-07-2009 à 15:01:03    

J'ai oublié de préciser que tous les paragraphes dans les tableaux seront comptabilisés
 

Reply

Marsh Posté le 23-07-2009 à 15:03:33    

pyrof  :??:    
 
As tu bien lu la problématique ??? :heink:
 
Deja avec ta procédure, si on appuis 7 fois sur la touche entrée le num_para renverra 6...  :o


Message édité par SuppotDeSaTante le 23-07-2009 à 15:04:02

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-07-2009 à 15:49:19    

Quelque chose comme ca devrait le faire :

Code :
  1. Sub Nicosuisse()
  2. 'Saisir ton texte a chercher
  3. MonTexte = InputBox("Saisir le texte à chercher", "Recherche" )
  4. 'Cherche le texte et le selectionne
  5. With Selection.Find
  6.     .ClearFormatting
  7.     .Text = MonTexte
  8.     .Execute Forward:=True
  9. End With
  10. 'Recuper le numéro de VRAI paragraphe word
  11. NumParag = ActiveDocument.Range(Start:=1, End:=Selection.End).Paragraphs.Count
  12. 'Recupere le texte complet du paragraphe
  13. Parag = ActiveDocument.Paragraphs(NumParag).Range
  14. 'Regarde le premier caractere du paragraphe
  15. NParag = Left(Parag, 1)
  16. 'Tant que le premier caractere n'est pas numérique (gestion du TAB avec le Chr(9)) il remonte les paragraphes
  17. Do While IsNumeric(NParag) = False
  18.     NumParag = NumParag - 1
  19.     Parag = ActiveDocument.Paragraphs(NumParag).Range
  20.     NParag = Left(Parag, 1)
  21.     TabParag = Asc(Left(Parag, 1))
  22.     If TabParag = 9 Then NParag = Left(Right(Parag, Len(Parag) - 1), 1)
  23. Loop
  24. 'Une fois trouvé un numéro en debut de paragraphe précédent il le selectionne.
  25. ActiveDocument.Paragraphs(NumParag).Range.Select
  26. End Sub


 
 
Edit :
Avec un texte comme ca :

Citation :

1 toto   khllhk
1.1 bravo
 
Dslfjsdlvjndsmv tata dfcjnsdmlcvjnsdlmnk
Msdmsdkcmsd,lc
 
   
Msc,msdc,dmsl,
 
 1.2
 
Smdflvsdmnvlsdkn tata msdlfjcsdmljcdsmlj
 
 1.3
tata
 

et si je cherche tata, ca me revoit bien le numéro du paragraphe precedent, genre le 1er tata me selectionne "1.1 bravo", le second tata me selectionne "1.2" etc.


Message édité par SuppotDeSaTante le 23-07-2009 à 15:55:23

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 23-07-2009 à 15:49:19   

Reply

Marsh Posté le 23-07-2009 à 21:12:56    

Bonsoir,
 
Nicosuise demande comment récupérer le numéro du paragraphe qui contient le mot de recherche
 

Code :
  1. Merci, j'arrive effectivement à avoir le numéro de page.
  2. Si vous avez des idées pour le paragraphe, dites le moi ^^


 
une fois le mot trouvé, le code que Pyrof (Homepyrof = Pyrof à la maison) donne bien le nombre de paragraphe de ce mot au début du document, donc le numéro du paragraphe.
 
Voilà
 

Reply

Marsh Posté le 24-07-2009 à 01:50:08    

Hello
 
Donc, tu n'as pas lu.
 
Etant donné qu'un utilisateur lambda de Word, pour aller a la ligne appuis sur la touche Entrée, et que Entrée sour Word = 1 Paragraphe, il ne retrouvera jamais le numéro de paragraphe comme Nicosuisse le numérote.
 
Rappel :

Nicosuisse a écrit :

Ah oui....... d'ailleurs je fais partie de ces gens la....
 
Sinon ce que j'entendais par paragraphe c'etait la valeur du dernier titre renseigné, par exemple:
 
1 Explication  
     1.1 Mise en relief
La mise en relief de mon exemple passe par ce corps de texte
 
Ici le paragraghe dont je parlais correspondrait a: 1.1


 
Donc si je garde cet exemple et qu'il recherche "Exemple" ca devrait lui ressortir 1.1, chose que pyrof (homepyrof au travail je suppose ;) )avec son code ne ressort pas, puisque ce code "ne sert qu'à" compter le nombre de fois ou un utilisateur lambda appuis sur Entrée. (a partir du curseur je te l'accorde)
 
Parcontre, le code de dje69r (a la maison ou au travail) rempli cette fonction.
 
Je ne dénigrais pas ce que tu as fait, c'est juste que tu n'as pas lu la problématique et donc que ta/tes réponses ne serviront pas a grand chose pour Nicosuisse.
 
Cordialement


Message édité par SuppotDeSaTante le 24-07-2009 à 02:01:52

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 24-07-2009 à 08:07:08    

Bonjour,
 
Ok je n'avais tout vu,
maintenant comment sont générés les numéros  (1, 1.1)
 
1) saisis : ta macro fonctionne
2) automatiquement : (numération des styles) : ta macro ne devrait pas fonctionner. Dans ce cas  

Code :
  1. ActiveDocument.Range.ListFormat.ConvertNumbersToText


 
permet de transformer les numéros générés en vrai "texte"
 
 
 
 
 

Reply

Marsh Posté le 24-07-2009 à 09:27:24    

Bonjour a tous,
Déjà, merci pour vos réponses, après le soucis c'est que ce n'est pas moi qui rédige les documents dans lesquel ma macro devrait effectuer ces recherches.... Ce qui fait que je ne peux prédire le fait que quelqu'un commence par un chiffre, ce qui empeche ta macro de fonctionner correctement Dje.
Ensuite la plupart des douments utilisent une saisie automatique des titres. Au départ quand j'ai poser la question, je pensais que word, dans les informations de selection pouvaient dire a quel titre le texte correspondait comme corp de texte. (j'avais basé ma reflexion sur le fait que lorsque l'on fait du scrolling on voit apparaitre a coté du numero de page le titre en haut de page.....)....
 
Enfin bref, le numéro de page fonctionne aussi pas mal, donc je pense je vais resté la dessus.
 
Merci pour tout

Reply

Marsh Posté le 24-07-2009 à 09:31:41    

Bah si ca ne commence pas par un chiffre, c'est que ton exemple n'etait pas démonstratif. Je suis parti sur ton exemple.
 
Sinon, comme dit plus haut, et comme le suggere pyrof (au boulot donc, :p ) tu peux definir en amont en fonction du style si c'est un titre ou pas, (faut il encore que la personne se serve correctement de Word) et en fonction donner le paragraphe (Ou numéro d'occurence de ce style).


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 24-07-2009 à 10:00:22    

Et oui Pyrof au boulot  :sarcastic:  
 
Car mon travail depuis une vingtaine d'année est de faire des macros dans word  excel et d'autres logiciels
 
évidemment s'il n'y a pas une certaine rigueur dans les fichiers word, il sera bien difficile de faire du 100%
 
Une autre vision :
Si tes titres sont bien balisé, tu fais une table des matières
Tes mots tu les balises de façon à en faire un index
tout ça est possible dans word
 
Et après tu fais tu extrapoles la tables des matières et l'index
Y a du boulot .........
 
Bon courage

Reply

Marsh Posté le 24-07-2009 à 10:18:31    

pyrof a écrit :


Car mon travail depuis une vingtaine d'année est de faire des macros dans word  excel et d'autres logiciels

Ca n'aurait pas pu etre plus... Le bon vieux temps des macro excel 4....  :love:  
 

pyrof a écrit :

évidemment s'il n'y a pas une certaine rigueur dans les fichiers word, il sera bien difficile de faire du 100%

Comme souvent les gens utilisent word comme un bloc note ou on peut mettre du gras
 

pyrof a écrit :

Y a du boulot .........

+1
 
Sinon aussi je vois de plus en plus de personnes qui mettent des signets pour les titres. C'est pratique, table des matieres faite rapidement, et surtout atteindre le signet est un jeu d'enfant.
Mais dans tous les cas il faut que ton fichier soit un minimum rédiger correctement.
 
 
Sujet clos pour ma part.
 
Bonne journée les gars.


Message édité par SuppotDeSaTante le 24-07-2009 à 10:18:59

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 24-09-2009 à 11:37:10    

Bonjour a tous  
 
j ai le même problème a résoudre par contre chez moi voici mon texte  
 
 
1 toto   khllhk  
1.1 bravo  
 
Dslfjsdlvjndsmv tata dfcjnsdmlcvjnsdlmnk  
Msdmsdkcmsd,lc  
........
 
1.1.2 exe..
     
Msc,msdc,dmsl,  
 
 2 ...
 
Smdflvsdmnvlsdkn tata msdlfjcsdmljcdsmlj  
 
 2.1 ....  
tata  
 
....
 
2.3.1 ...
 
 
Je dois copier le paragraphe dans une autre page Word si le mot tata figure dans  le paragraphe.
 
 
merci

Reply

Marsh Posté le 24-09-2009 à 13:00:13    

Le code que j'ai donné plus haut devrait fonctionner, je ne vois pas ou se situe le probleme ?


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 24-09-2009 à 15:30:38    

mais chez moi ca ne marche pas  

Reply

Marsh Posté le 24-09-2009 à 19:53:31    

Bah normal, il faut l'adapter pour qu'elle te selectionne le paragraphe, puis te copier/colle ailleurs.
 
Mais normalement la procédure de recherche et de positionnement en debut de paragraphe devrait fonctionner.


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 25-09-2009 à 01:06:15    


 
je ne suis pas du tout un programmeur VBA c est juste  
 
j ai juste besoin d'une aide  
 
merci  
 
Chimson

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed