OVH Cloud OVH Cloud

Gestion d'un groupe de boutons

4 réponses
Avatar
RENAUD Eric
Bonjour,

Sur un formulaire j'ai un certain nombre de boutons correspondant chacun à
une lettre de l'alphabet.
Dans Excel, j'ai réussi à gérer cela avec un module de classe ce qui réduit
énormément le code.

Comment faire cela avec VB ?

Mes boutons s'intitule CmdA, cmdB, cmdC, etc...
-----------------------------------------------------------
Si cela peut vous aider voici le code utilisé avec Excel

Private Sub UserForm_Initialize()
Dim Nb As Integer, Ctrl As Control
Nb = 0
For Each Ctrl In frmTelephone.Controls
If TypeName(Ctrl) = "CommandButton" Then
If Ctrl.Name <> "CmdFermer" Then
Nb = Nb + 1
ReDim Preserve Boutons(1 To Nb)
Set Boutons(Nb).GroupeBouton = Ctrl
End If
End If
Ens Sub

Le module de classe
Public WithEvents GroupeBouton As Msforms.CommandButton
Private Sub GroupeBouton_Click()
' Récupère la lettre correspondant au bouton cliqué
Critere = GroupeBouton.Caption & "*"
Msgbox Critere
End Sub

4 réponses

Avatar
jc2nantes
tu appelles tes boutons :

cmd(65), cmd(66), cmd(67)... jusqu'à cmd(90)

pour récuperer, sur l'évenement click de tes boutons (il est commun
puisqu'il s'agit d'un groupe d'objet)

critere = chr(index)

et oui l'index correspond à une valeur ascii...

jc



"RENAUD Eric" a écrit dans le message de news:

Bonjour,

Sur un formulaire j'ai un certain nombre de boutons correspondant chacun à
une lettre de l'alphabet.
Dans Excel, j'ai réussi à gérer cela avec un module de classe ce qui


réduit
énormément le code.

Comment faire cela avec VB ?

Mes boutons s'intitule CmdA, cmdB, cmdC, etc...
-----------------------------------------------------------
Si cela peut vous aider voici le code utilisé avec Excel

Private Sub UserForm_Initialize()
Dim Nb As Integer, Ctrl As Control
Nb = 0
For Each Ctrl In frmTelephone.Controls
If TypeName(Ctrl) = "CommandButton" Then
If Ctrl.Name <> "CmdFermer" Then
Nb = Nb + 1
ReDim Preserve Boutons(1 To Nb)
Set Boutons(Nb).GroupeBouton = Ctrl
End If
End If
Ens Sub

Le module de classe
Public WithEvents GroupeBouton As Msforms.CommandButton
Private Sub GroupeBouton_Click()
' Récupère la lettre correspondant au bouton cliqué
Critere = GroupeBouton.Caption & "*"
Msgbox Critere
End Sub





Avatar
Patrice Henrio
On peut aussi passer en revue la collection des controles de la feuille et
traiter ceux de caption Cmd?

For each control in form.controls
If left$(control.Caption;3)="Cmd" then
next

C'est un peu rapide, il faut vérifier control est bien un commandButton, ou
au moins que la propriété caption existe.





"jc2nantes" a écrit dans le message de news:
4242f2dd$0$1556$
tu appelles tes boutons :

cmd(65), cmd(66), cmd(67)... jusqu'à cmd(90)

pour récuperer, sur l'évenement click de tes boutons (il est commun
puisqu'il s'agit d'un groupe d'objet)

critere = chr(index)

et oui l'index correspond à une valeur ascii...

jc



"RENAUD Eric" a écrit dans le message de news:

Bonjour,

Sur un formulaire j'ai un certain nombre de boutons correspondant chacun
à
une lettre de l'alphabet.
Dans Excel, j'ai réussi à gérer cela avec un module de classe ce qui


réduit
énormément le code.

Comment faire cela avec VB ?

Mes boutons s'intitule CmdA, cmdB, cmdC, etc...
-----------------------------------------------------------
Si cela peut vous aider voici le code utilisé avec Excel

Private Sub UserForm_Initialize()
Dim Nb As Integer, Ctrl As Control
Nb = 0
For Each Ctrl In frmTelephone.Controls
If TypeName(Ctrl) = "CommandButton" Then
If Ctrl.Name <> "CmdFermer" Then
Nb = Nb + 1
ReDim Preserve Boutons(1 To Nb)
Set Boutons(Nb).GroupeBouton = Ctrl
End If
End If
Ens Sub

Le module de classe
Public WithEvents GroupeBouton As Msforms.CommandButton
Private Sub GroupeBouton_Click()
' Récupère la lettre correspondant au bouton cliqué
Critere = GroupeBouton.Caption & "*"
Msgbox Critere
End Sub









Avatar
Driss HANIB
Bonjour ,

je suppose que tu veux récupérer la lettre de l'aphabet du bouton choisi

Tu crées , en mode design ou dunamique un groupe de Boutons au nom cmdLettre
et dont le caption est la lettre choisie

Exemple de création dynamique

