OVH Cloud OVH Cloud

menu dynamique

4 réponses
Avatar
JCM
Bonjour=20

et avant tout bonne ann=E9e =E0 tous

Pour moi cela commence en galere, j'ai un probleme avec la=20
cr=E9ation d'un menu dynamique:
j'ai cr=E9=E9 un menu :MnuMission avec des sousmenus :=20
MnuMission1 MnuMission2 ect..., et je voudrais que le=20
MnuMission1.caption =3D une donn=E9e extraite d'une table, et=20
ainsi de suite
Voici mon code :

Dim ADOMenu As New ADODB.Recordset
Dim ADOcn As New ADODB.Connection
Option Explicit
Private Sub Form_Load()

'creation d'un objet recordset
With ADOcn
.Provider =3D "Microsoft.Jet.OLEDB.4.0"
.ConnectionString =3D "Data Source=3D" & CheminAffaire
.CursorLocation =3D adUseClient
.Open
End With
'Requete sur les types de mission =E0 afficher dans=20
MnuMission
Set ADOMenu =3D New ADODB.Recordset
With ADOMenu
.ActiveConnection =3D ADOcn
.CursorType =3D adOpenDynamic
.Open "Select mission from affaire group by mission"
End With
'-------------------------------------
Dim Lenr As Integer
Dim LeMenuDyn As String
Dim LaMission As String
Lenr =3D 0
Do Until ADOMenu.EOF
Lenr =3D Lenr + 1
LeMenuDyn =3D "MnuMission" & CStr(Lenr)
LaMission =3D ADOMenu("mission")
LeMenuDyn.Caption =3D LaMission
ADOMenu.MoveNext
Loop

Cela BEUG sur LeMenuDyn.caption

Ou est l'erreur, merci pour vos r=E9ponses
Cordialement=20
JCM

4 réponses

Avatar
François Picalausa
Bonjour/soir,

Tu dis à VB:
Ceci est une chaine de caractère.
Donne m'en la propriété Caption.
Et comme en VB6, un type string n'a pas de propriété caption, ça foire...

Essaye ceci à la place:

Renomme MnuMission1, MnuMission2, ...
en MnuMissionIndex
avec pour chacun un index (1,2, ...)

Dans le code:
Dim Lenr As Integer
Dim LaMission As String

Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1
LaMission = ADOMenu("mission") 'récupère le texte
MnuMissionIndex(Lenr).Caption = LaMission 'l'affecte à l'item de menu
ADOMenu.MoveNext
Loop

Mais il faut que les items existent... du que tu fais un Do...Loop, rien
n'est moins probable.
Je te conseille donc de ne créer qu'une seul item ayant pour index 0 et de
modifier le code comme ceci:
Dim Lenr As Integer
Dim LaMission As String

Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1

On Error Resume Next 'pour permettre de charger un élément sur le
précédent
Load MnuMissionIndex(Lenr) 'charge le nouvel élément
MnuMissionIndex(Lenr).Visible = True 's'assure de sa visibilité

LaMission = ADOMenu("mission") 'récupère le texte
MnuMissionIndex(Lenr).Caption = LaMission 'l'affecte à l'item de menu
ADOMenu.MoveNext
Loop

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com

"JCM" a écrit dans le message de
news:007b01c3d3a2$c3f9b330$
Bonjour

et avant tout bonne année à tous

Pour moi cela commence en galere, j'ai un probleme avec la
création d'un menu dynamique:
j'ai créé un menu :MnuMission avec des sousmenus :
MnuMission1 MnuMission2 ect..., et je voudrais que le
MnuMission1.caption = une donnée extraite d'une table, et
ainsi de suite
Voici mon code :

Dim ADOMenu As New ADODB.Recordset
Dim ADOcn As New ADODB.Connection
Option Explicit
Private Sub Form_Load()

'-------------------------------------
Dim Lenr As Integer
Dim LeMenuDyn As String
Dim LaMission As String
Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1
LeMenuDyn = "MnuMission" & CStr(Lenr)
LaMission = ADOMenu("mission")
LeMenuDyn.Caption = LaMission
ADOMenu.MoveNext
Loop

Cela BEUG sur LeMenuDyn.caption

Ou est l'erreur, merci pour vos réponses
Cordialement
JCM
Avatar
JCM
Bonjour François

Merci pour ta réponse j'ai suivi ton conseil et adopté la
deuxième solution et cela marche.
Toutefois il faut mettre index 1 dans l'item créé avec
l'outil "creation de menu" sinon il affiche le premier
item avant les extractions ADO

Autre question : comment je récupère les Clicks sur les
Items pour lancer une procédure ?

Voici le code adopté :

