Bonjour,
j'ai un problème d'affichage de menu, c'est la première fois que j'en fait
un tout seul et ça marche pas quelqu'un peut-il m'aider à résoudre le
problème d'affichage?
les 3 menus restent grisés ???
merci
voici ce que j'ai mis dans un module1
Public Menuligne1, MenuLigne2, MenuLigne3, SousMenu31, SousMenu32 As
CommandBarControl
Sub AnnuleMenu()
CommandBars(1).Reset
CommandBars(2).Reset
CommandBars(3).Reset
End Sub
Sub AjoutMenu()
' Réinitialise la barre de commandes "Menu Barre"
CommandBars(1).Reset
' Ajout du menu "OLERON" à la fin de la barre "Menu Barre"
' et de ses articles et sous-articles
Set Menu = CommandBars(1).Controls.Add(Type:=msoControlPopup)
Menu.Caption = "&OLERON"
Set Menuligne1 = Menu.Controls.Add(Type:=msoControlButton)
Menuligne1.Caption = "MISE EN FORME"
Menuligne1.OnAction = "MISENFORME" 'macro associée
Menuligne1.Enabled = False
Menuligne1.FaceId = 343
Set MenuLigne2 = Menu.Controls.Add(Type:=msoControlButton)
MenuLigne2.Caption = "REMISE A ZERO"
MenuLigne2.OnAction = "efface" 'nom de la macro associée
MenuLigne2.Enabled = False
MenuLigne2.FaceId = 343
Set MenuLigne3 = Menu.Controls.Add(Type:=msoControlPopup)
MenuLigne3.Caption = "IMPRIME"
Set SousMenu31 = MenuLigne3.Controls.Add(Type:=msoControlButton)
SousMenu31.Caption = "format A3"
SousMenu31.OnAction = "imprimea3" 'nom à donner a la macro
SousMenu31.FaceId = 210
Set SousMenu32 = MenuLigne3.Controls.Add(Type:=msoControlButton)
SousMenu32.Caption = "format A4"
SousMenu32.OnAction = "imprimea4" 'nom a donner a la macro
SousMenu32.FaceId = 211
MenuLigne3.Enabled = False
' ----------- Ajout d'une ligne de séparation avant l'article 3
MenuLigne3.BeginGroup = True
End Sub
dans le workbook j'ai mis ceci
Dim modif As Boolean
'déclaration de la macro modif
Private Sub Workbook_Open()
AjoutMenu
Sheets("OLERON").Activate
modif = False
'dès qu'il y a modif
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' If modif = True Then
' Sheets("Saisie").Range("p1").Value = "Modif le " & Format(Date, _
'"dd/mm/yyyy") & " " & Format(Time, "hh:mm")
'c'est là que la date de modif s'affiche
'End If
AnnuleMenu 'important pour que le menu apparaisse que dans ce document
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
modif = True
End Sub
sur l'onglet OLERON ceci
Private Sub Worksheet_Activate()
Menuligne1.Enabled = True
MenuLigne2.Enabled = True
MenuLigne3.Enabled = True
Range("a3").Activate
End Sub
| La présence de On error resume next dans cette procédure, c'était | que la procédure se plante,
cette ligne devrait se lire ainsi :
La présence de On error resume next dans cette procédure, c'était pour empêcher que la procédure se plante...
francois45
re bonsoir michel,
je n'ai pas tout compris sur On error resume next mais apparemment avec une commande contenant des sous menus il n'est pas possible d'afficher de petits icones ...(si je résume) ce n'est pas grave c'était juste pour la vue.
je te remercie beaucoup de ton aide car sans toi j'aurais piétiné avec mes menus qui ne s'affichaient pas, j'essayais de bidouiller sans vraiment comprendre ce que faisais. super la procédure pour aller chercher les FaceId je la garde précieusement tout comme ta façon de mettre des menus, ça me resservira, c'est sure !!
je n'ai pas envoyé la procédure de mise en page pour que tu la corrige mais la dernière fois que j'avais fait un programme, et en le soumettant (il fallait supprimer des lignes en fonction de plusieurs critères soit une centaine), ce que j'avais écrit critère par critère (400 ou 500 lignes) pour supprimer chaques lignes sur ma feuille excel avait été résumé en quelques lignes (une 30aine) et je trouve ça impressionnant, la procédure était très courte et hyper rapide...j'admire, c'est un art, on progresse pas à pas, mais même avec un bon bouquin le langage VBA reste assez obscure pour les non initiés comme moi, même avec de la bonne volonté et de l'obstination, ce qui parrait évident à certains ne saute pas du tout aux yeux aux autres...
encore merci,
François.
re bonsoir michel,
je n'ai pas tout compris sur On error resume next mais apparemment avec une
commande contenant des sous menus il n'est pas possible d'afficher de petits
icones ...(si je résume) ce n'est pas grave c'était juste pour la vue.
je te remercie beaucoup de ton aide car sans toi j'aurais piétiné avec mes
menus qui ne s'affichaient pas, j'essayais de bidouiller sans vraiment
comprendre ce que faisais.
super la procédure pour aller chercher les FaceId je la garde précieusement
tout comme ta façon de mettre des menus, ça me resservira, c'est sure !!
je n'ai pas envoyé la procédure de mise en page pour que tu la corrige mais
la dernière fois que j'avais fait un programme, et en le soumettant (il
fallait supprimer des lignes en fonction de plusieurs critères soit une
centaine), ce que j'avais écrit critère par critère (400 ou 500 lignes) pour
supprimer chaques lignes sur ma feuille excel avait été résumé en quelques
lignes (une 30aine) et je trouve ça impressionnant, la procédure était très
courte et hyper rapide...j'admire, c'est un art, on progresse pas à pas,
mais même avec un bon bouquin le langage VBA reste assez obscure pour les
non initiés comme moi, même avec de la bonne volonté et de l'obstination,
ce qui parrait évident à certains ne saute pas du tout aux yeux aux
autres...
je n'ai pas tout compris sur On error resume next mais apparemment avec une commande contenant des sous menus il n'est pas possible d'afficher de petits icones ...(si je résume) ce n'est pas grave c'était juste pour la vue.
je te remercie beaucoup de ton aide car sans toi j'aurais piétiné avec mes menus qui ne s'affichaient pas, j'essayais de bidouiller sans vraiment comprendre ce que faisais. super la procédure pour aller chercher les FaceId je la garde précieusement tout comme ta façon de mettre des menus, ça me resservira, c'est sure !!
je n'ai pas envoyé la procédure de mise en page pour que tu la corrige mais la dernière fois que j'avais fait un programme, et en le soumettant (il fallait supprimer des lignes en fonction de plusieurs critères soit une centaine), ce que j'avais écrit critère par critère (400 ou 500 lignes) pour supprimer chaques lignes sur ma feuille excel avait été résumé en quelques lignes (une 30aine) et je trouve ça impressionnant, la procédure était très courte et hyper rapide...j'admire, c'est un art, on progresse pas à pas, mais même avec un bon bouquin le langage VBA reste assez obscure pour les non initiés comme moi, même avec de la bonne volonté et de l'obstination, ce qui parrait évident à certains ne saute pas du tout aux yeux aux autres...
encore merci,
François.
MichDenis
Je me suis laissé tenter par l'exercice :
J'ai scindé ta procédure en 3, elle est plus lisible.
Tu n'as qu'à lancer la procédure "Mise en forme "
Tu devrais avoir un certain nombre de retouches à faire ! L'enregistreur de macro génère beaucoup de code inutile et à certains moments, ce n'est pas évident de déceler ce que l'auteur désire faire via le code affiché.
With Range("A2:V3").Interior .ColorIndex = 37 .Pattern = xlSolid End With With Range("A2:A3") .Merge .HorizontalAlignment = xlCenter .Copy End With Range("M2").PasteSpecial Paste:=xlPasteFormats Range("V2").PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False
Range("L:L,S:S").HorizontalAlignment = xlCenter Range("N2") = "Compo" With Range("G2:L2") .Merge .HorizontalAlignment = xlCenter End With Range("O2").HorizontalAlignment = xlCenter Range("A2:V3").Font.Bold = True 'ligne et police With Cells With .Font .Name = "Arial" .Size = 8 End With .RowHeight = 9.75 End With ' Impression Forme A4 Call Mise_en_Page_A4 Application.ScreenUpdating = True End Sub
J'ai scindé ta procédure en 3, elle est plus lisible.
Tu n'as qu'à lancer la procédure "Mise en forme "
Tu devrais avoir un certain nombre de retouches à faire !
L'enregistreur de macro génère beaucoup de code inutile
et à certains moments, ce n'est pas évident de déceler
ce que l'auteur désire faire via le code affiché.
With Range("A2:V3").Interior
.ColorIndex = 37
.Pattern = xlSolid
End With
With Range("A2:A3")
.Merge
.HorizontalAlignment = xlCenter
.Copy
End With
Range("M2").PasteSpecial Paste:=xlPasteFormats
Range("V2").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
Range("L:L,S:S").HorizontalAlignment = xlCenter
Range("N2") = "Compo"
With Range("G2:L2")
.Merge
.HorizontalAlignment = xlCenter
End With
Range("O2").HorizontalAlignment = xlCenter
Range("A2:V3").Font.Bold = True
'ligne et police
With Cells
With .Font
.Name = "Arial"
.Size = 8
End With
.RowHeight = 9.75
End With
' Impression Forme A4
Call Mise_en_Page_A4
Application.ScreenUpdating = True
End Sub
J'ai scindé ta procédure en 3, elle est plus lisible.
Tu n'as qu'à lancer la procédure "Mise en forme "
Tu devrais avoir un certain nombre de retouches à faire ! L'enregistreur de macro génère beaucoup de code inutile et à certains moments, ce n'est pas évident de déceler ce que l'auteur désire faire via le code affiché.
With Range("A2:V3").Interior .ColorIndex = 37 .Pattern = xlSolid End With With Range("A2:A3") .Merge .HorizontalAlignment = xlCenter .Copy End With Range("M2").PasteSpecial Paste:=xlPasteFormats Range("V2").PasteSpecial Paste:=xlPasteFormats Application.CutCopyMode = False
Range("L:L,S:S").HorizontalAlignment = xlCenter Range("N2") = "Compo" With Range("G2:L2") .Merge .HorizontalAlignment = xlCenter End With Range("O2").HorizontalAlignment = xlCenter Range("A2:V3").Font.Bold = True 'ligne et police With Cells With .Font .Name = "Arial" .Size = 8 End With .RowHeight = 9.75 End With ' Impression Forme A4 Call Mise_en_Page_A4 Application.ScreenUpdating = True End Sub