' tu crée d'abord ton premier bouton CmdLettre(0)
' tu le positionne
for i = 0 to 25
if i <> 0 then
load CmdLettre(I)
' psitionneement ..
end if
' tu ecris ta lettre
CmdLettre(I).Caption = cstr(I+65) ' tu obtiens des majuscules
next i

Dans l'évenement CmdLettre_Click(index as long)
tu marques :

Private Sub CmdLettre_Click(index as long)
Dim Lettre as string
Lettre = CmdLettre(index).caption
' et tu place ici ton traitement en focntion de l'initiale
end sub

pour ma part je l'utilise pour créer les boutons en fonction des intiales de
noms de clients dans une base de données.
Je charge d'abord la liste des initiales des clients, puis je crée les
boutons
Autres exemples dans le cadre de gestion d'articles, si un article commence
par autre chose qu'un lettre (exemple un chiffre ou * etc.) je crée un
bouton spécifique pour cette 'initiale' . Bien entendu je modifie la
procédure de création des boutons en conséquence

Driss



dans la procédure évènementielle

"RENAUD Eric" a écrit dans le message de
news:
Bonjour,

Sur un formulaire j'ai un certain nombre de boutons correspondant chacun à
une lettre de l'alphabet.
Dans Excel, j'ai réussi à gérer cela avec un module de classe ce qui


réduit
énormément le code.

Comment faire cela avec VB ?

Mes boutons s'intitule CmdA, cmdB, cmdC, etc...
-----------------------------------------------------------
Si cela peut vous aider voici le code utilisé avec Excel

Private Sub UserForm_Initialize()
Dim Nb As Integer, Ctrl As Control
Nb = 0
For Each Ctrl In frmTelephone.Controls
If TypeName(Ctrl) = "CommandButton" Then
If Ctrl.Name <> "CmdFermer" Then
Nb = Nb + 1
ReDim Preserve Boutons(1 To Nb)
Set Boutons(Nb).GroupeBouton = Ctrl
End If
End If
Ens Sub

Le module de classe
Public WithEvents GroupeBouton As Msforms.CommandButton
Private Sub GroupeBouton_Click()
' Récupère la lettre correspondant au bouton cliqué
Critere = GroupeBouton.Caption & "*"
Msgbox Critere
End Sub




Avatar
RENAUD Eric
Bonjour,
Je n'ai pas bien tout compris.
N'aurais tu pas un petit exemple de création de boutons de manière
dynamique.
D'avance merci.

"Driss HANIB" a écrit dans le message de
news:%
Bonjour ,

je suppose que tu veux récupérer la lettre de l'aphabet du bouton choisi

Tu crées , en mode design ou dunamique un groupe de Boutons au nom


cmdLettre
et dont le caption est la lettre choisie

Exemple de création dynamique

' tu crée d'abord ton premier bouton CmdLettre(0)
' tu le positionne
for i = 0 to 25
if i <> 0 then
load CmdLettre(I)
' psitionneement ..
end if
' tu ecris ta lettre
CmdLettre(I).Caption = cstr(I+65) ' tu obtiens des majuscules
next i

Dans l'évenement CmdLettre_Click(index as long)
tu marques :

Private Sub CmdLettre_Click(index as long)
Dim Lettre as string
Lettre = CmdLettre(index).caption
' et tu place ici ton traitement en focntion de l'initiale
end sub

pour ma part je l'utilise pour créer les boutons en fonction des intiales


de
noms de clients dans une base de données.
Je charge d'abord la liste des initiales des clients, puis je crée les
boutons
Autres exemples dans le cadre de gestion d'articles, si un article


commence
par autre chose qu'un lettre (exemple un chiffre ou * etc.) je crée un
bouton spécifique pour cette 'initiale' . Bien entendu je modifie la
procédure de création des boutons en conséquence

Driss



dans la procédure évènementielle

"RENAUD Eric" a écrit dans le message de
news:
> Bonjour,
>
> Sur un formulaire j'ai un certain nombre de boutons correspondant chacun


à
> une lettre de l'alphabet.
> Dans Excel, j'ai réussi à gérer cela avec un module de classe ce qui
réduit
> énormément le code.
>
> Comment faire cela avec VB ?
>
> Mes boutons s'intitule CmdA, cmdB, cmdC, etc...
> -----------------------------------------------------------
> Si cela peut vous aider voici le code utilisé avec Excel
>
> Private Sub UserForm_Initialize()
> Dim Nb As Integer, Ctrl As Control
> Nb = 0
> For Each Ctrl In frmTelephone.Controls
> If TypeName(Ctrl) = "CommandButton" Then
> If Ctrl.Name <> "CmdFermer" Then
> Nb = Nb + 1
> ReDim Preserve Boutons(1 To Nb)
> Set Boutons(Nb).GroupeBouton = Ctrl
> End If
> End If
> Ens Sub
>
> Le module de classe
> Public WithEvents GroupeBouton As Msforms.CommandButton
> Private Sub GroupeBouton_Click()
> ' Récupère la lettre correspondant au bouton cliqué
> Critere = GroupeBouton.Caption & "*"
> Msgbox Critere
> End Sub
>
>