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

VB 6 et antérieur Discussion :

Ajouter une valeur dans une Combobox


Sujet :

VB 6 et antérieur

  1. #1
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut Ajouter une valeur dans une Combobox


    Dans un formulaire, j'ai implanté une combobox issue des composants Microsoft Forms 2.0 Object Librairy.
    Je souhaiterai comme dans un formulaire d'Access, récupérer la valeur saisie dans la liste et l'ajouter à celle-ci si elle n'y fait pas partie.

    Voici le code que j'utilise :
    Code VS6 : 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
    Private Sub cboLegumes_Validate(Cancel As Boolean)
        If Me.cboLegumes.ListIndex = -1 Then
        Set m_rsLegume = New ADODB.Recordset
        With m_rsLegume
            .CursorLocation = adUseClient
            .ActiveConnection = cnnMesTomates
            .Source = "SELECT * FROM T_Legumes"
            .Open , , adOpenStatic, adLockBatchOptimistic, adCmdText
        End With
        With m_rsLegume
            .AddNew
            .Fields(1) = Me.cboLegumes.Text
            .Update
        End With
        End If
     
    End Sub

    Malheureusement, deux problèmes subsistent :
    1. La valeur ne s'ajoute pas à la liste
    2. La liste ne se met pas à jour


    Que manque-t-il pour faire mon bonheur

    Merci à tous pour vos réponses toujours avisées
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  2. #2
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    à tous

    Il semblerait que mon problème soit relativement complexe. Cependant, pourquoi la séquence d'ajout ne fonctionne-elle pas ?
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  3. #3
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Le problème est résolu.
    Je vous mets, ci-dessous - pour ceux que cela intéresse, le code que j'ai écrit.

    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
    Private Sub cboLegumes_Validate(Cancel As Boolean)
        ' Déclaration des variables
        Dim l_NouvelleCle As Long
     
        ' Ajoute la nouvelle valeur saisie si elle n'appartient pas à la liste
        If Me.cboLegumes.ListIndex = -1 Then
        Set m_RecordSet = New ADODB.Recordset
        With m_RecordSet
            .CursorLocation = adUseClient
            .ActiveConnection = cnnMesTomates
            .Open "SELECT * FROM T_Legumes", , adOpenStatic, adLockOptimistic, adCmdText
        End With
        With m_RecordSet
            .AddNew
            .Fields("LibelLegume") = Me.cboLegumes.Text
            .Update
        End With
        ' Récupération de la clé de la nouvlle valeur saisie
        l_NouvelleCle = m_RecordSet.Fields(0)
        End If
     
        ' Réactualise la liste
        m_strLegume = "SELECT * FROM T_Legumes ORDER BY LibelLegume"
        Call AfficheContenuListe("cboLegumes", m_strLegume)
        ' Affecte la nouvelle valeur à liste
        Me.cboLegumes = l_NouvelleCle
    End Sub
    et voici le détail de la routine : AfficheContenuListe

    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
    Sub AfficheContenuListe(NomListeDeroulante As String, strSql As String)
        Dim l_intCompteur As Integer, l_intnbrecords As Integer
     
        ' Contrôle le contenu de la liste et au besoin la vide
        With Me.Controls(NomListeDeroulante)
            .Value = ""
            l_intnbrecords = .ListCount
            If l_intnbrecords > 0 Then
                For l_intCompteur = l_intnbrecords - 1 To 0 Step -1
                    .RemoveItem l_intCompteur
                Next
            End If
            l_intCompteur = 0
        End With
     
        ' Initialise le jeu d'enregistrement
        Set m_RecordSet = New ADODB.Recordset
        With m_RecordSet
            .CursorLocation = adUseClient
            .ActiveConnection = cnnMesTomates
            .Source = strSql
            .Open , , adOpenStatic, adLockBatchOptimistic, adCmdText
     
            ' Dimensionne les colonnes de la liste déroulante
            With Me.Controls(NomListeDeroulante)
                .ColumnCount = 2
                .ColumnWidths = "0;1"
            End With
     
            ' Procède au remplissage de la liste
            Do While Not .EOF
                Me.Controls(NomListeDeroulante).AddItem
                    Me.Controls(NomListeDeroulante).List(l_intCompteur, 0) = .Fields(0)
                    Me.Controls(NomListeDeroulante).List(l_intCompteur, 1) = .Fields(1)
                .MoveNext
                l_intCompteur = l_intCompteur + 1
            Loop
        End With
    Remarque : m_recordSet est une variable de portée module, donc déclarée au début de ceui-ci.

    Bonne journée à tous
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. ajouter une valeur d'une clé dans une map
    Par chirazch dans le forum C++
    Réponses: 7
    Dernier message: 06/05/2013, 18h36
  3. Réponses: 0
    Dernier message: 03/08/2010, 16h05
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. Réponses: 1
    Dernier message: 25/09/2006, 17h15

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