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 02/02/2011, 09h21   #1
Invité de passage
 
Thomas
Inscription : février 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Thomas

Informations forums :
Inscription : février 2011
Messages : 5
Points : 1
Points : 1
Par défaut recherche de mots entre crochets

Bonjour à tous,

je suis occupé à créer un code dans Visual Studio (sur lequel je débute depuis 1 semaine) afin de vérifier des références biblio citées au sein d'un texte word2003.
J'ai plus ou moins créé un code qui devrait fonctionner mais je n'arrive pas à savoir comment stocker la référence contenue entre [...], à savoir l'auteur et la date : [auteur, date]. J'arrive à faire identifier le premier [ mais pas celui de la fin...or les longueurs des références varient fortement...

Quelqu'un aurait-il un idée de comment stocker ces références entre crochets??

Merci d'avance!!
moht66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 14h34   #2
Membre habitué
 
Avatar de Ju1.0
 
Homme Julien
Automaticien / Technicien d'étude nucléaire
Inscription : novembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 27
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Automaticien / Technicien d'étude nucléaire
Secteur : Industrie

Informations forums :
Inscription : novembre 2010
Messages : 115
Points : 146
Points : 146
De quelle manière recherche tu ton premier crochet ?
Tu n'aurais pas un bout de code à nous montrer ?
Je pense que dans une variable de type string j'enregistrerai caractère par caractère chaque caractère suivant ton premier crochet jusqu'à tomber sur le 2ème crochet, mais peut-être que il y a mieux, ou plus adapté à ton code.
Ju1.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 16h23   #3
Invité de passage
 
Thomas
Inscription : février 2011
Messages : 5
Détails du profil
Informations personnelles :
Nom : Thomas

Informations forums :
Inscription : février 2011
Messages : 5
Points : 1
Points : 1
Salut Ju.1

C'est justement ce crochet qui m'embête...J'ai testé plus ou moins deux codes mais il y a des foirages aux deux:

1er:

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
 Dim reference() As String
    Dim n As Integer
    Dim i As Integer
    Dim mot() As String
 
'ouverture du fichier word
        FileOpen(1, chaplivre.Text, OpenMode.Input)
 
        Do While Not EOF(1)
            i = i + 1
            ReDim Preserve mot(0 To i)
            Input(1, mot(i))
 
            MsgBox(mot(i))  'il lit les mots dans une autre language si issu de .word, et par paquet si issu de .txt
 
            If mot(i) = "[" Then
                MsgBox("ok")           'c'est ici qu'il y a un stuut!
                reference(i) = reference(i) + mot(i)  'début d'enregistrement des references
                MsgBox(reference(i))
 
                If mot(i) = "]" Then reference(i) = reference(i)
 
            End If
 
        Loop
-->dans ce cas le fichier word est lu sous un autre langage, si je le met en .txt, il lit par "paquets" de mots... Et en plus j'ai un stuut dans ma boucle car quand je n'obtiens rien dans mon fichier de sortie.




J'ai commencé aussi avec :
Code :
1
2
3
    Dim DocWord As Microsoft.Office.Interop.Word.Document
  DocWord = GetObject(chaplivre.Text)
        DocWord.Activate()
-->le souci est que je ne vois pas du tout, mais alors pas du tout, comment continuer (lire le fichier, enregistrer les mots et identifier le crochet) avec cette deuxième solution possible (qui sait lire les .word logiquement)...
moht66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 16h44   #4
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,

Personnellement, j'aurais recherché le premier crochet [ avec la fonction de recherche de Word Find.
Ensuite, j'enregistre le myrange(i).start
Je recherche le deuxième crochet ]
Ensuite, j'enregistre le myrange(i).end
J'incrémente mon i
Et je fais cela en bouclant jusqu'à la fin du document en cherchant le crochet suivant [.
(Il y a autant de crochet ouvrant que fermant?)

Normalement myrange(i) contiendrait tes bouts de texte.
__________________
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 03/02/2011, 00h20   #5
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 377
Points : 3 377
Bonjour,

Ben personnellement, j'aurais demandé à Word de faire le boulot pour moi. L'algo est le suivant
Tu recherches tout ce qui est entre un "[" et "]" dans un document Word, ben ça devrait être ma référence (si tu veux plus d'explications sur les recherches dans Word, clique ici). Après tu la stockes dans une variable ou ailleurs dans un autre document, peu importe, ce qui compte après c'est de recommencer en partant de la position où tu étais auparavant.
Voilà le code en VBA

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
 
   '// Variable de stockage des références. Évidemment pour une application professionnelle, il faut disposer de la taille nécessaire au stockage des variables, sinon ça va finir par planer Word sévère, mais ce n'est pas le sujet
   mesReferencesBibliographiques = ""
 
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "[[]*[]]"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    While Selection.Find.Found
        mesReferencesBibliographiques = mesReferencesBibliographiques
        '// Il n'y a pas besoin de séparateur de texte puisque le texte sélectionné commence par un "[" et finit par "]"
        Selection.MoveRight Unit:=wdCharacter, Count:=1
 
        Selection.Find.Execute
    Wend
@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 09h52   #6
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 219
Points : 29 219
Salut,

Un petit mot en plus, la méthode find de l'objet selection est de loin plus puissante que les autres méthodes que l'on pourrait utiliser y compris une boucle sur le contenu.
__________________
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
Vieux 03/02/2011, 13h34   #7
Membre habitué
 
Avatar de Ju1.0
 
Homme Julien
Automaticien / Technicien d'étude nucléaire
Inscription : novembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 27
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Automaticien / Technicien d'étude nucléaire
Secteur : Industrie

Informations forums :
Inscription : novembre 2010
Messages : 115
Points : 146
Points : 146
Je me sens tout bête d'avoir proposer une boucle à la *$% alors que il y a 2 jours, cette méthode m'a sortie d'une impasse dans la quelle je tournai en rond à faire marcher une boucle
Ju1.0 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 07h26.


 
 
 
 
Partenaires

Hébergement Web