Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb menu dynamique

2 réponses
Avatar
JCM
Bonjour a tous

je cr=E9=E9 un menu dynamique a partir d'une requete sur une=20
table Access, comme ci-dessous, pas de probl=E8me

'Construction du menu dynamique Ville
Dim LenrVille As Integer
Dim Laville As String
LenrVille =3D 0
Do Until ADOrst.EOF
LenrVille =3D LenrVille + 1
On Error Resume Next 'permet de charger un =E9l=E9ment sur le=20
pr=E9c=E9dent
Load MnuVilleIndex(LenrVille) 'charge le nouvel =E9l=E9ment
MnuVilleIndex(LenrVille).Visible =3D True 'assure la=20
visibilit=E9
Laville =3D ADOrst("nomcom") 'r=E9cup=E8re le texte
MnuVilleIndex(LenrVille).Caption =3D Laville 'affecte le=20
texte =E0 l'Item du menu
ADOrst.MoveNext
'If ADOrst.EOF =3D True Then
'LenrVille =3D LenrVille + 1
'Load MnuVilleIndex(LenrVille) 'charge le nouvel=20
=E9l=E9ment
'MnuVilleIndex(LenrVille).Visible
'MnuVilleIndex(LenrVille).Caption =3D "Autre ville..."
Loop

Je voudrais ajouter une ligne "Autre ville..."
et comme je l'ai ecrit cela Beug

Merci de vos r=E9ponses
Cordialement
JCM

2 réponses

Avatar
JCM
Re bonjour

J'ai trouvé la réponse :

'Construction du menu dynamique Ville
Dim LenrVille As Integer
Dim Laville As String
LenrVille = 0
Do Until ADOrst.EOF
LenrVille = LenrVille + 1
On Error Resume Next 'permet de charger un élément sur le
précédent
Load MnuVilleIndex(LenrVille) 'charge le nouvel élément
MnuVilleIndex(LenrVille).Visible = True 'assure la
visibilité
Laville = ADOrst("nomcom") 'récupère le texte
MnuVilleIndex(LenrVille).Caption = Laville 'affecte le
texte à l'Item du menu
ADOrst.MoveNext
If ADOrst.EOF = True Then
LenrVille = LenrVille + 1
Load MnuVilleIndex(LenrVille) 'charge le nouvel élément
MnuVilleIndex(LenrVille).Caption = "Autre ville..."
End If
Loop

Merci pour votre aide
Cordialement
Jean Claude
-----Message d'origine-----
Bonjour a tous

je créé un menu dynamique a partir d'une requete sur une
table Access, comme ci-dessous, pas de problème

'Construction du menu dynamique Ville
Dim LenrVille As Integer
Dim Laville As String
LenrVille = 0
Do Until ADOrst.EOF
LenrVille = LenrVille + 1
On Error Resume Next 'permet de charger un élément sur


le
précédent
Load MnuVilleIndex(LenrVille) 'charge le nouvel élément
MnuVilleIndex(LenrVille).Visible = True 'assure la
visibilité
Laville = ADOrst("nomcom") 'récupère le texte
MnuVilleIndex(LenrVille).Caption = Laville 'affecte le
texte à l'Item du menu
ADOrst.MoveNext
'If ADOrst.EOF = True Then
'LenrVille = LenrVille + 1
'Load MnuVilleIndex(LenrVille) 'charge le nouvel
élément
'MnuVilleIndex(LenrVille).Visible
'MnuVilleIndex(LenrVille).Caption = "Autre ville..."
Loop

Je voudrais ajouter une ligne "Autre ville..."
et comme je l'ai ecrit cela Beug

Merci de vos réponses
Cordialement
JCM
.



Avatar
Zoury
Salut Jean-Claude! :O)

Do Until ....
<BIG SNIP>
ADOrst.MoveNext
If ADOrst.EOF = True Then
LenrVille = LenrVille + 1
Load MnuVilleIndex(LenrVille) 'charge le nouvel élément
MnuVilleIndex(LenrVille).Caption = "Autre ville..."
End If
Loop



Je te recommende de sortir ce If de la boucle. Tu exécuteras *toujours* ce
bout de code et ce *à la fin* de la boucle. Ça n'est pas conditionel, alors
autant le sortir de le boucle et ne pas mettre de condition. Dis toi qu'à
chaque itération de la boucle, ton code testera la condition ( If ADOrst.EOF
= True Then) inutilement.

Comme ceci :
'***
Do Until ..
' ton code
Loop
If ADOrst.EOF = True Then
LenrVille = LenrVille + 1
Load MnuVilleIndex(LenrVille) 'charge le nouvel élément
MnuVilleIndex(LenrVille).Caption = "Autre ville..."
End If
'***


Maintenant, si on fait un peu de "refactoring" comme on appelle dans le
jargon, on pourrait faire un méthode avec ces lignes de codes :
'***
LenrVille = LenrVille + 1
Load MnuVilleIndex(LenrVille) 'charge le nouvel élément
MnuVilleIndex(LenrVille).Caption = "Autre ville..."
'***
car elles reviennent régulièrement et forme une action défini, soit
d'ajouter un menu.
tu pourrais avoir quelque chose comme ceci par exemple :
'***
Private Sub AddMenu(ByRef Caption As String, Optional ByRef NewMenu As
Boolean = False)
Static lIndex As Long
If (NewMenu) Then
lIndex = 1
Else
lIndex = lIndex + 1
End If
Load MnuVilleIndex(lIndex )
MnuVilleIndex(lIndex ).Caption = Caption
End Sub
'***

aussi cette ligne est inutile :
'***
LenrVille = 0
'***
car VB initialise les variables automatiquement et donc LenrVille vaut déjà
0.


Tu obtiendrais donc ceci :
'***
' on initialise la trappe en dehors de la boucle.
' mais si tu peux ne pas le mettre
' du tout ce serait beaucoup mieux... ;O)
On Error Resume Next
Do Until ADOrst.EOF
Call AddMenu(ADOrst("nomcom"), True)
Call ADOrst.MoveNext
Loop
Call AddMenu("Autre ville...")
'***


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/