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 25/04/2007, 18h48   #1
Invité de passage
 
Inscription : janvier 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 24
Points : 0
Points : 0
Par défaut [VBA-W] Error! Bookmark not defined

Bonjour tt le monde,

Je veux exécuter une macro word mais certain champs de mon modele word ne sont pas renseignés. J'ai plutôt ceci:Error! Bookmark not defined.
Pourriez vous m'aider sur l'origine de ce problème?

Merci
zahui_eric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2007, 21h25   #2
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
Sans ton code, comment veux-tu où est ton erreur ?
Tu as une erreur : "Error! Bookmark not defined" qui veut dire qu'un signet n'est pas défini... en anglais
Espérant t'avoir aidé
Bref, mets-nous ton code et donne-nous le contexte. Le signet existe bien... etc
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 10h49   #3
Invité de passage
 
Inscription : janvier 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 24
Points : 0
Points : 0
C'est vrai tu n'as pas tord
Dans le cas que je traite voilà les deux macros concernés:

macro NC.MAIN:


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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
Public Sub MAIN()
Dim SourceName$
Dim iTotalResAG
Dim iTotalResNAG
Dim iNbCol
Dim TitreEtat$
Dim TypeAss$
Dim Depositaire$
Dim DateDepot$
Dim NumDepot$
 
SourceName$ = WordBasic.[GetDocumentVar$]("FusionSource")
iTotalResAG = WordBasic.Val(WordBasic.[GetDocumentVar$]("TotalResAG"))
iTotalResNAG = WordBasic.Val(WordBasic.[GetDocumentVar$]("TotalResNAG"))
iNbCol = WordBasic.Val(WordBasic.[GetDocumentVar$]("NbCol"))
TitreEtat$ = WordBasic.[GetDocumentVar$]("TitreEtat")
TypeAss$ = WordBasic.[GetDocumentVar$]("TypeAss")
Depositaire$ = WordBasic.[GetDocumentVar$]("Depositaire")
DateDepot$ = WordBasic.[GetDocumentVar$]("DateDepot")
NumDepot$ = WordBasic.[GetDocumentVar$]("NumDepot")
 
If iNbCol < 23 Then
    ' Creation du tableau à 1 Ligne et iNbCol Colonnes
    Call InsererTableauVPC.MAIN
    'WordBasic.ToolsMacro Name:="InsererTableauVPC", Run:=1, Show:=3, Description:="", NewName:=""
Else ' Création de 2 Tableaux
    If iTotalResAG > 0 Then
        If iTotalResAG < 20 Then
            ' Séparation du tableau en deux : 1 pour les Rés AG, 1          autre pour les Rés NAG
            Call InsererTabMoitieAG.MAIN
            'WordBasic.ToolsMacro Name:="InsererTabMoitieAG", Run:=1, Show:=3, Description:="", NewName:=""
            If (iTotalResNAG > 0) Then   ' Il y des Res NAG
                WordBasic.CharRight 4
                Call InsererTabMoitieNAG.MAIN
                'WordBasic.ToolsMacro Name:="InsererTabMoitieNAG", Run:=1, Show:=3, Description:="", NewName:=""
            End If
        Else ' iTotalResAG > 19
            ' Séparation du tableau en deux parties inegales
            Call InsererTab1AGNAG.MAIN
            'WordBasic.ToolsMacro Name:="InsererTab1AGNAG", Run:=1, Show:=3, Description:="", NewName:=""
            WordBasic.CharRight 4
            Call InsererTab2AGNAG.MAIN
            'WordBasic.ToolsMacro Name:="InsererTab2AGNAG", Run:=1, Show:=3, Description:="", NewName:=""
        End If
    Else
        If (iTotalResNAG > 0) Then   ' Il y des Res NAG
            WordBasic.StartOfDocument
            WordBasic.LineDown 9
            WordBasic.CharRight 4
            Call InsererTabMoitieNAG.MAIN
            'WordBasic.ToolsMacro Name:="InsererTabMoitieNAG", Run:=1, Show:=3, Description:="", NewName:=""
        End If
    End If
End If
 
