IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Pourquoi ma barre d'outil se multiplie-t-elle ?


Sujet :

VBA Word

  1. #1
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    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 !

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    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.

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  5. #5
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 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.

Discussions similaires

  1. [VB6]Barre d'outil
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 06/02/2003, 12h48
  2. [VBA-E] Barre d'outil créée automatiquement
    Par gjeff dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/12/2002, 17h45
  3. [VB6] [Interface] Icones de boutons de barre d'outils
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 13/09/2002, 16h50
  4. Barre d'outils
    Par MANU_2 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 04/08/2002, 23h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo