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 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352
| Sub creation_menu()
' Définition d'une table comportant les paramètres des choix
Dim W_Table_Menu_Level(1 To 30) As Variant
Dim W_Table_Menu_Caption(1 To 30) As Variant
Dim W_Table_Menu_PositionouMacro(1 To 30) As Variant
Dim W_Table_Menu_Divider(1 To 30) As Variant
Dim W_Table_Menu_FaceID(1 To 30) As Variant
'
Dim W_I As Integer
Dim W_J As Integer
W_I = 1
W_Table_Menu_Caption(W_I) = "MENU GENERAL"
W_Table_Menu_Level(W_I) = "1"
W_Table_Menu_PositionouMacro(W_I) = "10"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 1"
W_Table_Menu_Level(W_I) = "2"
W_Table_Menu_PositionouMacro(W_I) = ""
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 11"
W_Table_Menu_Level(W_I) = "3"
W_Table_Menu_PositionouMacro(W_I) = ""
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 111"
W_Table_Menu_Level(W_I) = "4"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = "138"
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 112"
W_Table_Menu_Level(W_I) = "4"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = "47"
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 113"
W_Table_Menu_Level(W_I) = "4"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = "160"
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 114"
W_Table_Menu_Level(W_I) = "4"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = "VRAI"
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 12"
W_Table_Menu_Level(W_I) = "3"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 121"
W_Table_Menu_Level(W_I) = "4"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 13"
W_Table_Menu_Level(W_I) = "3"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = "VRAI"
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 131"
W_Table_Menu_Level(W_I) = "4"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 132"
W_Table_Menu_Level(W_I) = "4"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 133"
W_Table_Menu_Level(W_I) = "4"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 134"
W_Table_Menu_Level(W_I) = "4"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 135"
W_Table_Menu_Level(W_I) = "4"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 2"
W_Table_Menu_Level(W_I) = "2"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 3"
W_Table_Menu_Level(W_I) = "2"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = "VRAI"
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 31"
W_Table_Menu_Level(W_I) = "3"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 4"
W_Table_Menu_Level(W_I) = "2"
W_Table_Menu_PositionouMacro(W_I) = ""
W_Table_Menu_Divider(W_I) = "VRAI"
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 41"
W_Table_Menu_Level(W_I) = "3"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 42"
W_Table_Menu_Level(W_I) = "3"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 5"
W_Table_Menu_Level(W_I) = "2"
W_Table_Menu_PositionouMacro(W_I) = ""
W_Table_Menu_Divider(W_I) = "VRAI"
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 51"
W_Table_Menu_Level(W_I) = "3"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
'
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = "Menu 52"
W_Table_Menu_Level(W_I) = "3"
W_Table_Menu_PositionouMacro(W_I) = "DummyMacro"
W_Table_Menu_Divider(W_I) = "VRAI"
W_Table_Menu_FaceID(W_I) = ""
'
If W_I <= 30 Then
W_I = W_I + 1
W_Table_Menu_Caption(W_I) = ""
W_Table_Menu_Level(W_I) = ""
W_Table_Menu_PositionouMacro(W_I) = ""
W_Table_Menu_Divider(W_I) = ""
W_Table_Menu_FaceID(W_I) = ""
End If
'
'
' Nom de la feuille
Workbooks.Add
Sheets(1).Select
Sheets(1).Name = "MenuSheet"
Sheets("MenuSheet").Select
' Création des entêtes du tableau servant à créer le menu
Range("A1").Select
ActiveCell.FormulaR1C1 = "Level"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Caption"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Position/Macro"
Range("D1").Select
ActiveCell.FormulaR1C1 = "Divider"
Range("E1").Select
ActiveCell.FormulaR1C1 = "FaceID"
'
' Remplissage des cellules
'
W_J = 1
For W_I = 1 To 30
W_J = W_J + 1
Range("A" & W_J).Select
Range("A" & W_J).Value = W_Table_Menu_Level(W_I)
Range("B" & W_J).Select
Range("B" & W_J).Value = W_Table_Menu_Caption(W_I)
Range("C" & W_J).Select
Range("C" & W_J).Value = W_Table_Menu_PositionouMacro(W_I)
Range("D" & W_J).Select
Range("D" & W_J).Value = W_Table_Menu_Divider(W_I)
Range("E" & W_J).Select
Range("E" & W_J).Value = W_Table_Menu_FaceID(W_I)
Next
'
' Mise en forme des entêtes de colonnes et des colonnes
Range("A1:E1").Select
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Columns("A:E").Select
Selection.Columns.AutoFit
'
' Création du menu
'
' This sub should be executed when the workbook is opened.
' NOTE: There is no error handling in this subroutine
Dim MenuSheet As Worksheet
Dim MenuObject As CommandBarPopup
Dim MenuItem As Object
Dim SubMenuItem As CommandBarButton
Dim Row As Integer
Dim MenuLevel, NextLevel, PositionOrMacro, Caption, Divider, FaceId
''''''''''''''''''''''''''''''''''''''''''''''''''''
' Location for menu data
Set MenuSheet = Sheets("MenuSheet")
''''''''''''''''''''''''''''''''''''''''''''''''''''
' Make sure the menus aren't duplicated
Call DeleteMenu
' Initialize the row counter
Row = 2
' Add the menus, menu items and submenu items using
' data stored on MenuSheet
Do Until IsEmpty(MenuSheet.Cells(Row, 1))
With MenuSheet
MenuLevel = .Cells(Row, 1)
Caption = .Cells(Row, 2)
PositionOrMacro = .Cells(Row, 3)
Divider = .Cells(Row, 4)
FaceId = .Cells(Row, 5)
NextLevel = .Cells(Row + 1, 1)
End With
'
Select Case MenuLevel
'
Case 1 ' A Menu
' Add the top-level menu to the Worksheet CommandBar
Set MenuObject = Application.CommandBars(1). _
Controls.Add(Type:=msoControlPopup, _
Before:=PositionOrMacro, _
Temporary:=True)
MenuObject.Caption = Caption
Case 2 ' A Menu Item
If NextLevel = 3 Or 4 Then
Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
Else
Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
MenuItem.OnAction = PositionOrMacro
End If
MenuItem.Caption = Caption
If FaceId <> "" Then MenuItem.FaceId = FaceId
If Divider Then MenuItem.BeginGroup = True
'
Case 3 ' A SubMenu Item
If NextLevel = 4 Then
Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
Else
Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
MenuItem.OnAction = PositionOrMacro
End If
MenuItem.Caption = Caption
If FaceId <> "" Then SubMenuItem.FaceId = FaceId
If Divider Then MenuItem.BeginGroup = True
Case 4 ' A SubSubMenu Item
Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
SubMenuItem.Caption = Caption
SubMenuItem.OnAction = PositionOrMacro
If FaceId <> "" Then SubMenuItem.FaceId = FaceId
If Divider Then SubMenuItem.BeginGroup = True
End Select
Row = Row + 1
Loop
'
'' Call Fermeture_Feuille_Menu_Général
'
'
End Sub
Sub DeleteMenu()
' This sub should be executed when the workbook is closed
' Deletes the Menus
Dim MenuSheet As Worksheet
Dim Row As Integer
Dim Caption As String
On Error Resume Next
Set MenuSheet = Sheets("MenuSheet")
Row = 2
Do Until IsEmpty(MenuSheet.Cells(Row, 1))
If MenuSheet.Cells(Row, 1) = 1 Then
Caption = MenuSheet.Cells(Row, 2)
Application.CommandBars(1).Controls(Caption).Delete
End If
Row = Row + 1
Loop
On Error GoTo 0
End Sub
Sub Fermeture_Feuille_Menu_Général()
'
'
ActiveWorkbook.Close SaveChanges:=False
'
End Sub
'
'
Sub DummyMacro()
MsgBox "This is a do-nothing macro."
End Sub |
Partager