WordBasic.EditReplace Find:="@TITRE_ETAT@", Replace:=TitreEtat$, Direction:=0, MatchCase:=0, WholeWord:=0, PatternMatch:=0, SoundsLike:=0, ReplaceOne:=1, Format:=0, Wrap:=1, FindAllWordForms:=0
WordBasic.EditReplace Find:="@ASSEMBLEE@", Replace:=TypeAss$, Direction:=0, MatchCase:=0, WholeWord:=0, PatternMatch:=0, SoundsLike:=0, ReplaceOne:=1, Format:=0, Wrap:=1, FindAllWordForms:=0
WordBasic.EditReplace Find:="@DEPOSITAIRE@", Replace:=Depositaire$, Direction:=0, MatchCase:=0, WholeWord:=0, PatternMatch:=0, SoundsLike:=0, ReplaceOne:=1, Format:=0, Wrap:=1, FindAllWordForms:=0
WordBasic.EditReplace Find:="@DATE_DEPOT@", Replace:=DateDepot$, Direction:=0, MatchCase:=0, WholeWord:=0, PatternMatch:=0, SoundsLike:=0, ReplaceOne:=1, Format:=0, Wrap:=1, FindAllWordForms:=0
WordBasic.EditReplace Find:="@NUMERO_DEPOT@", Replace:=NumDepot$, Direction:=0, MatchCase:=0, WholeWord:=0, PatternMatch:=0, SoundsLike:=0, ReplaceOne:=1, Format:=0, Wrap:=1, FindAllWordForms:=0
 
' Fusion
 
WordBasic.MailMergeOpenDataSource Name:=SourceName$, ConfirmConversions:=0, ReadOnly:=0, LinkToSource:=1, AddToMru:=0, PasswordDoc:="", PasswordDot:="", Revert:=0, WritePasswordDoc:="", WritePasswordDot:="", Connection:="", SQLStatement:="", SQLStatement1:=""
 
WordBasic.MailMerge CheckErrors:=2, Destination:=0, MergeRecords:=0, From:="", To:="", Suppression:=0, MailMerge:=1, MailSubject:="", MailAsAttachment:=0, MailAddress:=""
 
Call SupprimerArobase.MAIN
' WordBasic.ToolsMacro Name:="SupprimerArobase", Run:=1, Show:=0, Description:="", NewName:=""
 
Call FermerModele.MAIN
'WordBasic.ToolsMacro Name:="FermerModele", Run:=1, Show:=0, Description:="", NewName:=""
 
WordBasic.StartOfDocument
 
End Sub
 
 
Macro InsererTab1AGNAG.MAIN:
 
 
Public Sub MAIN()
Dim iTotalResAG
Dim iTotalResNAG
Dim iNbCol
Dim i
Dim FusionField$
iTotalResAG = WordBasic.Val(WordBasic.[GetDocumentVar$]("TotalResAG"))
iTotalResNAG = WordBasic.Val(WordBasic.[GetDocumentVar$]("TotalResNAG"))
iNbCol = WordBasic.Val(WordBasic.[GetDocumentVar$]("NbCol"))
 
' Creation de l'en-tete du tableau à 1 ligne et iTotalResAG Colonnes
WordBasic.ToolsMacro Name:="CreerEnTete1AGNAG", Run:=1, Show:=3, Description:="", NewName:=""
 
' Creation du tableau à 1 Ligne et iTotalResAG Colonnes
WordBasic.TableInsertTable ConvertFrom:="", NumColumns:=Str(19 + 3), NumRows:="1", InitialColWidth:="Auto", Format:="0", Apply:="167"
 
' Insertion des Champs de Fusion Abrege, Compte, Nom
WordBasic.InsertMergeField MergeField:="ABREGE", WordField:=-1
'ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, _
    Name:="ABREGE"
 
WordBasic.NextCell
 
 
WordBasic.InsertMergeField MergeField:="COMPTE", WordField:=-1
WordBasic.NextCell
WordBasic.InsertMergeField MergeField:="NOM_ACTIONNAIRE", WordField:=-1
WordBasic.NextCell
 
' Insertion des Champs de Fusion pour les Resolutions Agréées
For i = 4 To (2 + 19)
    FusionField$ = "RES_" + WordBasic.[LTrim$](Str(i - 3))
    WordBasic.InsertMergeField MergeField:=FusionField$, WordField:=-1
    WordBasic.NextCell
Next i
FusionField$ = "RES_" + WordBasic.[LTrim$](Str(19))
WordBasic.InsertMergeField MergeField:=FusionField$, WordField:=-1
 
