Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 19/06/2008, 16h55   #1
Godzestla
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 343
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 343
Points : 3 181
Points : 3 181
Par défaut Pourquoi ma barre d'outil se multiplie-t-elle ?

Bonjour,

il y certainement quelquechose que je n'ai pas compris, car a chaque fois que j'ouvre word, ma barre d'outil se muiltiplie (avec le même nom) et les icones se multiplient dans la barre de départ.

J'ai prévu dans mon code de model.dot :
1) autoexec : appelle suppression puis création de la barre puis des boutons
2) Autoexit : suppression de la barre.

Rien n'y fait, la barre se mutiplie encore et encore.

Quelle est mon erreur ? Est-ce parce que j'ai d'autres modèles qui s'ouvrent (ou ce code ne se trouve pas ).

Voici le code de model.dot.

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
 
Sub AutoExec()
AjouterCutePdfCommandBar_Word
End Sub
Sub Autoexit()
SupprimerCutePdfCommandBar_word
End Sub
Sub SupprimerCutePdfCommandBar_word()
Dim NomDeLaBarre
    NomDeLaBarre = "MyCutePDF"
 
    'Si la barre existe déjà, valider la ligne suivante
    On Error Resume Next
    Application.CommandBars(NomDeLaBarre).Delete
    'On Error GoTo 0
End Sub
Sub AjouterCutePdfCommandBar_Word()
Dim NomDeLaBarre
    NomDeLaBarre = "MyCutePDF"
 
    'Si la barre existe déjà, valider la ligne suivante
    'On Error Resume Next
    Application.CommandBars(NomDeLaBarre).Delete
    'On Error GoTo 0
    'Pour créer une barre de commande
    '1 => affiche la barre en haut, true => barre provisoire
    Application.CommandBars.Add("MyCutePDF", msoBarTop, MenuBar:=False, Temporary:=False).Protection = msoBarNoProtection
    Application.CommandBars("MyCutePDF").Visible = True
    Bouton_Word_Convertopdf_Interactive
    Bouton_Word_Convertopdf_Silent
End Sub
 
Sub Bouton_Word_Convertopdf_Interactive()
Dim labarre As CommandBar
Dim LeBouton As CommandBarButton
Dim picImage As IPictureDisp
Dim NomDeLaBarre, NomMacro, NomClasseur, CheminEtNomImage, ActionDubouton As String
 
    ActionDubouton = "Print in PDF using CutePDF (Interactive Mode)"
    NomDeLaBarre = "MyCutePDF"
    NomMacro = "Converttopdf_Interactive"
    NomClasseur = "Module1" 'GhostScript Api's
    CheminEtNomImage = Application.Path & "\BITMAPS\CutePDf\Icon_Pdf_1.bmp"
 
 
    'Charge l'icone du bouton
    Set picImage = LoadPicture(CheminEtNomImage)
 
    Set labarre = Application.CommandBars(NomDeLaBarre)
 
    'Ajoute le bouton à la barre d'outils personnalisée
    Set LeBouton = labarre.Controls.Add(Type:=msoControlButton)
        LeBouton.FaceId = 0
        LeBouton.Caption = ActionDubouton 'info-bulle du bouton
        LeBouton.OnAction = NomClasseur & "." & NomMacro
 
        'Collage de l'image sur le bouton
        LeBouton.Picture = picImage
 
 
 
    Set labarre = Nothing
    Set LeBouton = Nothing
 
End Sub
 
Sub Bouton_Word_Convertopdf_Silent()
Dim labarre As CommandBar
Dim LeBouton As CommandBarButton
Dim NomDeLaBarre, NomMacro, NomClasseur, CheminEtNomImage, ActionDubouton As String
 
    ActionDubouton = "Print in PDF using CutePDF (Quiet Mode)"
    NomDeLaBarre = "MyCutePDF"
    NomMacro = "Converttopdf_Silent"
    NomClasseur = "Module1" 'GhostScript Api's
    CheminEtNomImage = Application.Path & "\BITMAPS\CutePDf\Icon_Pdf_2.bmp"
 
 
    'Charge l'icone du bouton
    Set picImage = LoadPicture(CheminEtNomImage)
 
    Set labarre = Application.CommandBars(NomDeLaBarre)
 
    'Ajoute le bouton à la barre d'outils personnalisée
    Set LeBouton = labarre.Controls.Add(Type:=msoControlButton)
        LeBouton.FaceId = 0
        LeBouton.Caption = ActionDubouton 'info-bulle du bouton
        LeBouton.OnAction = NomClasseur & "." & NomMacro
 
        'Collage de l'image sur le bouton
        LeBouton.Picture = picImage
 
 
 
    Set labarre = Nothing
    Set LeBouton = Nothing
 
