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/01/2008, 12h18   #1
Futur Membre du Club
 
Inscription : avril 2007
Messages : 90
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2007
Messages : 90
Points : 16
Points : 16
Par défaut bookmark - pb de récupération

Bonjour à tous,

j'ai un petit soucis et j'imagine qu'ici, des personnes averties pourraient m'aider.

J'ai un .dot qui contient quelques signets dont un signet lib_civilite.
Quand ce signet vaut "madame" ou "mademoiselle" pas de pb
Mais quand il vaut "médecin chef" ou "lieutenant colonel" ou 'lieutenant-colonel" alors c'est la bagaille : il semble qu'un espace ou un caractère spécial pose problème.
Je récupère la moitié de la valeur soit "médecin" ou "lieutenant" et ceux pour le 2é et 3e signet alors que le premier est souvent bon mais pas toujours.
Le 2e et 3e signet étant renseigné à partir du premier => ci dessous code

Si je remplace dans ma base de données "médecin chef" en "médecinchef" ca marche

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
''' extrait macro VBA
Sub miseenforme()
Dim i  As Integer
 
 
    Dim strDt_annee As String
 
    ActiveDocument.Bookmarks("dt_emission").Select
    strDt_annee = Right(Selection.Text, 4)
    ActiveDocument.Bookmarks("z_dt_annee").Select
    Selection.TypeText Text:=strDt_annee
 
    ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
 
    For i = 1 To ActiveDocument.Bookmarks.Count
        If ActiveDocument.Bookmarks(i).Name = "lib_civilite" Then
 
            ActiveDocument.Bookmarks(i).Select
            Selection.MoveRight unit:=wdWord, Count:=1, Extend:=wdExtend
 
 
           ' On supprime le caractère " " qui se trouve dans certains renvois
            If Asc(Right(Selection.Text, 1)) = vbKeySpace Then
                Selection.MoveLeft unit:=wdCharacter, Count:=1, Extend:=wdExtend
            End If
 
            With ActiveDocument.Bookmarks
                .Add Range:=Selection.Range, Name:=ActiveDocument.Bookmarks(i).Name
                .DefaultSorting = wdSortByName
                .ShowHidden = False
            End With
        End If
    Next i
 
    Selection.WholeStory
    Selection.Fields.Update
 
    ' On supprime le format gras qui se trouve dans les signets de lib_civilite
    Dim str_lib_civilite As String
 
    ActiveDocument.Bookmarks("lib_civilite").Select
    str_lib_civilite = Selection.Text
    MsgBox ("str_lib_civilite = " + str_lib_civilite)
 
    ActiveDocument.Bookmarks("z_lib_civilite").Select
    Selection.TypeText Text:=str_lib_civilite
 
    ActiveDocument.Bookmarks("z_lib_civilite_2").Select
    Selection.TypeText Text:=str_lib_civilite
 
    If Selection.Type = wdSelectionNormal Then
       Selection.Range.Font.Bold = wdToggle
    End If
 
 
 
    Selection.WholeStory
    Selection.Fields.Update
 
 
    Exit Sub
err_miseenforme:
    Resume Next
 
End Sub
Merci pour votre aide
ploukinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 15h10   #2
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 356
Points : 3 356
Par défaut Sélection du contenu d'un signet

Salut

ton problème provient du fait que tu sélectionnes le contenu de ton signet, puis tu resélectionnes qu'un mot donc si ton signet a plusieurs mots, ça ne va pas toujours (en fait ça dépend en plus de ta configuration de tes options de sélection automatique)

Citation:
Envoyé par ploukinet Voir le message
ActiveDocument.Bookmarks(i).Select
Selection.MoveRight unit:=wdWord, Count:=1, Extend:=wdExtend
En fait tu n'as pas besoins de reselectionner, la 1ere ligne suffit.

De plus, pour supprimer les espaces devant ou après un texte, il ne faut pas faire
Code :
1
2
3
4
5
 
           ' On supprime le caractère " " qui se trouve dans certains renvois
            If Asc(Right(Selection.Text, 1)) = vbKeySpace Then
                Selection.MoveLeft unit:=wdCharacter, Count:=1, Extend:=wdExtend
            End If
mais utiliser la fonction Trim ==> donc ton code tiens pour les 2 blocs en 1
seule ligne
Code :
1
2
 
     LeContenuDeMonSignet = Trim(ActiveDocument.Bookmarks(i).Select)
A+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 15h16   #3
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
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 354
Points : 29 270
Points : 29 270
C'est logique, tu sélectionnes le début du signet et tu augmentes la sélection d'un mot.

Pour récupérer la valeur d'un signet

Code :
ActiveDocument.Bookmarks(1).Range.text
Et dans ce cas, on récupère le contenu du signet, quelle que soit son contenu et sa taille.
__________________
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 31/01/2008, 16h15   #4
Futur Membre du Club
 
Inscription : avril 2007
Messages : 90
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2007
Messages : 90
Points : 16
Points : 16
Merci pour ces informations mais ... suite à l'essai de sepia, la formule ne compile pas.
quand au range.text, il me retourne la première lettre du contenu du signet ... c'est surement pour ca que celui qui a developpé le truc va chercher le mot avec l'instruction suivante :
Code :
1
2
3
 
ActiveDocument.Bookmarks(i).Select
            Selection.MoveRight unit:=wdWord, Count:=1, Extend:=wdExtend
Si vous avez des idées ... peut-être au niveau de ma "config" comme le sugérait sepia ?
ploukinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 20h06   #5
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
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 354
Points : 29 270
Points : 29 270
C'est que seule la première lettre est dans le signet.

Comment le texte est-il inséré dans signet ?
__________________
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 01/02/2008, 10h57   #6
Futur Membre du Club
 
Inscription : avril 2007
Messages : 90
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2007
Messages : 90
Points : 16
Points : 16
Bon, en cherchant j'ai fini par trouver ce bout de code ...

Cette appli est en Power Builder et génère donc des documents en créant un objet ole word.
J'ai pêché dans le code Power Builder une boucle sur le nbre de signets qui contient :
Code :
1
2
3
... = ole_word.ActiveDocument.Bookmark[i].name
... = ole_word.ActiveDocument.Bookmark[i].range.bookmarkId
La macro VBA (dont extrait de code dans mon premier message) est lancée plus loin dans le code Power Builder

Voilou ... la deuxième ligne 'semble' ramener la valeur du signet ... est ce que le range.bookmarkId pourrait être à l'origine du pb ?
ploukinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 11h06   #7
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
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 354
Points : 29 270
Points : 29 270
Toutes mes excuses, je ne connais absolument pas Power Builder.
__________________
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 01/02/2008, 14h31   #8
Futur Membre du Club
 
Inscription : avril 2007
Messages : 90
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2007
Messages : 90
Points : 16
Points : 16
Alors peut-être que je pourrais résoudre mon pb en copiant un signet dans un autre au niveau du code VBA.
En effet, un de mes signets est correctement renseigné (en provenance de la base de données) sur le .doc généré par exemple "Médecin chef".
Mais dans le reste du .dot, j'ai deux autres signets qui doivent prendre la valeur "Médecin Chef" et dans lequel je retrouve que "médecin" car la copie du signet s'est mal déroulé dans le VBA.

Donc qui sait faire une copie d'un signet dans un autre ?
ploukinet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 14h35   #9
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
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 354
Points : 29 270
Points : 29 270
Pas besoin de macro, un champ ref

http://heureuxoli.developpez.com/office/word/champs/
__________________
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 01/02/2008, 15h20   #10
Futur Membre du Club
 
Inscription : avril 2007
Messages : 90
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2007
Messages : 90
Points : 16
Points : 16
Même soucis ... à la génération du .dot avec un {REF signet} je récupère que la première partie de ma civilité soit "médecin" au lieu de "médecin chef"

...
ploukinet 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 18h19.


 
 
 
 
Partenaires

Hébergement Web