'Construction du menu dynamique
Dim Lenr As Integer
Dim LaMission As String
Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1
On Error Resume Next 'permet de charger un élément sur le
précédent
Load MnuMissionIndex(Lenr) 'charge le nouvel élément
MnuMissionIndex(Lenr).Visible = True 'assure la visibilité
LaMission = ADOMenu("mission") 'récupère le texte
MnuMissionIndex(Lenr).Caption = LaMission 'affecte le
texte à l'Item du menu
ADOMenu.MoveNext
Loop

Merci de ta réponse
Cordialement
Jean Claude
-----Message d'origine-----
Bonjour/soir,

Tu dis à VB:
Ceci est une chaine de caractère.
Donne m'en la propriété Caption.
Et comme en VB6, un type string n'a pas de propriété


caption, ça foire...

Essaye ceci à la place:

Renomme MnuMission1, MnuMission2, ...
en MnuMissionIndex
avec pour chacun un index (1,2, ...)

Dans le code:
Dim Lenr As Integer
Dim LaMission As String

Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1
LaMission = ADOMenu("mission") 'récupère le texte
MnuMissionIndex(Lenr).Caption = LaMission 'l'affecte


à l'item de menu
ADOMenu.MoveNext
Loop

Mais il faut que les items existent... du que tu fais un


Do...Loop, rien
n'est moins probable.
Je te conseille donc de ne créer qu'une seul item ayant


pour index 0 et de
modifier le code comme ceci:
Dim Lenr As Integer
Dim LaMission As String

Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1

On Error Resume Next 'pour permettre de charger un


élément sur le
précédent
Load MnuMissionIndex(Lenr) 'charge le nouvel élément
MnuMissionIndex(Lenr).Visible = True 's'assure de sa


visibilité

LaMission = ADOMenu("mission") 'récupère le texte
MnuMissionIndex(Lenr).Caption = LaMission 'l'affecte


à l'item de menu
ADOMenu.MoveNext
Loop

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com

"JCM" a écrit dans le


message de
news:007b01c3d3a2$c3f9b330$
Bonjour

et avant tout bonne année à tous

Pour moi cela commence en galere, j'ai un probleme avec la
création d'un menu dynamique:
j'ai créé un menu :MnuMission avec des sousmenus :
MnuMission1 MnuMission2 ect..., et je voudrais que le
MnuMission1.caption = une donnée extraite d'une table, et
ainsi de suite
Voici mon code :

Dim ADOMenu As New ADODB.Recordset
Dim ADOcn As New ADODB.Connection
Option Explicit
Private Sub Form_Load()

'-------------------------------------
Dim Lenr As Integer
Dim LeMenuDyn As String
Dim LaMission As String
Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1
LeMenuDyn = "MnuMission" & CStr(Lenr)
LaMission = ADOMenu("mission")
LeMenuDyn.Caption = LaMission
ADOMenu.MoveNext
Loop

Cela BEUG sur LeMenuDyn.caption

Ou est l'erreur, merci pour vos réponses
Cordialement
JCM


.



Avatar
JCM
Bonjour François

Merci pour ta réponse j'ai suivi ton conseil et adopté la
deuxième solution et cela marche.
Toutefois il faut mettre index 1 dans l'item créé avec
l'outil "creation de menu" sinon il affiche le premier
item avant les extractions ADO

Autre question : comment je récupère les Clicks sur les
Items pour lancer une procédure ?

Voici le code adopté :

'Construction du menu dynamique
Dim Lenr As Integer
Dim LaMission As String
Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1
On Error Resume Next 'permet de charger un élément sur le
précédent
Load MnuMissionIndex(Lenr) 'charge le nouvel élément
MnuMissionIndex(Lenr).Visible = True 'assure la visibilité
LaMission = ADOMenu("mission") 'récupère le texte
MnuMissionIndex(Lenr).Caption = LaMission 'affecte le
texte à l'Item du menu
ADOMenu.MoveNext
Loop

Merci de ta réponse
Cordialement
Jean Claude
-----Message d'origine-----
Bonjour/soir,

Tu dis à VB:
Ceci est une chaine de caractère.
Donne m'en la propriété Caption.
Et comme en VB6, un type string n'a pas de propriété


caption, ça foire...

Essaye ceci à la place:

Renomme MnuMission1, MnuMission2, ...
en MnuMissionIndex
avec pour chacun un index (1,2, ...)

Dans le code:
Dim Lenr As Integer
Dim LaMission As String

Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1
LaMission = ADOMenu("mission") 'récupère le texte
MnuMissionIndex(Lenr).Caption = LaMission 'l'affecte


à l'item de menu
ADOMenu.MoveNext
Loop

Mais il faut que les items existent... du que tu fais un