End Sub
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2008, 17h55   #2
Heureux-oli
Responsable Word


 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 18 889
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 18 889
Points : 39 103
Points : 39 103
En fait, la barre d'outil n'est pas supprimée.
Ce que tu dois faire, c'est vérifier si elle est chargée, si c'est le cas, tu la supprimes et tu la crée, si ce n'est pas le cas, tu la crées.
__________________
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 19/06/2008, 23h21   #3
ouskel'n'or
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 : 13 262
Points : 13 262
Peut-être une explication : Les barres d'outils sont permanentes si tu ne dis pas à l'application qu'elles sont liées au document. C'est à dire que si tu crées une barre d'outils par macro, cette nouvelle barre est liée au modèle.
Tu dois donc, soit spécifier que cette/ces barres d'outils est/sont une/des barres de commandes personnalisées afin de pouvoir les supprimer dans une boucle, ou bien la/les supprimer (delete) par leur nom au moment de fermer le fichier depuis lequel tu l'as ou les as créées.
Jète un oeil à BuiltIn dans l'aide, tu as le code.
Bonne soirée.
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2008, 10h05   #4
Godzestla
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 343
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 343
Points : 3 181
Points : 3 181
Pour info,

voici ce que j'ai fait:

D'abord, supprimer les barres de model.dot n'a rien changé.
1) je les supprime
2) je les liste -> il n'y en a plus
3) je ferme et je rouvre word -> Back to shit.

Donc je supprime model.dot -> plus de barre. !!! ok

La solution qui marche est

0) je recrée un model.dot vide.. histoire de ne pas planter.
a) J'ai mis mon code a lancer par la toolbar dans un model GSAPI_VBA.DOT
b) je rajoute le code suivant dans ce même model GSAPI_VBA.DOT
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
Sub AutoExec()
Scrap_toolbars_Cutepdf
AjouterCutePdfCommandBar_Word
End Sub
 
Sub Autoexit()
Scrap_toolbars_Cutepdf
End Sub
 
Sub Scrap_toolbars_Cutepdf()
Dim tb As CommandBar
For Each tb In Application.CommandBars
 If tb.BuiltIn = False Then
    If tb.Name = "MyCutePDF" Then
      tb.Delete
    End If
 End If
Next
End Sub
b) je copie ce modèle GSAPI_VBA.DOT dans C:\Program Files\Microsoft Office\OFFICE11\STARTUP (office2003)

c) Et je ne fais rien dans model.dot et tout marche !!!!!!

Merci heureux-oli et Ouskelnor pour votre soutien et votre patience

Enfin, ca marche.
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2008, 14h30   #5
Godzestla
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 343
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 343
Points : 3 181
Points : 3 181
Bonjour,
j'ai de nouveau des problèmes avec cette fameuse barre d'outil.

Ce qui se passe maintenant, sur certains postes mais pas tous, c'est que quand j'ouvre Word la barre s'affiche un nombre fois de plus en plus important puis toutes ces occurences de ma barre sont supprimées et la nouvelle barre apparaît.

J'en déduis que contrairement à ce que j'essaie de faire, la barre n'est pas supprimée à la fermeture du fichier qui la crée.

Rappel de ma configuration :
1) Installation de la barre d'outil via excel.
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
 
Function Install_Word_CommandBar() As Boolean
Dim source          As String
Dim GS_OK           As Boolean
Dim target          As String
Dim Gs_fullname     As String
Dim Proc            As String
Dim Workbook_Path   As String
Dim Pkg_fullname    As String
Dim res             As Variant
Dim CutePDf_ok      As Boolean
Dim Application_path As String
Dim elem             As Integer
 
 
'Check that Ghostscript DLL Writer already installed
target = Environ$("systemroot") & "\System32\" & "gsdll32.dll"
res = Dir(target, vbSystem)
If res = "" Then
   MsgBox "Ghostscript Installation not finished. Please run setup Install Excel Toolbar", vbCritical
   Exit Function
