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 :

Données incohérentes pour renvoi de données dans une listbox


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut Données incohérentes pour renvoi de données dans une listbox
    Bonjour,
    J’aurai besoin de vos lumières concernant un problème que je n’arrive pas à résoudre

    Je suis en train de reprendre le code VBA d'une base de données recensant plusieurs info INSEE concernant des communes iris région, dept etc.

    Je désiré renvoyé dans une listbox par exemple tous les IRIS du département « Nord » qui comporte 1347 enregistrements or je n’ai que 1066 enregistrements renvoyé dans ma zone de liste quand je clique sur mon bouton ajouter.

    Le problème est le suivant : la Listbox (appelée SELECTION) ne contient pas le nombre d'enregistrements escompté quand le nombre d’enregistrements demandé est conséquent or la requête utilisée testé sous SQL fonctionne correctement.

    Le problème vient assurement du code mais je n'arrive pas à determiner à quel niveau:

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    Option Explicit
     
    Dim REGION As String
    Dim DEPARTEMENT As String
    Dim CANTON As String
    Dim EPCI As String
    Dim AGGLO As String
    Dim ARR As String
    Dim COMMUNE As String
    Dim IRIS As String
     
     
     
    '*******************************************************
    ' Procédure appelée lors d'un double clic sur SELECTION
    '*******************************************************
    Private Sub AJOUTER_DblClick(Cancel As Integer)
        AJOUTER
    End Sub
     
     
     
     
    '*******************************************************
    ' Procédure appelée lors d'un clic sur le bouton "ajouter"
    ' Cette procédure va, suivant le type de l'échelle sélectionner et
    ' effectuer une requete pour rassembler les informations
    ' sur cette dernière
    '
    ' Une erreur est levée en cas de violation des contraintes d'utilisation
    ' (exemple : pluseurs cases cochées en même temps)
    '*******************************************************
     
    Private Sub AJOUTER_Click()
        Dim resultatReq As Recordset 'Résultat Requête
        Dim TYPE_ECHELLE As String 'champs qui renseigne le type de l'enregistrement (exp: REG, DEP ...)
     
         'Vérifier conditions
        If VERIFIER_CONDITIONS = False Then
            MsgBox ("Veuillez vérifier que vous avez sélectionné ou coché une seule echelle")
            Exit Sub
        End If
     
        'récupérer les valeurs des LISTE_
        VALEUR_LISTES
     
        If coche_R Then 'Ajouter toutes les regions
            TYPE_ECHELLE = "REG"
            If REGION <> "" Or DEPARTEMENT <> "" Or CANTON <> "" Or EPCI <> "" Or AGGLO <> "" Or ARR <> "" Or COMMUNE <> "" Or IRIS <> "" Then
                MsgBox ("Impossible d'executer")
                Exit Sub
            End If
            Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT REG as CODE,LIBELREG as LIBEL FROM COMMUNE")
     
        ElseIf coche_D Then
             TYPE_ECHELLE = "DEP"
            If DEPARTEMENT <> "" Or CANTON <> "" Or EPCI <> "" Or AGGLO <> "" Or ARR <> "" Or COMMUNE <> "" Or IRIS <> "" Then
                MsgBox ("Impossible d'executer")
                Exit Sub
            End If
            If REGION <> "" Then 'si une région est selectionnée
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT DEP as CODE,LIBELDEP as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
            Else 'ajouter toutes les dep
                Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT DEP as CODE,LIBELDEP as LIBEL FROM COMMUNE")
            End If
        ElseIf COCHE_C Then
     
        TYPE_ECHELLE = "CANTON"
                If CANTON <> "" Or EPCI <> "" Or AGGLO <> "" Or ARR <> "" Or COMMUNE <> "" Or IRIS <> "" Then
                    MsgBox ("Impossible d'executer")
                Exit Sub
                End If
                If DEPARTEMENT <> "" Then 'Ajouter tous les cantons de DEPARTEMENT
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CV as CODE,LIBELCV as LIBEL FROM COMMUNE WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
                ElseIf REGION <> "" Then 'Ajouter tous les cantons de REGION
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CV as CODE,LIBELCV as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
                Else 'DEPARTEMENT et REGION sont vides, alors on ajoute TOUS les cantons
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CV as CODE,LIBELCV as LIBEL FROM COMMUNE")
                End If
        ElseIf COCHE_EPCI Then
     
        TYPE_ECHELLE = "EPCI"
                If EPCI <> "" Or AGGLO <> "" Or ARR <> "" Or COMMUNE <> "" Or IRIS <> "" Then
                    MsgBox ("Impossible d'executer")
                Exit Sub
                End If
                If CANTON <> "" Then 'Ajouter tous les EPCI de Canton
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT EPCI as CODE,LIBELEPCI as LIBEL FROM COMMUNE WHERE LIBELCV='" & CANTON & "' OR CV='" & CANTON & "'")
                ElseIf DEPARTEMENT <> "" Then 'Ajouter tous les EPCI de DEPARTEMENT
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT EPCI as CODE,LIBELEPCI as LIBEL FROM COMMUNE WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
                ElseIf REGION <> "" Then 'Ajouter tous les EPCI de REGION
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT EPCI as CODE,LIBELEPCI as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
                Else 'CANTON,DEPARTEMENT,REGION sont vides, alors on ajoute TOUS les EPCI
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT EPCI as CODE,LIBELEPCI as LIBEL FROM COMMUNE")
                End If
     
        ElseIf COCHE_AG Then
     
        TYPE_ECHELLE = "AGGLO"
                If AGGLO <> "" Or ARR <> "" Or COMMUNE <> "" Or IRIS <> "" Then
                    MsgBox ("Impossible d'executer")
                Exit Sub
                End If
                If EPCI <> "" Then 'Ajouter toutes les AGG de EPCI
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE WHERE LIBELEPCI='" & EPCI & "' OR EPCI='" & EPCI & "'")
                ElseIf CANTON <> "" Then 'Ajouter toutes les AGG de Canton
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE WHERE LIBELCV='" & CANTON & "' OR CV='" & CANTON & "'")
                ElseIf DEPARTEMENT <> "" Then 'Ajouter tous les AGG de DEPARTEMENT
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
                ElseIf REGION <> "" Then 'Ajouter toutes les AGG de REGION
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
                Else 'EPCI,CANTON,DEPARTEMENT,REGION sont vides, alors on ajoute TOUTES les AGG
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE")
                End If
     
        ElseIf COCHE_AR Then
     
        TYPE_ECHELLE = "ARR"
               If REGION = "Provence-Alpes-Côte d'Azur" Or REGION = "93" Or REGION = "Rhône-Alpes" Or REGION = "83" Or REGION = "Ile-de-France" Or REGION = "11" Then
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBELREG='" & COMMUNE & "' OR REG='" & COMMUNE & "'")
               ElseIf DEPARTEMENT = "Bouche-du-Rhône" Or DEPARTEMENT = "13" Or DEPARTEMENT = "Rhône" Or DEPARTEMENT = "69" Or DEPARTEMENT = "Paris" Or DEPARTEMENT = "75" Then
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBELDEP='" & COMMUNE & "' OR DEP='" & COMMUNE & "'")
               ElseIf CANTON = "Marseille" Or CANTON = "1399" Or CANTON = "LYON" Or CANTON = "6999" Or CANTON = "Paris" Or CANTON = "7599" Then
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBELCV='" & ARR & "' OR LIBELCV='" & COMMUNE & "'")
               ElseIf ARR = "Marseille" Or ARR = "Lyon" Or ARR = "Paris" Then
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBELCV='" & ARR & "'")
               ElseIf AGGLO = "" And EPCI = "" And CANTON = "" And DEPARTEMENT = "" And REGION = "" And ARR = "" Then
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT")
     
     
                '///////////////////////////////////////////////////////////////////////////////////////////////
                'SI ON CREE UNE NOUVEL ARRONDISSEMENT, IL FAUT ALORS AJOUTER UN "ELSE IF"
                 '///////////////////////////////////////////////////////////////////////////////////////////////
     
                 Else
                    MsgBox ("Impossible d'executer")
                Exit Sub
                End If
     
        ElseIf COCHE_COM Then
     
     
     
        TYPE_ECHELLE = "COM"
     
                If COMMUNE <> "" Or IRIS <> "" Then
                    MsgBox ("Impossible d'executer")
                Exit Sub
                End If
     
                If ARR <> "" Then 'Ajouter toutes les COM de ARR
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBGEO='" & ARR & "' OR CODEGEO='" & ARR & "'")
                ElseIf AGGLO <> "" Then 'Ajouter toutes les COM de AGG
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBELUU1999='" & AGGLO & "' OR UU1999='" & AGGLO & "'")
                ElseIf EPCI <> "" Then 'Ajouter toutes les COM de EPCI
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBELEPCI='" & EPCI & "' OR EPCI='" & EPCI & "'")
                ElseIf CANTON <> "" Then 'Ajouter toutes les COM de Canton
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBELCV='" & CANTON & "' OR CV='" & CANTON & "'")
                ElseIf DEPARTEMENT <> "" Then 'Ajouter toutes les COM de DEPARTEMENT
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
                ElseIf REGION <> "" Then 'Ajouter toutes les COM de REGION
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
                Else 'ARR,AGG,EPCI,CANTON,DEPARTEMENT,REGION sont vides, alors on ajoute TOUTES les COMMUNE
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE")
                End If
     
        ElseIf COCHE_IRIS Then
        TYPE_ECHELLE = "IRIS"
                If IRIS <> "" Then
                    MsgBox ("Impossible d'executer")
                Exit Sub
                End If
                If COMMUNE <> "" Then 'Ajouter tous les IRIS de COM
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBGEO='" & COMMUNE & "' OR CODGEO='" & COMMUNE & "'")
                ElseIf ARR <> "" Then 'Ajouter tous les IRIS de ARR
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBGEO='" & ARR & "' OR CODGEO='" & ARR & "'")
                ElseIf AGGLO <> "" Then 'Ajouter tous les IRIS de AGG
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM COMMUNE WHERE LIBELUU1999='" & AGGLO & "' OR UU1999='" & AGGLO & "'")
                ElseIf EPCI <> "" Then 'Ajouter tous les IRIS de EPCI
                    'Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELEPCI='" & EPCI & "' OR EPCI='" & EPCI & "'")
                    MsgBox ("Vous ne pouvez pas faire de filtre à partir d'un EPCI")
                ElseIf CANTON <> "" Then 'Ajouter tous les IRIS de Canton
                    'Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELCV='" & CANTON & "' OR CV='" & CANTON & "'")
                    MsgBox ("Vous ne pouvez pas faire de filtre à partir d'un CANTON")
                ElseIf DEPARTEMENT <> "" Then 'Ajouter tous les IRIS de DEPARTEMENT
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
                ElseIf REGION <> "" Then 'Ajouter tous les IRIS de REGION
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELREG='" & REGION & "'")
                Else 'COMMUNE,ARR,AGG,EPCI,CANTON,DEPARTEMENT,REGION sont vides, alors on ajoute TOUS les IRIS
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS")
                End If
     
     
        Else
            'Aucune case cochée
            'alors on recherche dans les champs LISTE_**
                If REGION <> "" Then 'ajouter la region souhaitée
                TYPE_ECHELLE = "REG"
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT REG as CODE,LIBELREG as LIBEL FROM COMMUNE WHERE LIBELREG='" & REGION & "'")
                ElseIf DEPARTEMENT <> "" Then 'ajouter le département souhaité
                TYPE_ECHELLE = "DEP"
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT DEP as CODE,LIBELDEP as LIBEL FROM COMMUNE WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'")
                ElseIf CANTON <> "" Then 'ajouter le canton souhaité
                TYPE_ECHELLE = "CANTON"
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CV as CODE,LIBELCV as LIBEL FROM COMMUNE WHERE LIBELCV='" & CANTON & "' OR CV='" & CANTON & "'")
                ElseIf EPCI <> "" Then 'ajouter l'EPCI souhaité
                TYPE_ECHELLE = "EPCI"
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT EPCI as CODE,LIBELEPCI as LIBEL FROM COMMUNE WHERE LIBELEPCI='" & EPCI & "' OR EPCI='" & EPCI & "'")
                ElseIf AGGLO <> "" Then 'ajouter l'Agglo souhaitée
                TYPE_ECHELLE = "AGGLO"
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT UU1999 as CODE,LIBELUU1999 as LIBEL FROM COMMUNE WHERE LIBELUU1999='" & AGGLO & "' OR UU1999='" & AGGLO & "'")
                ElseIf ARR <> "" Then 'ajouter l'arr souhaitée
                TYPE_ECHELLE = "ARR"
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT CODGEO as CODE,LIBGEO as LIBEL FROM ARRONDISSEMENT WHERE LIBGEO='" & ARR & "' OR CODGEO='" & ARR & "'")
                ElseIf COMMUNE <> "" Then 'ajouter la commune souhaitée
                TYPE_ECHELLE = "COM"
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT CODGEO as CODE,LIBGEO as LIBEL FROM COMMUNE WHERE LIBGEO='" & COMMUNE & "' OR CODGEO='" & COMMUNE & "'")
                ElseIf IRIS <> "" Then
                TYPE_ECHELLE = "IRIS"
                    Set resultatReq = CurrentDb.OpenRecordset("SELECT DISTINCT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELIRIS='" & IRIS & "' OR IRIS='" & IRIS & "'")
                End If
     
        End If
     
     
     
     
        'Ajout des résultats dans la liste
        resultatReq.MoveFirst
     
        While Not resultatReq.EOF
            SELECTION.AddItem resultatReq!CODE & ";" & resultatReq!LIBEL & ";" & TYPE_ECHELLE 'ajout de la région
            resultatReq.MoveNext
        Wend
     
        VIDER_ECHELLES
    MsgBox SELECTION.ListCount
    End Sub
    Merci pour vos réponses

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Qu'est ce qui garantie que resultatReq contient bien 1347 enregistrements.

    La méthode AddItem n'est pas idéale, dans ce cas...
    En fait, un ListBox ou un ComboBox doit plutôt posséder une source via une chaîne SQL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaComboBox.RowSource=strSQL
    Argy

    P.S. Il serait plus "mieux" de rendre générique ta procédure car là, c'est loin d'être souple et délicat à entretenir en cas d'évolution car tu as des données en dur dans le code ce qui est un mauvais départ.

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    En fait je suis en train de reprendre le code qu'une stagiaire m'a produite...

    En tous cas merci pour ta réponse avisée. Je te fais un retour après correction du code.

    Je passe en en mode "strSQL"

    Si d'autres personnes ont aussi des avis sur la question n'hésitez pas .

    J'avoue que je bloque un peu, le code ci-dessous n'est pas le bon ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    szSQL = "SELECT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'"  
    SELECTION.RowSource = szSQL
    SELECTION.Requery

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Si, il semble correcte.
    Causes possibles :
    • Du fait que tu avais usé de AddItem il doit résider à la propriété RowSourceType la valeur "Liste des valeurs" alors qu'elle soit être affectée dans ce cas à "Table/requête"...
    • Que la propriété Largeurs colonnes et Nbre de colonnes doivent coincider...

    Argy

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Effectivement cela marche

    Le problème est que si je passe de liste de valeur à table/requête le code doit être modifié dans les 3/4

    Cette méthode addItem me fait vriller de la carafe si je prend juste 1 colonne a insérer dans ma zone de liste je n'ai pas de problème dès que j'insère les données dans la colonnes 2 ou 3 là ça part en vrille et je n'ai pas tout mes enregistrements.

    Je dois écrire quelque chose de faux à ce niveau mais quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        While Not resultatReq.EOF = True
            SELECTION.AddItem resultatReq!CODE & ";" & resultatReq!LIBEL & ";" & TYPE_ECHELLE '
            resultatReq.MoveNext
            compteur= compteur + 1 'juste la pour vérifier si l'intégralité du fichier était bien parcouru 
        Wend
    Franchement si vous avez une réponse ca sera pas de refus

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Ce bout de code n'est pas pourvu d'erreurs sauf éventuellement des "" mais cela peut rester facultatif selon le type de contenu...
    Je ne pense pas que ce soit la méthode en elle-même qui suinte mais plutôt un en amont...
    Y en a t-il un ?

    En fait je soupçonne l'erreur 2176 de survenir au court du remplissage de ta liste... Essaye ainsi de lancer la procédure telle que ci-dessous :

    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
     
    Private Sub Test()
    Dim resultatReq                                        As DAO.Recordset
        Set resultatReq = CurrentDb.OpenRecordset("SELECT * FROM ?????", 2)
        With resultatReq
            Do While Not .EOF
                On Error Resume Next
                cboSelection.AddItem Chr(34) & .Fields("CODE") & Chr(34) & ";" & Chr(34) & .Fields("LIBEL") & Chr(34) & ";" & Chr(34) & TYPE_ECHELLE & Chr(34)
                resultatReq.MoveNext
                compteur = compteur + 1
                If Err.Number Then
                    MsgBox "Il y a bien une erreur à partir de " & compteur & " enregistrements", , Err.Number
                    .Close
                    GoTo Fin
                End If
            Loop
            .Close
        End With
    Fin:
        Set resultatReq = Nothing
        MsgBox compteur, , Err.Number
        Err.Clear
    End Sub

    Argy

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Malheureusement il ne me détecte aucune erreur du type '2176' mais c'est vrai que ça en a tout les symptômes.

    J'ai même mis l'option sous VB "Arret sur toutes les erreurs" et pas plus de résultat. Et en gros si j'ai bien compris une ancienne discussion : http://www.developpez.net/forums/d14...erreur-2176-a/, je se suis bon pour changer mon code pour mettre une requête en source de données et ca va changer pas mal d'instructions je pense.

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Oui...
    De toute façon le Additem, on s'en sert pour ajouter 2-3 trucs dans une liste comme par exemple Mme, Melle, Mr ce qui évite d'avoir une table dédiée à cela, quoique.
    Bref, affecter un SQL à la source est bien plus souple, plus rapide et tout ce qui va avec.
    Et puis entre (), pas de grosse modif pour toi...
    Tu te sers de la propriété Name de ton Recordset "resultatReq " et tu l'afectes à une variable qui te sers à créer dynamiquement une requête stockée si nécessaire ou bien d'affecter directement cette variable à ta Combobox en lui donnant ses propriétés de colonnes idoines.

    Argy

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    T'as raison. En route pour l'affectation sql ! Merci beaucoup

    Une question purement pratique : dans le cas ou je rencontre des difficultés sur l'affectation sql mieux vaut il continuer à poser les questions sur cette discussion ou faut il en créer une nouvelle.

    Encore merci

  10. #10
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Tant que cela concerne ce thread, il est préférable de continuer dans celui-ci puisque la réponse est dérivée.

    Argy

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Quand j'affecte le string szSQL à mon Recordset "resultatReq" il me met l'erreur 2176 !!
    J'ai pourtant bien défini 3 colonnes dans ma listbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    szSQL = "SELECT IRIS as CODE,LIBELIRIS as LIBEL FROM IRIS WHERE LIBELDEP='" & DEPARTEMENT & "' OR DEP='" & DEPARTEMENT & "'"
    
    Set resultatReq = CurrentDb.OpenRecordset(szSQL)
    
    While Not resultatReq.EOF
        Me!SELECTION.RowSource = Me!SELECTION.RowSource & ";resultatReq!CODE;resultatReq!LIBEL;TYPE_ECHELLE"
        resultatReq.MoveNext
    Wend

    J'essaye donc de ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        SELECTION.RowSource = szSQL
        SELECTION.Requery
    Mais là il ne me rempli que la 1ere colonne de ma listbox SELECTION en affichant les enregistrements de "LIBEL"


    Ce que je voudrais avoir dans ma listbox :

    colonne 1 : champs CODE (szsql)
    colonne 2 : champs LIBEL (szsql)
    colonne 3 : Valeur de la variable TYPE_ECHELLE (ici IRIS)


    Je n'arrive pas à trouver le bon code pour effectuer cela si vous pourriez m'aider

  12. #12
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    [Hors sujet]
    • Les MAJUSCULES sont réservées aux constantes
    • SELECTION est un mot clé : interdit de l'employer comme variable en encore moins comme nom de contrôle.
    • Les noms des procédures doivent être explicites et représentées par des mots
    • Les noms des fonctions doivent être explicites et représentées par des verbes
    • etc...
    En somme, s'impreigner et appliquer ce tutoriel
    [/Hors sujet]

    Pour ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    While Not resultatReq.EOF
        Me!SELECTION.RowSource = Me!SELECTION.RowSource & ";resultatReq!CODE;resultatReq!LIBEL;TYPE_ECHELLE"
        resultatReq.MoveNext
    Wend
    C'est normal, tu boucles sur l'affectation RowSource qui revient au même que tes premier postes.

    Ton code être corrigé comme suit (d'après ton premier poste) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        'Ajout des résultats dans la liste
        resultatReq.MoveFirst
        strSQL = resultatReq.Name
         cboSelection.RowSource = strSQL
         cboSelection.Requery
        VIDER_ECHELLES
    Si ça ne marche pas c'est que ton Recordset est pourvu d'erreurs ou bien qu'il ne répond pas aux bon critères.
    Quant aux colonnes, c'est à toi de les définir.
    Tu dois avoir des champs dans ta clause SQL (et non pas des concaténation séparé par des ";" et ces champs sont alors affectés à chaque colonne de la liste qui est définie avec les propriétés Nbre de colonnes, Largeurs Colonnes [et Colonne liée].

    Argy

  13. #13
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Merci je vais potasser ce tutoriel et appliquer tes précieux conseils

Discussions similaires

  1. Boucler pour effacer des lignes dans une listbox à sélection multiple
    Par simond1 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 01/08/2008, 23h25
  2. Réponses: 5
    Dernier message: 10/05/2008, 18h26
  3. Réponses: 1
    Dernier message: 21/12/2007, 13h22
  4. Réponses: 7
    Dernier message: 26/05/2007, 16h14
  5. pb pour alignées des entrées dans une listbox
    Par zx10 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/11/2006, 20h30

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