Do...Loop, rien
n'est moins probable.
Je te conseille donc de ne créer qu'une seul item ayant


pour index 0 et de
modifier le code comme ceci:
Dim Lenr As Integer
Dim LaMission As String

Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1

On Error Resume Next 'pour permettre de charger un


élément sur le
précédent
Load MnuMissionIndex(Lenr) 'charge le nouvel élément
MnuMissionIndex(Lenr).Visible = True 's'assure de sa


visibilité

LaMission = ADOMenu("mission") 'récupère le texte
MnuMissionIndex(Lenr).Caption = LaMission 'l'affecte


à l'item de menu
ADOMenu.MoveNext
Loop

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com

"JCM" a écrit dans le


message de
news:007b01c3d3a2$c3f9b330$
Bonjour

et avant tout bonne année à tous

Pour moi cela commence en galere, j'ai un probleme avec la
création d'un menu dynamique:
j'ai créé un menu :MnuMission avec des sousmenus :
MnuMission1 MnuMission2 ect..., et je voudrais que le
MnuMission1.caption = une donnée extraite d'une table, et
ainsi de suite
Voici mon code :

Dim ADOMenu As New ADODB.Recordset
Dim ADOcn As New ADODB.Connection
Option Explicit
Private Sub Form_Load()

'-------------------------------------
Dim Lenr As Integer
Dim LeMenuDyn As String
Dim LaMission As String
Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1
LeMenuDyn = "MnuMission" & CStr(Lenr)
LaMission = ADOMenu("mission")
LeMenuDyn.Caption = LaMission
ADOMenu.MoveNext
Loop

Cela BEUG sur LeMenuDyn.caption

Ou est l'erreur, merci pour vos réponses
Cordialement
JCM


.



Avatar
JCM
Excuses François

tu m'avais déjà donné la réponse précédemment :

Private Sub MnuMissionIndex_Click(Index As Integer)
'affiche l'Item.caption sélectionné
MsgBox "Vous avez cliqué sur : " & MnuMissionIndex
(Index).Caption
End Sub

Et cela marche, merci beaucoup de ton aide
Cordialement
Jean Claude
-----Message d'origine-----
Bonjour/soir,

Tu dis à VB:
Ceci est une chaine de caractère.
Donne m'en la propriété Caption.
Et comme en VB6, un type string n'a pas de propriété


caption, ça foire...

Essaye ceci à la place:

Renomme MnuMission1, MnuMission2, ...
en MnuMissionIndex
avec pour chacun un index (1,2, ...)

Dans le code:
Dim Lenr As Integer
Dim LaMission As String

Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1
LaMission = ADOMenu("mission") 'récupère le texte
MnuMissionIndex(Lenr).Caption = LaMission 'l'affecte


à l'item de menu
ADOMenu.MoveNext
Loop

Mais il faut que les items existent... du que tu fais un


Do...Loop, rien
n'est moins probable.
Je te conseille donc de ne créer qu'une seul item ayant


pour index 0 et de
modifier le code comme ceci:
Dim Lenr As Integer
Dim LaMission As String

Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1

On Error Resume Next 'pour permettre de charger un


élément sur le
précédent
Load MnuMissionIndex(Lenr) 'charge le nouvel élément
MnuMissionIndex(Lenr).Visible = True 's'assure de sa


visibilité

LaMission = ADOMenu("mission") 'récupère le texte
MnuMissionIndex(Lenr).Caption = LaMission 'l'affecte


à l'item de menu
ADOMenu.MoveNext
Loop

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com

"JCM" a écrit dans le


message de
news:007b01c3d3a2$c3f9b330$
Bonjour

et avant tout bonne année à tous

Pour moi cela commence en galere, j'ai un probleme avec la
création d'un menu dynamique:
j'ai créé un menu :MnuMission avec des sousmenus :
MnuMission1 MnuMission2 ect..., et je voudrais que le
MnuMission1.caption = une donnée extraite d'une table, et
ainsi de suite
Voici mon code :

Dim ADOMenu As New ADODB.Recordset
Dim ADOcn As New ADODB.Connection
Option Explicit
Private Sub Form_Load()

'-------------------------------------
Dim Lenr As Integer
Dim LeMenuDyn As String
Dim LaMission As String
Lenr = 0
Do Until ADOMenu.EOF
Lenr = Lenr + 1
LeMenuDyn = "MnuMission" & CStr(Lenr)
LaMission = ADOMenu("mission")
LeMenuDyn.Caption = LaMission
ADOMenu.MoveNext
Loop

Cela BEUG sur LeMenuDyn.caption

Ou est l'erreur, merci pour vos réponses
Cordialement
JCM


.