' Mise en forme du Tableau
WordBasic.TableSelectTable
WordBasic.CenterPara
WordBasic.FormatBordersAndShading ApplyTo:=3, Shadow:=0, TopBorder:=1, LeftBorder:=1, BottomBorder:=1, RightBorder:=1, HorizBorder:=1, VertBorder:=1, TopColor:=0, LeftColor:=0, BottomColor:=0, RightColor:=0, HorizColor:=0, VertColor:=0, FromText:="0 pt", Shading:=0, Foreground:=0, Background:=0, Tab:="0", FineShading:=-1
WordBasic.TableRowHeight RulerStyle:="0", LineSpacingRule:=0, LineSpacing:="", LeftIndent:="0 cm", Alignment:=1, AllowRowSplit:=1
WordBasic.CharLeft 1
WordBasic.TableColumnWidth ColumnWidth:="1,6 cm", SpaceBetweenCols:="0,38 cm", RulerStyle:="0"
WordBasic.NextCell
WordBasic.TableColumnWidth ColumnWidth:="1,2 cm", SpaceBetweenCols:="0,38 cm", NextColumn:=1, RulerStyle:="0"
WordBasic.TableColumnWidth ColumnWidth:="6 cm", SpaceBetweenCols:="0,38 cm", RulerStyle:="0"
WordBasic.LeftPara
WordBasic.NextCell
WordBasic.CharRight (19), 1
WordBasic.TableColumnWidth ColumnWidth:="0,98 cm", SpaceBetweenCols:="0,38 cm", RulerStyle:="0"
 
End Sub
Merci pour ton aide
zahui_eric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 11h14   #4
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
Oui. Et sur quelle ligne, l'erreur ?
(pense aux balises Code -> Sélection du code + un clic sur # Ça facilite la lecture )
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 11h26   #5
Invité de passage
 
Inscription : janvier 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 24
Points : 0
Points : 0
D'abord on crée un tableau dans le quel on rajoute des champs de fusion:

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
' Creation du tableau à 1 Ligne et iTotalResAG Colonnes
WordBasic.TableInsertTable ConvertFrom:="", NumColumns:=Str(19 + 3), NumRows:="1", InitialColWidth:="Auto", Format:="0", Apply:="167"
 
' Insertion des Champs de Fusion Abrege, Compte, Nom
WordBasic.InsertMergeField MergeField:="ABREGE", WordField:=-1
'ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, _
    Name:="ABREGE"
 
WordBasic.NextCell
 
 
WordBasic.InsertMergeField MergeField:="COMPTE", WordField:=-1
WordBasic.NextCell
WordBasic.InsertMergeField MergeField:="NOM_ACTIONNAIRE", WordField:=-1
WordBasic.NextCell
 
' Insertion des Champs de Fusion pour les Resolutions Agréées
For i = 4 To (2 + 19)
    FusionField$ = "RES_" + WordBasic.[LTrim$](Str(i - 3))
    WordBasic.InsertMergeField MergeField:=FusionField$, WordField:=-1
    WordBasic.NextCell
Next i
FusionField$ = "RES_" + WordBasic.[LTrim$](Str(19))
WordBasic.InsertMergeField MergeField:=FusionField$, WordField:=-1
Ensuite on fait la fusion avec notre source de données.

Code :
1
2
3
4
5
' Fusion
 
WordBasic.MailMergeOpenDataSource Name:=SourceName$, ConfirmConversions:=0, ReadOnly:=0, LinkToSource:=1, AddToMru:=0, PasswordDoc:="", PasswordDot:="", Revert:=0, WritePasswordDoc:="", WritePasswordDot:="", Connection:="", SQLStatement:="", SQLStatement1:=""
 
WordBasic.MailMerge CheckErrors:=2, Destination:=0, MergeRecords:=0, From:="", To:="", Suppression:=0, MailMerge:=1, MailSubject:="", MailAsAttachment:=0, MailAddress:=""
Seulement dans le cadre de la boucle for la fusion est bien faite mais pas dans le cas de COMPTE ABREGE NOM_ACTIONNAIRE d'ou l'erreur.
zahui_eric est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2007, 13h25   #6
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
Bon, je pense que tu as de bonnes raisons d'utiliser WordBasic mais comme je ne l'utilise pas du tout, ma syntaxe n'a rien à voir avec la tienne. Je ne vais pas pouvoir t'aider.
par exemple, pour insérer un champ, j'utilise
Code :
1
2
    ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, Name:= _
        "Nom_de_la_Directrice"
qui est le code qu tu as mis en remarque
Citation:
' Insertion des Champs de Fusion Abrege, Compte, Nom
WordBasic.InsertMergeField MergeField:="ABREGE", WordField:=-1
'ActiveDocument.MailMerge.Fields.Add Range:=Selection.Range, _
Name:="ABREGE"
Dans ce code, tu as laissé la dernière ligne... Ton erreur ne serait-elle pas là ?
Bonne chance
ouskel'n'or 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 01h55.


 
 
 
 
Partenaires

Hébergement Web