End If
 
For elem = 1 To 2
    'Check that icon_files available in Setup folder
    Workbook_Path = ActiveWorkbook.Path
    Pkg_fullname = Workbook_Path & "\Icon_Pdf_" & elem & ".bmp"
 
    res = Dir(Pkg_fullname, vbSystem)
    If res = "" Then
        MsgBox "Missing icon File " & Pkg_fullname
        Exit Function
    End If
 
    'retrieve Application Path to Store icon file  in \BITMAPS\CutePDf subfolder
    Application_path = Trim(Application.Path) & "\BITMAPS\CutePDf"
    'Check That this Subfolder Exists
    SHCreateDirectoryEx 0&, Application_path, 0&
 
    source = Pkg_fullname
    target = Application_path & "\" & res
 
    'Install icon in  \BITMAPS\CutePDf subfolder
    On Error Resume Next
    FileCopy source, target
    If Err.Number = 70 Then
        MsgBox target & " file locked. Cannot be upgraded. Close Word and retry", vbSystemModal
        Exit Function
    End If
Next elem
 
 
'Check that GSAPI_VBA.DOT available in Setup folder
Workbook_Path = ActiveWorkbook.Path
Pkg_fullname = Workbook_Path & "\GSAPI_VBA.dot"
 
res = Dir(Pkg_fullname, vbSystem)
If res = "" Then
   MsgBox "Missing PDF API Management file " & Pkg_fullname
   Exit Function
End If
 
'retrieve Application Path to Store GSAPI_VBA.dot in \STARTUP subfolder
Application_path = Trim(Application.Path) & "\STARTUP"
'Check That this Subfolder Exists
SHCreateDirectoryEx 0&, Application_path, 0&
 
source = Pkg_fullname
target = Application_path & "\GSAPI_VBA.dot"
 
 
 
'Install GSAPI_VBA in STARTUP subfolder
On Error Resume Next
FileCopy source, target
If Err.Number = 70 Then
 MsgBox target & " file locked. Cannot be upgraded. Close Word and retry", vbSystemModal
 Exit Function
End If
 
 
On Error GoTo 0
MsgBox "Ok", vbInformation
 
End Function
Le modèle installé est placé dans Application.Path\Startup et s'appelle "\GSAPI_VBA.dot".

ce fichier contient à la fois le code de génération et de suppression de la barre d'outil, mais également le code appelé par la barre d'outil.

Mon but est donc d'avoir le code en ligne dès que word est ouvert, et cela semble fonctionner.

2) Contenu du fichier GSAPI_VBA.DOT, relatif à la barre d'outil.
Ce code est dans Module1.
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
 
Sub AutoExec()
Scrap_toolbars_Cutepdf
AjouterCutePdfCommandBar_Word
End Sub
 
Sub Autoexit()
Scrap_toolbars_Cutepdf
End Sub
 
 
Sub Scrap_toolbars_Cutepdf()
Dim tb As CommandBar
For Each tb In Application.CommandBars
 If tb.BuiltIn = False Then
    'If tb.Name = "MyCutePDF" Then
      tb.Visible = False
      tb.Delete
    'End If
 End If
Next
End Sub
 
Sub check_toolbars_Cutepdf()
Dim tb As CommandBar
For Each tb In Application.CommandBars
 If tb.BuiltIn = False Then
    If tb.Name = "MyCutePDF" Then
      Debug.Print tb.Name & " " & tb.Context
    End If
 End If
Next
End Sub
 
Sub SupprimerCutePdfCommandBar_word()
Dim NomDeLaBarre
    NomDeLaBarre = "MyCutePDF"
 
    'Si la barre existe déjà, valider la ligne suivante
    On Error Resume Next
    Application.CommandBars(NomDeLaBarre).Delete
    'On Error GoTo 0
