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 31/12/2006, 03h02   #1
Invité régulier
 
Inscription : août 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 31
Points : 8
Points : 8
Par défaut [VBA-W]Rajouter ou soustraire 1 a chaque [chiffre]

bonjour a tous

je suis en train de finir ma these
et je suis confronté a un pb de reference bibliographique :

Je mentionne dans mon document, a chaque fois que je fais reference a des informations ou des etudes publiées, leur sources.
Cette mention apparait dans mes differents paragraphes par le biais d un chiffre entre crochet genre [10], [23]... qui correspond a la references citée (a la fin de mon document, j ai une page qui donne le titre complet et le nom de l auteur assossié a chacun de ces numeros)

ces chiffres sont numerotés par ordre croissant suivant l ordre d apparition des references

mon probleme c est que a chaque fois que j ajoute une reference (ou que j en supprime une) tous les numeros suivant se decallent et je dois les reajuster a la main ce qui est tres long...
exemple (le sens du texte est sana importance):

Dans la moelle, l’activité mitotique très importante[15]
impliquant de multiples lignées, des hormones
spécifiques[16] (Erythropoïétine, thrombopoïétine…), ainsi
que des réseaux inbriqués de cytokines[17] qui régissent la
différenciation, la prolifération et la maturation des différentes
lignées sanguines[18].

imaginons que je rajoute une reference apres le [15] mon texte devient

Dans la moelle, l’activité mitotique très importante[15], [16]
impliquant de multiples lignées, des hormones
spécifiques[17] (Erythropoïétine, thrombopoïétine…), ainsi
que des réseaux inbriqués de cytokines[18] qui régissent la
différenciation, la prolifération et la maturation des différentes
lignées sanguines[19].

j ai du incrementé de 1 tous les numeros de references >= a 16.
C est penible quand on a 150 numero de reference dispersée sur 100 pages...
je cherche donc a coder ca.

G pas de notion de vba word et je peine a trouver un tuto accessible aux debutants mauvais, voila pourquoi je vous demande un petit coup de main...

bonne année a tous
Huubb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2007, 14h01   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
tiens essai de t'inspirer du code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
'
' Incremente [xx]
'
Sub Incremente()
Dim w As Range
Dim i As Integer
For i = 2 To ActiveDocument.Words.Count - 1 ' on laisse la place au premier [ et au dernier ]
    Set w = ActiveDocument.Words(i)
    If w.Previous = "[" And w.Next = "]" Then
        w = w + 1
   End If
Next
End Sub
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2007, 15h22   #3
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 654
Points : 7 654
Il me semble que tu te donnes beaucoup de peine pour rien.

Word gère parfaitement les notes de bas de page ou de fin de document sans devoir se casser la tête.
Dans Word 2003, il faut aller dans Insertion, Référence, Note de bas de page...

Word va gérer toutes les insertions quel que soit leur ordre.

A toi de voir si tu veux encore tout faire à la main quand un outil adéquat existe.
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 04h09   #4
Invité régulier
 
Inscription : août 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 31
Points : 8
Points : 8
Merci pour vos reponses,

Mon pb Alaintech, c est que ces numeros que je veux incrémenter ne sont pas des notes de bas de pages.
ils figurent dans le corps de mon texte a chaque page, et ne sont repertoriés avec le nom des articles associés qu a la fin de mon document, sur 4 pages de bibliographie dediées. C est pour ca que j essaie de passer par vba.

bbil, merci beaucoup pour ton code,
la ou je bloque c est que je voudrais l appliquer a partir de l endroit ou je me trouve dans mon document, histoire d incrementer tous les [nombres] en aval sans toucher a ceux en amont.
il me suffirait d appliquer la boucle a partir du mot ou je me trouve
mais j arrive pas a coder son index (comme dans excel).

