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

IHM Discussion :

Combinaison de cases à cocher dans un formulaire [AC-2003]


Sujet :

IHM

  1. #1
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut Combinaison de cases à cocher dans un formulaire
    Bonjour,

    J'ai créé un formulaire en m'aidant du tuto RechercheMultiCritères.

    J'ai 12 cases à cocher (1 par mois). Je voudrai afficher les enregistrements en fonction de(s) case(s) cochée(s). Il se peut que l'utilisateur ne coche que Janvier mais il peut aussi cocher Janvier + Février + Mars. Il doit pouvoir cocher tous les mois qu'il souhaite, sans forcément les cocher d'affilé (par exemple, Janvier + Mars + Juin). Bref, je me demande comment faire car avec 3 cases à cocher, ça me fait déjà beaucoup de combinaisons, alors avec 12... Y a t-il un moyen plus simple ?

    Je vous mets le code que j'ai utilisé pour une autre variable, code que je pensais adapter pour mes 12 cases à cocher.

    Merci pour votre aide.


    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
     
     SQL = "SELECT IdExterne FROM MyTable Where IdExterne <> """" And year(date)=2011 "
     
     If Me.ChkType1.Value = -1 And Me.ChkType2.Value = -1 And Me.ChkType3.Value = -1 Then
            SQL = SQL & "And (Type=1001 or Type=1002 or Type=1003)"
     ElseIf Me.ChkType1.Value = -1 And Me.ChkType2.Value = -1 And Me.ChkType3.Value = 0 Then
            SQL = SQL & "And (Type=1001 or Type=1002)"
     ElseIf Me.ChkType1.Value = -1 And Me.ChkType2.Value = 0 And Me.ChkType3.Value = -1 Then
            SQL = SQL & "And (Type=1001 or Type=1003)"
     ElseIf Me.ChkType1.Value = 0 And Me.ChkType2.Value = -1 And Me.ChkType3.Value = -1 Then
            SQL = SQL & "And (Type=1002 or Type=1003)"
     ElseIf Me.ChkType1.Value = -1 And Me.ChkType2.Value = 0 And Me.ChkType3.Value = 0 Then
            SQL = SQL & "And Type=1001"
     ElseIf Me.ChkType1.Value = 0 And Me.ChkType2.Value = -1 And Me.ChkType3.Value = 0 Then
            SQL = SQL & "And Type=1002"
     ElseIf Me.ChkType1.Value = 0 And Me.ChkType2.Value = 0 And Me.ChkType3.Value = -1 Then
            SQL = SQL & "And Type=1003"
     ElseIf Me.ChkType1.Value = 0 And Me.ChkType2.Value = 0 And Me.ChkType3.Value = 0 Then
            SQL = SQL & "And Type!=1001 And Type!=1002 And Type!=1003"
     End If

  2. #2
    Membre habitué
    Homme Profil pro
    Activités informatiques diverses
    Inscrit en
    Février 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Activités informatiques diverses
    Secteur : Service public

    Informations forums :
    Inscription : Février 2007
    Messages : 153
    Points : 188
    Points
    188
    Par défaut
    Bonsoir.
    Je te propose ce type de code dans lequel tu testes individuellement chaque case à cocher
    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
      Dim blnPremier As Boolean 'Détection de la première case cochée
     
      blnPremier = True
     
      SQL = "SELECT IdExterne FROM MyTable Where IdExterne <> """" And year(date)=2011 "
     
      'Si Janvier est coché
      If Me.ChkType1.Value = True Then
          SQL = SQL & "And Type=1001"
          blnPremier = False
      End If
     
     'Si février est coché
     If Me.ChkType2.Value = True Then
      If blnPremier Then
        SQL = SQL & "And Type=1002"
        blnPremier = False
      Else
        SQL = SQL & "Or Type=1002"
      End If
     End If
     
     'Si mars est coché.....
     
     '.....
     
     'Si décembre est coché
     If Me.ChkType12.Value = True Then
      If blnPremier Then
        SQL = SQL & "And Type=1012"
        blnPremier = False
      Else
        SQL = SQL & "Or Type=1012"
      End If
     End If
    Cordialement, Dominique

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur Pilotage
    Inscrit en
    Avril 2009
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Pilotage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 405
    Points : 1 063
    Points
    1 063
    Par défaut
    Bonjour,

    Voici quelques petits conseils

    1 - Lis ce tuto.

    2 - Privilégies les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Select Case Valeur 
    Case 1 
    Msgbox "Résultat1"
    Case 2
    Msgbox "Résultat2"
    End select
    3-
    Utilises des requêtes imbriquées ! exemple :

    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
     
    'm_SQL étant une variable globale à initialiser à chaque chargement de formulaire
    Public Sub Form_load()
    m_SQL = "SELECT IdExterne FROM MyTable Where IdExterne <> """" And year(date)=2011  And  ( VALUE ) "
    i = 0 
    'i permet de compter le nombre de clauses , si i = 0 , pas de clause OR 
    'J'ai laissé un AND supplémentaire car je suppose qu'il y a au moins 1 case selectionnée ? 
    End Sub 
     
    Public Sub ChoixCase( Case As Control , SQL As String)
    Select Case Forms(NomFormulaire).Controls(Control.Name).Value
    Case -1 
    if i = 0 Then 
    m_SQL = REPLACE(m_SQL,VALUE, SQL )
    Else
    m_SQL = REPLACE(m_SQL,VALUE, SQL & " Or VALUE" )
    End If 
    i = 1 
    End Select 
    End Sub 
     
    'Et à la fin tu supprimes le mot VALUE
    J'espère avoir été clair

    RM

  4. #4
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Merci pour votre aide à tous les 2 !

    Je vais tester vos codes et je reviendrai vers vous pour vous tenir au courant.

    Bonne soirée

  5. #5
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Bonjour,

    Je reviens vers vous après avoir testé le code.

    @lelensois16: je dois t'avouer que je n'ai pas tout compris le code

    @PapouDomi: j'ai appliqué ton code en le modifiant quelque peu à cause des parenthèses des "or" et ça fonctionne très bien . Mon code au final n'est peut être pas super propre mais il marche

    Merci bcp !
    Bonne journée !


    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
     
     SQL = "SELECT IdInterne, Date FROM MyTable Where year(date)=2011 "
     
     Dim blnPremierMois As Boolean 'Détection de la première case cochée
     blnPremierMois = True
     
     If Me.ChkMois1.Value = True Or _
        Me.ChkMois2.Value = True Or _
        Me.ChkMois3.Value = True Or _
        Me.ChkMois4.Value = True Or _
        Me.ChkMois5.Value = True Or _
        Me.ChkMois6.Value = True Or _
        Me.ChkMois7.Value = True Or _
        Me.ChkMois8.Value = True Or _
        Me.ChkMois9.Value = True Or _
        Me.ChkMois10.Value = True Or _
        Me.ChkMois11.Value = True Or _
        Me.ChkMois12.Value = True Then
            SQL = SQL & " and ("
            'Mois1
            If Me.ChkMois1.Value = True Then
             SQL = SQL & " month(date)=1 "
             blnPremierMois = False
            End If
             'Mois2
            If Me.ChkMois2.Value = True Then
                 If blnPremierMois Then
                   SQL = SQL & " month(date)=2 "
                   blnPremierMois = False
                 Else
                   SQL = SQL & "Or month(date)=2 "
                 End If
            End If
    		'...
            If Me.ChkMois12.Value = True Then
                 If blnPremierMois Then
                   SQL = SQL & " month(date)=12 "
                   blnPremierMois = False
                 Else
                   SQL = SQL & "Or month(date)=12 "
                 End If
            End If
     End If
     
     If Me.ChkMois1.Value = False And _
        Me.ChkMois2.Value = False And _
        Me.ChkMois3.Value = False And _
        Me.ChkMois4.Value = False And _
        Me.ChkMois5.Value = False And _
        Me.ChkMois6.Value = False And _
        Me.ChkMois7.Value = False And _
        Me.ChkMois8.Value = False And _
        Me.ChkMois9.Value = False And _
        Me.ChkMois10.Value = False And _
        Me.ChkMois11.Value = False And _
        Me.ChkMois12.Value = False Then
            SQL = SQL
     Else
           SQL = SQL & ")"
     End If

  6. #6
    Membre habitué
    Homme Profil pro
    Activités informatiques diverses
    Inscrit en
    Février 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Activités informatiques diverses
    Secteur : Service public

    Informations forums :
    Inscription : Février 2007
    Messages : 153
    Points : 188
    Points
    188
    Par défaut
    Bonsoir.
    Tu dois pouvoir simplifier ton code, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    If Not(Me.ChkMois1.Value = False And _
        Me.ChkMois2.Value = False And _
        Me.ChkMois3.Value = False And _
        Me.ChkMois4.Value = False And _
        Me.ChkMois5.Value = False And _
        Me.ChkMois6.Value = False And _
        Me.ChkMois7.Value = False And _
        Me.ChkMois8.Value = False And _
        Me.ChkMois9.Value = False And _
        Me.ChkMois10.Value = False And _
        Me.ChkMois11.Value = False And _
        Me.ChkMois12.Value = False) Then
           SQL = SQL & ")"
     End If
    Crée aussi une procédure qui te modifie le texte de la requête genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub MajSql (Byval intMois as integer, byval strDate as string, byval ChkMois as boolean, Byref blnPrem as boolean,Byref strSql as string)
        If ChkMois = True Then
          If blnPrem Then
            strSQL = strSQL & " month(strDate)=intMois "
            blnPrem = False
          Else
            intSQL = intSQL & "Or month(strDate)=intMois "
          End If
       End If
    End Sub
    et appelée de cette manière dans la routine principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Call MajSql(1, Date,ChkMois1.Value, blnPremierMois, SQL)
    Call MajSql(2, Date,ChkMois2.Value, blnPremierMois, SQL)
    '....
    Ceci est de l'à peu près, car je n'ai pas le temps de vérifier en réel.
    Je pense aussi que tu doit pouvoir supprimer une bonne partie du code où tu testes l'état de toutes les cases.
    Si j'ai quelques minutes demain, j'essaierais d'être plus précis.
    Cordialement, Dominique.

  7. #7
    Membre habitué
    Homme Profil pro
    Activités informatiques diverses
    Inscrit en
    Février 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Activités informatiques diverses
    Secteur : Service public

    Informations forums :
    Inscription : Février 2007
    Messages : 153
    Points : 188
    Points
    188
    Par défaut
    Bonjour.
    J'ai eu un peu plus de temps ce matin. Je te propose le code suivant que j'ai testé en réel
    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
    Sub MajSql(ByVal intMois As Integer, ByVal ChkMois As Boolean, ByRef blnPrem As Boolean, ByRef strSql As String)
        If ChkMois = True Then
          If blnPrem Then
            strSql = strSql & " AND (month(DateTrt)=" & intMois
            blnPrem = False
          Else
            strSql = strSql & " OR month(DateTrt)=" & intMois
          End If
       End If
    End Sub
     
    Private Sub Commande0_Click()
     
      Dim SQL As String
      Dim blnPremierMois As Boolean 'Détection de la première case cochée
     
      blnPremierMois = True
     
      SQL = "SELECT IdInterne, DateTrt FROM MyTable Where year(DateTrt)=2011"
     
      Call MajSql(1, chkMois1, blnPremierMois, SQL)
      Call MajSql(2, chkMois2, blnPremierMois, SQL)
      '.....
     
      If blnPremierMois Then
        SQL = SQL & ";"
      Else
        SQL = SQL & ");"
      End If
    End Sub
    Dans ta table MyTable, tu utilises le champ Date qui est un mot réservé => problème. Pour cela, je l'ai remplacé par DateTrt.
    Dans le cas actuel, pas besoin du préfixe Me ni du suffixe Value pour désigner une case à cocher.
    Cordialement, Dominique.

  8. #8
    Membre actif
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Points : 203
    Points
    203
    Par défaut
    Salut !

    Je reviens sur le forum aujourd'hui et je vois tes réponses. Merci pour ton aide, je vais tester ton code qui a l'air bien plus propre que le mien. Je fais un retour ASAP.

    Merci beaucoup !
    Bonne fin de journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Case à cocher dans sous formulaire
    Par LyLy_91 dans le forum IHM
    Réponses: 6
    Dernier message: 09/07/2008, 15h25
  2. case à cocher dans sous formulaire
    Par Syrrus dans le forum IHM
    Réponses: 2
    Dernier message: 31/10/2007, 11h27
  3. case à cocher dans un formulaire
    Par 4rn0_o dans le forum IHM
    Réponses: 2
    Dernier message: 30/08/2007, 08h16
  4. Case à cocher dans un formulaire access
    Par romulus34 dans le forum IHM
    Réponses: 10
    Dernier message: 23/01/2007, 15h42
  5. cases à cocher dans un formulaire
    Par juliette2 dans le forum Access
    Réponses: 4
    Dernier message: 06/04/2006, 22h27

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