End Sub
Sub AjouterCutePdfCommandBar_Word()
Dim NomDeLaBarre
    NomDeLaBarre = "MyCutePDF"
 
    'Si la barre existe déjà, valider la ligne suivante
    On Error Resume Next
    Application.CommandBars(NomDeLaBarre).Delete
    On Error GoTo 0
    'Pour créer une barre de commande
    '1 => affiche la barre en haut, true => barre provisoire
    Application.CommandBars.Add("MyCutePDF", msoBarTop, MenuBar:=False, Temporary:=True).Protection = msoBarNoProtection
    Application.CommandBars("MyCutePDF").Visible = True
    Bouton_Word_Convertopdf_Interactive
    Bouton_Word_Convertopdf_Silent
End Sub
 
Sub Bouton_Word_Convertopdf_Interactive()
Dim LaBarre As CommandBar
Dim LeBouton As CommandBarButton
Dim picImage As IPictureDisp
Dim NomDeLaBarre, NomMacro, NomClasseur, CheminEtNomImage, ActionDubouton As String
 
    ActionDubouton = "Print in PDF using CutePDF (Interactive Mode)"
    NomDeLaBarre = "MyCutePDF"
    NomMacro = "Converttopdf_Interactive"
    NomClasseur = "Module1" 'GhostScript Api's
    CheminEtNomImage = Application.Path & "\BITMAPS\CutePDf\Icon_Pdf_1.bmp"
 
 
    'Charge l'icone du bouton
    Set picImage = LoadPicture(CheminEtNomImage)
 
    Set LaBarre = Application.CommandBars(NomDeLaBarre)
 
    'Ajoute le bouton à la barre d'outils personnalisée
    Set LeBouton = LaBarre.Controls.Add(Type:=msoControlButton)
        LeBouton.FaceId = 0
        LeBouton.Caption = ActionDubouton 'info-bulle du bouton
        LeBouton.OnAction = NomClasseur & "." & NomMacro
 
        'Collage de l'image sur le bouton
        LeBouton.Picture = picImage
 
 
 
    Set LaBarre = Nothing
    Set LeBouton = Nothing
 
End Sub
 
Sub Bouton_Word_Convertopdf_Silent()
Dim LaBarre As CommandBar
Dim LeBouton As CommandBarButton
Dim picImage As IPictureDisp
Dim NomDeLaBarre, NomMacro, NomClasseur, CheminEtNomImage, ActionDubouton As String
 
    ActionDubouton = "Print in PDF using CutePDF (Quiet Mode)"
    NomDeLaBarre = "MyCutePDF"
    NomMacro = "Converttopdf_Silent"
    NomClasseur = "Module1" 'GhostScript Api's
    CheminEtNomImage = Application.Path & "\BITMAPS\CutePDf\Icon_Pdf_2.bmp"
 
 
    'Charge l'icone du bouton
    Set picImage = LoadPicture(CheminEtNomImage)
 
    Set LaBarre = Application.CommandBars(NomDeLaBarre)
 
    'Ajoute le bouton à la barre d'outils personnalisée
    Set LeBouton = LaBarre.Controls.Add(Type:=msoControlButton)
        LeBouton.FaceId = 0
        LeBouton.Caption = ActionDubouton 'info-bulle du bouton
        LeBouton.OnAction = NomClasseur & "." & NomMacro
 
        'Collage de l'image sur le bouton
        LeBouton.Picture = picImage
 
 
 
    Set LaBarre = Nothing
    Set LeBouton = Nothing
 
End Sub
J'ai essayé de déplacer Autoexec et Autoexit ailleurs, mais cela n'apporte rien.

J'ai regardé dans la FAQ et j'ai trouvé ceci.

Citation:
Citation de bbil
Sous Word je sais pas .... moi sous excel ...

- je détruit mes barres d'outils à la fermeture du classeur contenant les macros ....
- lors de la création je commence par détruire barre d'outils du même nom si elle exite...
Je voudrais savoir comment faire cela en Word et où mettre ce code

Merci d'avance à qui pourra m'aider.

EDIT
_______________________________
Je viens de supprimer pour la 100000 fois le fichier normal.dot et maintenant cela semble fonctionner, mais pour combien de temps ?
Je ne comprends rien à tout cela.
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h23.


 
 
 
 
Partenaires

Hébergement Web