Pb Enregistrer sous - barre d'outils personnaliser et Macro

Le
JacquesH
Bonjour à toutes et à tous,

Je viens régulièrement sur le forum et dans ses archives pour
trouver réponse à mes problèmes (tout le code ci-après vient déjà d'ici
et j'en remercie au passage tous les contributeurs), mais là je ne
trouve rien et je me décide à demander l'avis des spécialistes.

Voici en résumé les éléments de mon problème :

J'ai une Macro à la fermeture d'un fichier qui l'archive sous un
autre nom et efface les modules et Macro de la version archivée.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Nom_Fichier As String
'Archive le fichier en cours avec un nom contenu dans la cellule A30
ActiveWorkbook.Save
Nom_Fichier = Sheets("Vérif. Nb ").Range("A30").Value
ChDir "G:\ArchivesAnnée en cours"
ActiveWorkbook.SaveAs FileName:=Nom_Fichier, _
FileFormat:=xlNormal

'Efface les modules et macros divers du fichier archivé.
Dim VBC As Object
With ActiveWorkbook.VBProject
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC
End With
ActiveWorkbook.Save
End Sub

Jusqu'à là tout va bien, le fichier archivé n'a plus les Macro et
celles de l'original fonctionnent très bien lorsque je l'ouvre à
nouveau.

J'ai voulu améliorer mon système en affichant à l'ouverture du
fichier original une barre d'outils personnalisée avec des boutons qui
font référence à des Macro de ce fichier.

Private Sub Workbook_Open()
Application.CommandBars("Choix_Sélection").Visible = True
End Sub

Dans la Macro de fermeture, j'ai ajouté :
Application.CommandBars("Choix_Sélection").Visible = False

Là encore tout va bien si je teste uniquement cette partie.

Mes soucis ont commencé lorsque j'ai compilé l'ensemble :
Quand je clique sur les boutons de ma barre d'outils, les Macros ne
fonctionnent plus correctement car elles ne font plus référence à mon
fichier original mais à celui archivé : elles ouvrent donc le fichier
archivé et comme il n'y a plus de Macro…

Pourtant les Macros de mon fichier original sont toujours correctes et
fonctionnent très bien si je ne passe pas par les boutons de ma barre.

Merci de votre aide.

Jacques
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
Bruno LOUIS
Le #1963608
Bonjour Jacques,

Pour éviter ce genre de désagrément tu devrais détruire puis recréer
dynamiquement ta barre d'outils au démarrage de ton classeur. Eventuellement
tu peux aussi la détruire à la fermeture du classeur.

Cordialement,

Bruno

"JacquesH" news:
Bonjour à toutes et à tous,

Je viens régulièrement sur le forum et dans ses archives pour
trouver réponse à mes problèmes (tout le code ci-après vient déjà d'ici
et j'en remercie au passage tous les contributeurs), mais là je ne
trouve rien et je me décide à demander l'avis des spécialistes.

Voici en résumé les éléments de mon problème :

J'ai une Macro à la fermeture d'un fichier qui l'archive sous un
autre nom et efface les modules et Macro de la version archivée.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Nom_Fichier As String
'Archive le fichier en cours avec un nom contenu dans la cellule A30
ActiveWorkbook.Save
Nom_Fichier = Sheets("Vérif. Nb ").Range("A30").Value
ChDir "G:\ArchivesAnnée en cours"
ActiveWorkbook.SaveAs FileName:=Nom_Fichier, _
FileFormat:=xlNormal

'Efface les modules et macros divers du fichier archivé.
Dim VBC As Object
With ActiveWorkbook.VBProject
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC
End With
ActiveWorkbook.Save
End Sub

Jusqu'à là tout va bien, le fichier archivé n'a plus les Macro et
celles de l'original fonctionnent très bien lorsque je l'ouvre à
nouveau.

J'ai voulu améliorer mon système en affichant à l'ouverture du
fichier original une barre d'outils personnalisée avec des boutons qui
font référence à des Macro de ce fichier.

Private Sub Workbook_Open()
Application.CommandBars("Choix_Sélection").Visible = True
End Sub

Dans la Macro de fermeture, j'ai ajouté :
Application.CommandBars("Choix_Sélection").Visible = False

Là encore tout va bien si je teste uniquement cette partie.

Mes soucis ont commencé lorsque j'ai compilé l'ensemble :
Quand je clique sur les boutons de ma barre d'outils, les Macros ne
fonctionnent plus correctement car elles ne font plus référence à mon
fichier original mais à celui archivé : elles ouvrent donc le fichier
archivé et comme il n'y a plus de Macro.

Pourtant les Macros de mon fichier original sont toujours correctes et
fonctionnent très bien si je ne passe pas par les boutons de ma barre.

Merci de votre aide.

Jacques



Bruno LOUIS
Le #1963599
Essaie le code suivant. Je pense qu'il pourrait facilement être améliorer
notamment en allant faire un tour du côté du site de F. SIGONNEAU
(http://frederic.sigonneau.free.fr/).
Enfin, normalement, ça marche.

Public Sub DetruitBarre(maBarre As String)
Dim tb As CommandBar
For Each tb In CommandBars
If tb.Name = maBarre Then _
Toolbars(maBarre).Delete
Next
End Sub

Public Sub CreerBarre(maBarre As String)
Dim tb As Variant
Set tb = CommandBars.Add(Name:=maBarre, Position:=msoBarFloating)

' ********* Section à répéter autant de fois qu'il y a de boutons à
créer
Set tb = CommandBars(maBarre).Controls.Add(Type:=msoControlButton)

With tb
.BeginGroup = True
.Caption = "Ici le texte de l'infobulle"
.FaceId = 195 'ici le numéro correspond au dessin à intégré
.OnAction = "maMacro"
End With
' ********* fin de section
End Sub

Public Sub maMacro()
MsgBox "Ici le code de maMacro quand je clique sur le bouton de maBarre"
End Sub


Public Sub test()
' A insérer dans le code "Workbook_Open" du module thisWorkBook
DetruitBarre "MaBarreAMoi"
CreerBarre "MaBarreAMoi"
Application.CommandBars("MaBarreAMoi").Visible = True
Application.CommandBars("MaBarreAMoi").Position = 0

End Sub

Public Sub test1()
' A insérer dans le code "Workbook_BeforeClose" du modue ThisWorkBook :
attention à bien gérer
' la non-sortie.
DetruitBarre "MaBarreAMoi"
End Sub

Bruno

"JacquesH" news:
Merci de ta réponse.

Peux-tu me donner quelques idées pour la détruire ? Et surtout comment
la
recréer ?

L'enregistreur de Macro ne veut rien savoir lorsque j'affecte les
Macros à
mes boutons.

Merci d'avance

Jacques


Bonjour Jacques,

Pour éviter ce genre de désagrément tu devrais détruire puis recréer
dynamiquement ta barre d'outils au démarrage de ton classeur.
Eventuellement
tu peux aussi la détruire à la fermeture du classeur.

Cordialement,

Bruno

"JacquesH" de
news:
Bonjour à toutes et à tous,

Je viens régulièrement sur le forum et dans ses archives pour
trouver réponse à mes problèmes (tout le code ci-après vient déjà d'ici
et j'en remercie au passage tous les contributeurs), mais là je ne
trouve rien et je me décide à demander l'avis des spécialistes.

Voici en résumé les éléments de mon problème :

J'ai une Macro à la fermeture d'un fichier qui l'archive sous un
autre nom et efface les modules et Macro de la version archivée.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Nom_Fichier As String
'Archive le fichier en cours avec un nom contenu dans la cellule A30
ActiveWorkbook.Save
Nom_Fichier = Sheets("Vérif. Nb ").Range("A30").Value
ChDir "G:\ArchivesAnnée en cours"
ActiveWorkbook.SaveAs FileName:=Nom_Fichier, _
FileFormat:=xlNormal

'Efface les modules et macros divers du fichier archivé.
Dim VBC As Object
With ActiveWorkbook.VBProject
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC
End With
ActiveWorkbook.Save
End Sub

Jusqu'à là tout va bien, le fichier archivé n'a plus les Macro et
celles de l'original fonctionnent très bien lorsque je l'ouvre à
nouveau.

J'ai voulu améliorer mon système en affichant à l'ouverture du
fichier original une barre d'outils personnalisée avec des boutons qui
font référence à des Macro de ce fichier.

Private Sub Workbook_Open()
Application.CommandBars("Choix_Sélection").Visible = True
End Sub

Dans la Macro de fermeture, j'ai ajouté :
Application.CommandBars("Choix_Sélection").Visible = False

Là encore tout va bien si je teste uniquement cette partie.

Mes soucis ont commencé lorsque j'ai compilé l'ensemble :
Quand je clique sur les boutons de ma barre d'outils, les Macros ne
fonctionnent plus correctement car elles ne font plus référence à mon
fichier original mais à celui archivé : elles ouvrent donc le fichier
archivé et comme il n'y a plus de Macro.

Pourtant les Macros de mon fichier original sont toujours correctes et
fonctionnent très bien si je ne passe pas par les boutons de ma barre.

Merci de votre aide.

Jacques








JacquesH
Le #1963596
Merci de ta réponse.

Peux-tu me donner quelques idées pour la détruire ? Et surtout comment la
recréer ?

L'enregistreur de Macro ne veut rien savoir lorsque j'affecte les Macros à
mes boutons.

Merci d'avance

Jacques


Bonjour Jacques,

Pour éviter ce genre de désagrément tu devrais détruire puis recréer
dynamiquement ta barre d'outils au démarrage de ton classeur. Eventuellement
tu peux aussi la détruire à la fermeture du classeur.

Cordialement,

Bruno

"JacquesH" news:
Bonjour à toutes et à tous,

Je viens régulièrement sur le forum et dans ses archives pour
trouver réponse à mes problèmes (tout le code ci-après vient déjà d'ici
et j'en remercie au passage tous les contributeurs), mais là je ne
trouve rien et je me décide à demander l'avis des spécialistes.

Voici en résumé les éléments de mon problème :

J'ai une Macro à la fermeture d'un fichier qui l'archive sous un
autre nom et efface les modules et Macro de la version archivée.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Nom_Fichier As String
'Archive le fichier en cours avec un nom contenu dans la cellule A30
ActiveWorkbook.Save
Nom_Fichier = Sheets("Vérif. Nb ").Range("A30").Value
ChDir "G:\ArchivesAnnée en cours"
ActiveWorkbook.SaveAs FileName:=Nom_Fichier, _
FileFormat:=xlNormal

'Efface les modules et macros divers du fichier archivé.
Dim VBC As Object
With ActiveWorkbook.VBProject
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC
End With
ActiveWorkbook.Save
End Sub

Jusqu'à là tout va bien, le fichier archivé n'a plus les Macro et
celles de l'original fonctionnent très bien lorsque je l'ouvre à
nouveau.

J'ai voulu améliorer mon système en affichant à l'ouverture du
fichier original une barre d'outils personnalisée avec des boutons qui
font référence à des Macro de ce fichier.

Private Sub Workbook_Open()
Application.CommandBars("Choix_Sélection").Visible = True
End Sub

Dans la Macro de fermeture, j'ai ajouté :
Application.CommandBars("Choix_Sélection").Visible = False

Là encore tout va bien si je teste uniquement cette partie.

Mes soucis ont commencé lorsque j'ai compilé l'ensemble :
Quand je clique sur les boutons de ma barre d'outils, les Macros ne
fonctionnent plus correctement car elles ne font plus référence à mon
fichier original mais à celui archivé : elles ouvrent donc le fichier
archivé et comme il n'y a plus de Macro.

Pourtant les Macros de mon fichier original sont toujours correctes et
fonctionnent très bien si je ne passe pas par les boutons de ma barre.

Merci de votre aide.

Jacques





JacquesH
Le #1963591
Merci beaucoup pour ton aide. Je vais essayer cela.

Bonne journée

Jacques


Essaie le code suivant. Je pense qu'il pourrait facilement être améliorer
notamment en allant faire un tour du côté du site de F. SIGONNEAU
(http://frederic.sigonneau.free.fr/).
Enfin, normalement, ça marche.

Public Sub DetruitBarre(maBarre As String)
Dim tb As CommandBar
For Each tb In CommandBars
If tb.Name = maBarre Then _
Toolbars(maBarre).Delete
Next
End Sub

Public Sub CreerBarre(maBarre As String)
Dim tb As Variant
Set tb = CommandBars.Add(Name:=maBarre, Position:=msoBarFloating)

' ********* Section à répéter autant de fois qu'il y a de boutons à
créer
Set tb = CommandBars(maBarre).Controls.Add(Type:=msoControlButton)

With tb
.BeginGroup = True
.Caption = "Ici le texte de l'infobulle"
.FaceId = 195 'ici le numéro correspond au dessin à intégré
.OnAction = "maMacro"
End With
' ********* fin de section
End Sub

Public Sub maMacro()
MsgBox "Ici le code de maMacro quand je clique sur le bouton de maBarre"
End Sub

Public Sub test()
' A insérer dans le code "Workbook_Open" du module thisWorkBook
DetruitBarre "MaBarreAMoi"
CreerBarre "MaBarreAMoi"
Application.CommandBars("MaBarreAMoi").Visible = True
Application.CommandBars("MaBarreAMoi").Position = 0

End Sub

Public Sub test1()
' A insérer dans le code "Workbook_BeforeClose" du modue ThisWorkBook :
attention à bien gérer
' la non-sortie.
DetruitBarre "MaBarreAMoi"
End Sub

Bruno

"JacquesH" news:
Merci de ta réponse.

Peux-tu me donner quelques idées pour la détruire ? Et surtout comment
la
recréer ?

L'enregistreur de Macro ne veut rien savoir lorsque j'affecte les
Macros à
mes boutons.

Merci d'avance

Jacques


Bonjour Jacques,

Pour éviter ce genre de désagrément tu devrais détruire puis recréer
dynamiquement ta barre d'outils au démarrage de ton classeur.
Eventuellement
tu peux aussi la détruire à la fermeture du classeur.

Cordialement,

Bruno

"JacquesH" de
news:
Bonjour à toutes et à tous,

Je viens régulièrement sur le forum et dans ses archives pour
trouver réponse à mes problèmes (tout le code ci-après vient déjà d'ici
et j'en remercie au passage tous les contributeurs), mais là je ne
trouve rien et je me décide à demander l'avis des spécialistes.

Voici en résumé les éléments de mon problème :

J'ai une Macro à la fermeture d'un fichier qui l'archive sous un
autre nom et efface les modules et Macro de la version archivée.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Nom_Fichier As String
'Archive le fichier en cours avec un nom contenu dans la cellule A30
ActiveWorkbook.Save
Nom_Fichier = Sheets("Vérif. Nb ").Range("A30").Value
ChDir "G:\ArchivesAnnée en cours"
ActiveWorkbook.SaveAs FileName:=Nom_Fichier, _
FileFormat:=xlNormal

'Efface les modules et macros divers du fichier archivé.
Dim VBC As Object
With ActiveWorkbook.VBProject
For Each VBC In .VBComponents
If VBC.Type = 100 Then
With VBC.CodeModule
.DeleteLines 1, .CountOfLines
.CodePane.Window.Close
End With
Else: .VBComponents.Remove VBC
End If
Next VBC
End With
ActiveWorkbook.Save
End Sub

Jusqu'à là tout va bien, le fichier archivé n'a plus les Macro et
celles de l'original fonctionnent très bien lorsque je l'ouvre à
nouveau.

J'ai voulu améliorer mon système en affichant à l'ouverture du
fichier original une barre d'outils personnalisée avec des boutons qui
font référence à des Macro de ce fichier.

Private Sub Workbook_Open()
Application.CommandBars("Choix_Sélection").Visible = True
End Sub

Dans la Macro de fermeture, j'ai ajouté :
Application.CommandBars("Choix_Sélection").Visible = False

Là encore tout va bien si je teste uniquement cette partie.

Mes soucis ont commencé lorsque j'ai compilé l'ensemble :
Quand je clique sur les boutons de ma barre d'outils, les Macros ne
fonctionnent plus correctement car elles ne font plus référence à mon
fichier original mais à celui archivé : elles ouvrent donc le fichier
archivé et comme il n'y a plus de Macro.

Pourtant les Macros de mon fichier original sont toujours correctes et
fonctionnent très bien si je ne passe pas par les boutons de ma barre.

Merci de votre aide.

Jacques










Poster une réponse
Anonyme