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

VBA Access Discussion :

Liste déroulante liée à des cases à cocher


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut Liste déroulante liée à des cases à cocher
    Bonjour,

    Je suis bien bloquée...

    Je voudrais qu'à partir de ma sélection d'une table dans ma liste déroulante des cases à cocher soient cochées.


    /*La liste déroulante fonctionne bien
    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
     
     
    Private Sub Form_Load()
     
    '***************************************************************************************
    '*                                   Liste thème existants                             *
    '***************************************************************************************
    'Déclaration d'une chaîne vide pour stocker une liste de valeurs
        Dim TblNames As String
        TblNames = ""
     
    'Boucler For Each parcoure la collection AllTables, ajoute le nom de chaque table à la variable TblNames, entre guillemets et suivi d'un ';'
        Dim tbl As AccessObject
        For Each tbl In CurrentData.AllTables
     
            'Exclusion de toutes les tables ne correspondant pas un thème (cad ne respectant pas la toponymie  AAMMJJ-Thèmes)
            If Not Left(tbl.name, 22) <> "AAMMJJ-Thèmes" Then
            TblNames = TblNames + Chr(34) + tbl.name + Chr(34) + ";"
            End If
        Next tbl
     
        'La chaîne TblNames contient maintenant le nom de toutes les tables thèmes entrées en base
        'L'affecte à la propriété Contenu du contrôle de la liste déroulante Ld-ThemeExist
        Me!Ld_ThemeExist.RowSourceType = "Value List"
        Me!Ld_ThemeExist.RowSource = TblNames
     
        'Sélectionne le rpemier élément de contrôle
        Me!Ld_ThemeExist.Value = Me!Ld_ThemeExist.ItemData(0)
     
        'Assure que l'utilisateurs ne peut sélection qu'une table valide
        Me!Ld_ThemeExist.LimitToList = True
     
     
     
     
    End Sub

    /* Le problème se trouve ici.

    Je souhaite récuprérer les valeurs du premier champs de la colonne "Variable1" de la table sélectionnée dans la lsite déroulante. Le champs se présente comme ceci "1,2,5". Donc je récupére une valeur après chaque virgule et je la compare à mon numéro de case à cocher.
    Si les valeurs correspondent alors la case à cocher est cochée.

    Mon problème est que cela ne fonctionne pas et je n'ai pas de message d'erreur.

    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
     
    Private Sub Ld_ThemeExist_Change()
      Dim i As Integer, n As Integer, y As Integer, m As String
    ' Déclaration pour la phase de sélection
        Dim rstTable1 As Recordset
        Dim strSerial As String, strChaine As String
        Dim X As Integer
        Dim maTable1 As String
     
     
    For i = 1 To Ld_ThemeExist.ListCount - 1
        If Ld_ThemeExist.Selected(i) Then
     
                    maTable1 = Ld_ThemeExist.RowSource
     
                    Set rstTable1 = CurrentDb.OpenRecordset(maTable1)
     
                    While Not rstTable1.EOF
                        strSerial = rstTable1("Variable1")
                        X = 1
     
                        Do Until X = 0
                            doublon = False
                            X = InStr(1, strSerial, ",", vbTextCompare) ' Longueur de la chaîne jusqu'à la virgule
                            If X = 0 Then ' Si on se trouve sur le dernier numéro
                                strChaine = strSerial
                            Else
                                strChaine = Mid(strSerial, 1, X - 1)
                            End If
     
                            strSerial = Mid(strSerial, Len(strChaine) + 2)  ' On enlève le numéro en cours avec la virgule qui le suit
     
                           For y = 1 To 9
                             m = "CHK" & y
                                If y = strSerial Then
                                 Me.Controls(m).Value = True
                                End If
                           Next y
     
                        Loop
                        rstTable1.MoveNext
                    Wend
     
                    Set rstTable1 = Nothing
        End If
    Next i
    End Sub
    Les tables de la liste déroulante réprésentant chacun un thème. Les cases à cocher sont des critères de ces thèmes.

    Si dans le colonne "Variables1" de ma table sélectionnée dans la listbox, j'ai "1,6,7", alors les cases à cocher 1, 6 et 7 seront automatiquement cochées.

    J'espère que cela reste relativement clair.

    Je suis dans l'urgence et mes tentaives de solutions ne me semblent pas convainquantes...

    Merci pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    Bonjour,

    As- tu mis un point d'arrêt à l'intérieur de ta boucle For pour vérifier que si tu trouve un numéro correspondant à une checkbox tu modifie son état?
    De plus, pour simplifier ton code au niveau de la détection des numéro dans ton champ "Variable1", je te suggère d'utiliser la fonction split

    http://msdn.microsoft.com/fr-fr/libr...=vs.80%29.aspx

    Cordialement.

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Merci de ton aide !

    Génial cette fonction Split, elle permet de vraiment simplifier mon code.

    J'ai changé ma manière de faire :

    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
     
    Dim i As Integer, j As Integer
     
    Dim mTab
     
    Dim txt As String, var1 As String, m As String
     
        For i = 0 To Ld_ThemeExist.ListCount -1
            If Ld_ThemeExist.Selected(i) = True Then
                txt = txt & Ld_ThemeExist.ListCount(i)
                var1 = DLookup("[Variable1]", txt, Variable1 <> "")
                var1 = var1 + Split(var1, ",")
     
                For j = 1 To 9
                    m = "CHK" & j
                    If j = mTab(j) Then
                        Me.Controls(m).Value = True
                    End If
                 Next j
         Next i
    Next i
    Je ne sais pas si déjà le code, ci-dessous est correct ?

    Le problème est que je n'arrive à récupérer la valeur de ma colone Variable1.
    Je voudrais pouvoir récupérer le premier champs.

    En tous les cas, merci pour le temps que tu consacres à m'aider.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    A mon avis, tu cherches a récupérer le nom de ta table sélectionnée dans ta variable txt. Pour cela n'utilise pas ListCount(i) mais ItemData(i). Ensuite tu peut utiliser Dfirst à la place de Dlookup si tu n'a qu'un enregitrement dans ta table?

  5. #5
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Merci pour ton aide !

    Effectivement, je voulais récupérer ma sélection de listbox (qui est le nom d'une table).

    J'ai appliqué les nouveaux changements.
    Malgré tout, a comparaison entre ma Variable1 et le numéro de l'indice de la case à cocher ne s'applique pas.

    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
     
    Dim i As Integer, j As Integer
     
    Dim mTab
     
    Dim txt As String, var1 As String, m As String
     
        For i = 0 To Ld_ThemeExist.ListCount - 1
            If Ld_ThemeExist.Selected(i) = True Then
                txt = txt & Ld_ThemeExist.ItemData(i)
                var1 = DFirst("[Variable1]", txt, Variable1 <> "")
                var1 = var1 + Split(var1, ",")
     
                For j = 1 To 9
                    m = "CHK" & j
                    If j = mTab(j) Then
                        Me.Controls(m).Value = True
                    End If
                 Next j
         Next i
    Next i

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    191
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2012
    Messages : 191
    Points : 324
    Points
    324
    Par défaut
    Dans ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var1 = DFirst("[Variable1]", txt, Variable1 <> "")
    Tu récupère ton champ variable1.

    Pour le "spliter", créer un tableau. Ensuite, boucle tous les éléments de ce tableau et coche les cases correspondantes. Je te donne un exemple ci-dessous de ce à quoi ton code devrait ressembler. Jespsere que ca répond à ta question.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim tableau() As String
    Dim I As Integer
     
    tableau = Split(var1, ",")
     
    For I = 0 To UBound(tableau)
        m = "CHK" & tableau(I)
        Me.Controls(m).Value = True
    Next

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    J'ai appliqué les changements.
    Oui, seul le premier enregistrement de la colonne Variable1 m'intéresse en ce sens la fonction DFisrt trouve tout son sens.

    Mon erreur se trouve au niveau du critère de la fonction DFirst avec :
    [Variable1] <> "" (ma Variable1 ne doit pas être vide)

    Je ne vois pas en quoi ce critère est faux.

    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
     
    Dim i As Integer
    Dim j As Integer
     
    Dim tableau() As String
     
    Dim txt As String, var1 As String, m As String
     
        For i = 0 To Ld_ThemeExist.ListCount - 1
            If Ld_ThemeExist.Selected(i) = True Then
                txt = txt & Ld_ThemeExist.ItemData(i)
                var1 = DFirst("[Variable1]", txt, [Variable1] <> "")
                tableau = Split(var1, ",")
     
                For j = 0 To UBound(tableau)
                    m = "CHK" & tableau(j)
                    Me.Controls(m).Value = True
                Next j
            End If
         Next i
     
    End Sub
    Désolée de te retenir avec ce problème.
    Merci, je découvre un peu plus vba.

  8. #8
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 30
    Points
    30
    Par défaut
    Je suis dégoûtée....

    Le problème venait du "&"... Je l'ai remplacé par "+"

    A présent, tout fonctionne !

    Merci pour le temps que tu as consacré à m'aider.

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

Discussions similaires

  1. [AC-2003] Formulaire listes déroulantes + système de cases à cocher
    Par Skiitle dans le forum IHM
    Réponses: 2
    Dernier message: 16/04/2012, 15h10
  2. Réponses: 14
    Dernier message: 11/09/2010, 21h16
  3. Liées des cases à cocher
    Par Jumano dans le forum Word
    Réponses: 1
    Dernier message: 18/11/2007, 09h27
  4. liste déroulante avec une case à cocher et une image
    Par kurul1 dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/03/2007, 09h54
  5. Réponses: 2
    Dernier message: 04/06/2006, 21h35

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