IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Limitation du nombre de checkbox cliquées


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 74
    Par défaut Limitation du nombre de checkbox cliquées
    Bonjour,

    Je suis actuellement en train de faire un loto sous vba et à cette occasion j ai donc realisé un userform avec 49 checkbox ou je propose à l utilisateur de sélectionner les 6 numeros qu il désire jouer. Le problème c est que je ne sais pas comment limiter le nombre de checkbox cliqué. Pourriez vous m aider. Pour êter plus clair je voudrais que lorsqu il clique sur mon command button jouer un msgbox apparaisse lui rappellant qu il doit sélectionner six chiffers ni plus, ni moins.

    Merci par avance.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Hello,

    Une approche.

    Le code est long vu le nombre de CheckBox... Il doit sûrement y avoir une meilleure façon de faire, je pense notament avec un Module de Classe, mais ça je ne sais pas (encore ) faire

    Dans l'attente qu'un crack intervienne, essaye ce fichier...

    Cdt, mOOm.

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Si ma mémoire ne me fait pas défaut, un problème similaire a été traité dans une discussion récente (environ 1 mois).
    laetitia y avait apporté une touche d'élégance pour évioter la répétition du code.

    Ceci étant dit : ton interface ne va pas être très jolie ....
    L'avion m'attend et je ne serai pas de retour avant Lundi, mais essaye plutot
    de jouer avec :
    - un cadre rempli de tes numéros espacés correctement
    - 49 shapes (inertes par définition)
    - l'évènement mouse up du cadre (en relevent les coordonnées et donc déterminant le shape correspondant et donc le n°)

    Voilà l'idée générale.... A toi d'essayer...

  4. #4
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour
    code user

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Option Explicit
    Dim cbx(1 To 49) As New Classe2, i As Byte
    Private Sub UserForm_Initialize()
    For i = 1 To 49: Set cbx(i).cbx = Controls("CheckBox" & i): Next i
    End Sub
    module de classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Public WithEvents cbx As MSForms.CheckBox
    Dim X As Byte, c As Byte, Ctl As Control
    Private Sub cbx_Click()
     c = 0: For X = 1 To 49
    If UserForm1.Controls("CheckBox" & X).Value = True Then c = c + 1
    If c > 6 Then cbx = False: MsgBox "6 select.. max": Exit Sub
    Next X
    End Sub

    ps bonjour l'ami ucfoutu pas rafraichi bisous a+

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Hello tout le monde,

    Merci pour la petite démo de Module de Classe Laetitia... A retenir

    Si j'ose me permettre, si tu connais des bons liens avec des exemples de Module de Classe, je suis preneur !

    Cdt, et bonne journée à tous !

    mOOm.

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Boujour à tou(te)s
    Je me suis un peu amuser cet après midi.
    Emploi d'un module de classe pour l'évenement Click de CheckBox.
    Limitation de la sélection à 6 checkBox.
    Mémorisation des tirages...
    Quand 6 casses sont sélectionnées, en décocher une permet de modifier le tirage.
    Personnellement je n'aurais pas employer des CheckBox mais j'ai suivi le fil demander.
    Je vous laisse le soin d'ajouter des fonctions tel que... Tirage automatique, Impression des tirages, Nouveau tirage, etc...
    A+
    Fichiers attachés Fichiers attachés

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    je me suis également amusé entre la soupe et les légumes, de loin ... (dans l'avion pour développer et d'un cyber café pour répondre)

    Voici comment je m'y prendrais personnellement (exemple) ...

    Sur un Userform, je mettrais :
    - Un label nommé Grille
    - 6 labels nommés coche1, coche2,coche3,coche4,coche5 et coche6
    - une listbox nommée Listbox1
    - un bouton de commande nommé Command1

    Ne te préoccupe ni des dimensions, ni des emplacements (je l'ai fait pour toi en dynamique)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Option Explicit
     
    Private Sub Grille_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
     If ListBox1.ListCount = 0 Then Exit Sub
     Dim ou As Integer, oux As Integer, ouy As Integer
     ou = ((Y \ (Grille.Height / 7)) * 7) + (X \ (Grille.Width / 7)) + 1
     Controls(ListBox1.List(0)).Caption = ou
     oux = IIf(ou Mod 7 > 0, Abs(((ou Mod 7) - 1)), 6)
     ouy = IIf(ou Mod 7 = 0, (ou \ 7) - 1, ou \ 7)
     With Controls(ListBox1.List(0))
       .Move Grille.Left + 2 + (Grille.Width / 7) * oux, Grille.Top + (Grille.Height / 7) * ouy
       .Visible = True
       .Tag = ou
     End With
     ListBox1.RemoveItem 0
    End Sub
     
    Private Sub coche1_Click()
      couic coche1
    End Sub
    Private Sub coche2_Click()
      couic coche2
    End Sub
    Private Sub coche3_Click()
      couic coche3
    End Sub
    Private Sub coche4_Click()
      couic coche4
    End Sub
    Private Sub coche5_Click()
      couic coche5
    End Sub
    Private Sub coche6_Click()
      couic coche6
    End Sub
    Private Sub couic(quoi As Control)
      ListBox1.AddItem quoi.Name
      quoi.Visible = False
    End Sub
    Private Sub command1_Click()
      Dim msg As String, nb As Integer, i As Integer
      msg = ""
      For i = 1 To 6
        If Controls("coche" & i).Visible Then
          msg = msg & vbCrLf & Controls("coche" & i).Tag
          nb = nb + 1
        End If
      Next
      MsgBox nb & " numeros joués : " & vbCrLf & msg
    End Sub
    Private Sub UserForm_Initialize()
      'tout ceci uniquement pour faire à ta place ce quue tu pourrais faire dans la fenêtre des propriétés !
      'sauf en ce qui concerne les lignes (en boucle) marquées ' <============
      ' (il reste fort peu de code "réel", n'est-ce-pas ?)
      command1.Caption = "contrôler"
      Dim combien As String, i As Integer, j As Integer
      With Grille
        .BackColor = RGB(255, 220, 255): ForeColor = 0
        .Caption = ""
        .Font.Name = "Courier New": .Font.Size = 16
        .Width = 200: .Height = 120
        .BorderStyle = fmBorderStyleSingle
      End With
      ListBox1.Visible = False
      For i = 0 To 6 ' <============
        For j = 1 To 7 ' <============
          combien = CStr(j + (i * 7)) ' <============
          combien = IIf(Len(combien) < 2, Format(combien, " 0 "), Format(combien, "0 ")) ' <============
          Grille.Caption = Grille.Caption & combien ' <============
        Next ' <============
        Grille.Caption = Grille.Caption & vbCrLf ' <============
      Next
      For i = 1 To 6 ' <============
        With Controls("coche" & i) ' <============
          .Font.Name = Grille.Font.Name: .Font.Size = Grille.Font.Size: .FontBold = True
          .BackColor = vbRed: .ForeColor = vbWhite
          .Width = 22: .Height = 16
          .Visible = False
          ListBox1.AddItem "coche" & i ' <============
        End With ' <============
      Next
    End Sub
    Explications :
    En cliquant sur un numéro, tu le choisis
    En cliquant sur un numéro choisi, tu l'effaces
    Tu ne peux choisir plus de 6 numéros (essaye donc et tu verras)

    Le bouton de commande n'est là que pour te permettre de voir ce qui a été misé.
    La majeure partie de ce qui est dans l'évènement initialize n'est là que pour faire à ta place des réglages que tu pourrais faire directement toi-même dans la fenêtre des propriétés...

    J'ai voulu m'amuser à ce petit exercice car il montre d'autres approches (et le développement est avant tout une affaire d'approche...)
    Ton interface est maintenant fort différente de celle que tu avais imaginée, n'est-ce-pas ?
    Si je t'ai apporté (ou à d'autres) des idées ... tant mieux ...
    Si non : tant pis (moi, je me suis régalé un peu .....)

    Au total : 7 labels et une listbox.

    Amitiés

    Edit :
    si celà convient, je mets en oeuvre ce qu'il faut (facile) pour le calcul automatique (et non en dur comme ci-dessus) des dimensions, quelle que soit la taille de la police de la grille

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2009
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 74
    Par défaut
    Bonjour,

    Tout d'abord desole d'avoir mis autant de temps pour répondre mais j ai eu des problemes de santé qui m'ont obligé a rester un bon moment à l'hopital.

    Bref, en ce qui concerne ce fameux loto, mon véritable probleme est dans le cahier des charges qui stipule qu il faut utiliser des checkbox.
    Concretement le cahier des charges dit que:

    L 'appli se lance un userform apparait présentant le jeu et les règles ainsi qu'une grille de 49 numéros dans laquelle il faut sélectionner 6 numéros précisement. Deux boutons dispo, a savoir un bouton quitter le jeu, qui fait quitter l'appli et un bouton lancer le tirage.

    Ci ce dernier est préssé un nouvel userform s'ouvre avec les résultats du tirage, une indication sur le nombre de bon numéro et le prix fictif remporté.
    Deux boutons dispo, rejouer et quitter le jeu.

    En sachant que je ne veux pas me servir de module de classe.

    Je bloque sur les checkboxs si qqun a une solution, elle est la bienvenue.

    Merci à vous.

    FFGUY

Discussions similaires

  1. Limiter le nombre de checkbox cochés
    Par aertys dans le forum VB.NET
    Réponses: 4
    Dernier message: 01/06/2013, 18h14
  2. [XL-2010] Limiter nombre de checkbox possibles
    Par ced285 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/02/2013, 13h53
  3. Fonction pour limiter le nombre de checkboxes cochees
    Par nabab dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/07/2007, 20h24
  4. Réponses: 9
    Dernier message: 23/06/2006, 17h30
  5. [débutant] Limitation du nombre d'enregistrement renvoyé
    Par tmcgrady dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/11/2003, 09h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo