OVH Cloud OVH Cloud

Macro d'excel 2003 en visual basic

2 réponses
Avatar
Alain
Bonjour,
Pour les besoins d'une application de gestion de "Tournoi de Bridge" (calcul
de résultats, classement, etc...), j'ai créé un menu personnalisé comportant
une quinzaine de commandes (chacune correspond à une formule de tournoi :
nombre de tables, nombre d'équipes, nombre de donnes, etc...).
Je voudrais créer une macro me permettant de récupérer le nom de cette macro
(nom du bouton par ex.) tel qu'il s'affiche dans mon menu déroulant pour
ensuite appeler une sub-routine correspondant à la formule choisie.
Actuellement, j'ai résolu ce pb en écrivant autant de sub-routines que de
formules présentes dans mon menu déroulant ; ceci marche bien mais conduit à
un module assez lourd qu'il doit y avoir moyen d'alléger.
J'ai pensé à la commande "Case" mais je bute sur le pb du renvoi du nom de
la macro dans une routine.
Merci d'avance de toute suggestion.

2 réponses

Avatar
Mousnynao
Bonjour,

Pour lire les macros d'un classeur, vous avez besoin d'une référence
complémentaire !
Microsoft Visual Basic for Applications Extensibility

voici un exemple de classeur
http://www.excel-downloads.com/telechargements/file/vizioxla/435.htm

qui montre comment charger la référence si cell-ci est absente.

vous y trouverez aussi du code qui copy des macros dans un textbox.

mousnynao


Bonjour,
Pour les besoins d'une application de gestion de "Tournoi de Bridge" (calcul
de résultats, classement, etc...), j'ai créé un menu personnalisé comportant
une quinzaine de commandes (chacune correspond à une formule de tournoi :
nombre de tables, nombre d'équipes, nombre de donnes, etc...).
Je voudrais créer une macro me permettant de récupérer le nom de cette macro
(nom du bouton par ex.) tel qu'il s'affiche dans mon menu déroulant pour
ensuite appeler une sub-routine correspondant à la formule choisie.
Actuellement, j'ai résolu ce pb en écrivant autant de sub-routines que de
formules présentes dans mon menu déroulant ; ceci marche bien mais conduit à
un module assez lourd qu'il doit y avoir moyen d'alléger.
J'ai pensé à la commande "Case" mais je bute sur le pb du renvoi du nom de
la macro dans une routine.
Merci d'avance de toute suggestion.


Avatar
Mousnynao
plus spécifiquement, je crois que ce serait dans cette section :

Function ScanListeSousMenus()

Dim OptionMenu As Variant
Dim CtrlMenu As Variant
Dim MenuItem As Variant
Dim Cmpt As Long
Dim NomMenu As String
Dim Feuille As String

On Error Resume Next

Application.ScreenUpdating = False
Feuille = ActiveSheet.Name
Sheets("ListeSousMenus").Select

NomMenu = InputBox("Nom du menu : ", "Choix du sous-menu à répertorié",
"Menu des Listes")

Set OptionMenu = CommandBars(1).Controls
Set CtrlMenu = OptionMenu(NomMenu)

Cells.Clear

With ActiveSheet
.Rows(1).Font.Bold = True
.Rows(1).Font.Size = 9
.Range("A1:D1").Value = Array("MENU", "SOUS-MENU", "ID", "Icon ID")
Cmpt = 1
For Each MenuItem In CtrlMenu.Controls
ActiveCell.Offset(Cmpt, 0).Value = CtrlMenu.Caption
ActiveCell.Offset(Cmpt, 1).Value = MenuItem.Caption
ActiveCell.Offset(Cmpt, 2).Value = MenuItem.ID
ActiveCell.Offset(Cmpt, 3).Value = MenuItem.FaceId
ActiveCell.Offset(Cmpt, 4).Value = MenuItem.OnAction
Cmpt = (Cmpt + 1)
Next MenuItem
.Range("A1").CurrentRegion.Columns.AutoFit
End With
Columns("C:D").HorizontalAlignment = xlCenter


Sheets(Feuille).Select
Application.ScreenUpdating = True
Message = "Voir la feuille ListeSousMenus"
MsgBox FINAL & vbCrLf & vbCrLf & Message

End Function
'

La ligne [ActiveCell.Offset(Cmpt, 1).Value = MenuItem.Caption] donne le nom
dans le menu et la ligne [ActiveCell.Offset(Cmpt, 4).Value =
MenuItem.OnAction]
fournit le nom d'appel de la routine.

Mousnynao


Bonjour,

Pour lire les macros d'un classeur, vous avez besoin d'une référence
complémentaire !
Microsoft Visual Basic for Applications Extensibility

voici un exemple de classeur
http://www.excel-downloads.com/telechargements/file/vizioxla/435.htm

qui montre comment charger la référence si cell-ci est absente.

vous y trouverez aussi du code qui copy des macros dans un textbox.

mousnynao


Bonjour,
Pour les besoins d'une application de gestion de "Tournoi de Bridge" (calcul
de résultats, classement, etc...), j'ai créé un menu personnalisé comportant
une quinzaine de commandes (chacune correspond à une formule de tournoi :
nombre de tables, nombre d'équipes, nombre de donnes, etc...).
Je voudrais créer une macro me permettant de récupérer le nom de cette macro
(nom du bouton par ex.) tel qu'il s'affiche dans mon menu déroulant pour
ensuite appeler une sub-routine correspondant à la formule choisie.
Actuellement, j'ai résolu ce pb en écrivant autant de sub-routines que de
formules présentes dans mon menu déroulant ; ceci marche bien mais conduit à
un module assez lourd qu'il doit y avoir moyen d'alléger.
J'ai pensé à la commande "Case" mais je bute sur le pb du renvoi du nom de
la macro dans une routine.
Merci d'avance de toute suggestion.