Code :
1
2
3
4
5
6
7
8
9
10
Sub Incremente()
Dim w As Range
Dim i As Integer
For i = Word.selection.Index ('quelquechose de ce genre) To ActiveDocument.Words.Count 
    Set w = ActiveDocument.Words(i)
    If w.Previous = "[" And w.Next = "]" Then
        w = w + 1
   End If
Next
End Sub
comment vous faites pour coder l index d un mot ?
Huubb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2007, 06h37   #5
Modérateur
 
Avatar de AlainTech
 
Homme Alain Gerard
Consultant informatique
Inscription : mai 2005
Messages : 3 675
Détails du profil
Informations personnelles :
Nom : Homme Alain Gerard
Âge : 58
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique
Secteur : Finance

Informations forums :
Inscription : mai 2005
Messages : 3 675
Points : 7 654
Points : 7 654
Citation:
Envoyé par AlainTech
Word gère parfaitement les notes de bas de page ou de fin de document...
__________________
N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
Pensez aussi à voter pour les réponses qui vous ont aidés.
------------
Je dois beaucoup de mes connaissances à mes erreurs!
AlainTech est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 18h48   #6
Invité régulier
 
Inscription : août 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 31
Points : 8
Points : 8
mon pb, alaintech est que je n arrive pas appliquer la gestion des notes de fin de documents a mon cas.

Je prefererai passer par vba, meme si je me complique la vie,
POur en revenir a mon pb je souhaiterai appliquer un macro a tous mon document word mais a partir de l endroit ou se situe mon curseur
histoire de pas affecter le texte en amont mais seulement la partie de mon document qui se trouve entre mon curseur et la fin du document

le code dont je dispose(thx bbil) est le suivant mais je veux l appliquer seulement a partir du mot sur lequel je me trouve
je pensais pouvoir commencer ma boucle a partir de l index du mot sur lequel je me trouve. Mais je sais pas comment le coder...

Code :
1
2
3
4
5
6
7
8
9
10
Sub Incremente()
Dim w As Range
Dim i As Integer
For i = Word.selection.Index ('quelquechose de ce genre) To ActiveDocument.Words.Count 
    Set w = ActiveDocument.Words(i)
    If w.Previous = "[" And w.Next = "]" Then
        w = w + 1
   End If
Next
End Sub
comment l écrire ?
Huubb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 19h06   #7
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
tu peu tester la "position" de ta sélection :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 
'
' Incremente [xx]
'
Sub Incremente()
Dim w As Range
 
Dim i As Integer
For i = 2 To ActiveDocument.Words.Count - 1 ' on laisse la place au premier [ et au dernier ]
        Set w = ActiveDocument.Words(i)
     If w.Start >= Selection.Start Then
      If w.Previous = "[" And w.Next = "]" Then
         w = w + 1
        End If
     End If
Next
End Sub
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 20h06   #8
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Ce que j'ai compris : A partir du pt d'insersion d'un nouvel index, incrémenter tous les index suivants. Si c'est ça, je ferais ça en deux temps.
- Pour avoir le dernier N° d'index, celui précédant l'insersion d'un nouvel index, j'appliquerais le code de bbil avec une petite modif
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Incremente()
Dim w As Range
 
Dim i As Integer
    Selection.HomeKey Unit:=wdStory, Extend:=wdExtend
    With Selection
        For i = 2 To .Words.Count - 1 ' on laisse la place au premier [ et au dernier ]
            Set w = .Words(i)
            If w.Start >= .Start Then
                If w.Previous = "[" And w.Next = "]" Then
                    w = w + 1
                End If
            End If
        Next
    End With
    MsgBox w
End Sub
Là, tu récupères le dernier N° (w) et, ensuite seulement, je rechercherais les [ et ] suivants pour insérer le dernier N° incrémenté
Là tout de suite, on m'appelle : "A TABLE !!!"
Je te laisse avec bbil qui saura mieux que moi te dire comment faire
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 20h42   #9
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Voilà j'ai pondu mon oeuf à l'aide du code de bbil
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
Sub Incremente()
Dim w As Range
Dim i As Integer
    Selection.HomeKey Unit:=wdStory, Extend:=wdExtend
    With Selection
        For i = 2 To .Words.Count - 1 ' on laisse la place au premier [ et au dernier ]
            Set w = .Words(i)
            If w.Start >= .Start Then
                If w.Previous = "[" And w.Next = "]" Then
                    w = w + 1
                End If
            End If
        Next
    End With
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Insère (w)
End Sub
 
Sub Insère(Lindex)
Dim w As Range
Dim i As Integer, j As Integer
    Selection.EndKey Unit:=wdStory, Extend:=wdExtend
    With Selection
        For i = 2 To .Words.Count - 1 ' on laisse la place au premier [ et au dernier ]
                Set w = .Words(i)
                If w.Start >= Selection.Start Then
                    If w.Previous = "[" And w.Next = "]" Then
                       j = j + 1
                       w = Lindex + j
                    End If
             End If
        Next
    End With
End Sub
Pour lancer la macro Incremente(), tu te places avant ou après le dernier index inséré
Chez moi ça fonctionne avec Word 2003 ou 97
A+

Edit
Ne fonctionne pas si tu laisses des crochets vides : [] sans rien dedans = bug !
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2007, 10h25   #10
Invité régulier
 
Inscription : août 2006
Messages : 31
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 31
Points : 8
Points : 8
marrant l'intense satisfaection que peut procurer quelques lignes de code...
la journée commence bien,

merci beaucoup a bbil et a la poule aux eufs d or !
bonne journée !
Huubb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h28.


 
 
 
 
Partenaires

Hébergement Web