Comment connaître le nom d'un contrôle ? [Résolu]

Signaler
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
-
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
-
Bonjour tout le monde,

Je passe un objet (combobox) à une fonction :

Private Sub comboTypeSupport_Click()    sql "SELECT id, nom, max_boules FROM taille_support WHERE ref_support IN (SELECT id from support WHERE id " & comboTypeSupport.ItemData(comboTypeSupport.ListIndex) & ")"
    BDRemplirListe sql, comboTailleSupport
End Sub


Voici la fonction :

Public Sub BDRemplirListe(ByVal sql As String, ByRef Liste As Control)
    Dim rsTable As Recordset
    
    If (TypeOf Liste Is ListBox) Or (TypeOf Liste Is ComboBox) Then
        Set rsTable = BD.OpenRecordset(sql, dbOpenSnapshot)
        Liste.Clear
        While Not rsTable.EOF
            
            Liste.AddItem rsTable(1) & " (" & rsTable(2) & " boules)"
            Liste.ItemData(Liste.NewIndex) = rsTable(0)
            rsTable.MoveNext
        Wend
    End If
End Sub


Je voudrais savoir comment je peux connaîre le nom de la liste (name) passée en paramètre ?

J'aimerais mettre un if en disant :

SI le nom est A alors :

Liste.AddItem rsTable(1) & " (" & rsTable(2) & " boules)"

autrement

Liste.AddItem rsTable(1)

Merci d'avance pour l'aide.

beegees

4 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
pas d'accord avec jmf0

très bonne habitude que de teste le TypeOf
en effet, tu demande un Control, ca évite tout accident.
(ajoutes un Else avec une injureBox qui va te permettre de corriger tout manquement)

pour ta question première, fais simplement Liste.Name pour connaitre le nom du controle, tout simplement.

cependant, l'ajout de ton boolean est une bien meilleure solution. Ca évite de lier ta fonction a un cas spécifique, elle est plus réutilisable, mieux structurée.
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
Bonjour,

ce n'est pas le nom du contrôle que tu dois passer, mais bien (comme tu le fais) l'objet Controle lui-m^me.
Passe-le as object.


La méthode additem agissant de la même manière pour une ListBox ou une Combobox :


- inutile d'utiliser TypeOf


- inutile de déterminer le nom du contrôle concerné

PS : je ne comprends pas la raison de ta méthode additem, plutôt que de lier ton contrôle au recordset !
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Bonjour,

Merci pour ta réponse.

Bon, j'ai trouvé un moyen de contourner en mettant un paramètre optionnel :

Public Sub BDRemplirListe(ByVal sql As String, ByRef Liste As Control, Optional plus As Boolean = False)
    Dim rsTable As Recordset
    
    If (TypeOf Liste Is ListBox) Or (TypeOf Liste Is ComboBox) Then
        Set rsTable = BD.OpenRecordset(sql, dbOpenSnapshot)
        
        Liste.Clear
        While Not rsTable.EOF
            If plus = True Then
                Liste.AddItem rsTable(1) & " (" & rsTable(2) & " boules)"
                Liste.ItemData(Liste.NewIndex) = rsTable(0)
                rsTable.MoveNext
            Else
                Liste.AddItem rsTable(1)
                Liste.ItemData(Liste.NewIndex) = rsTable(0)
                rsTable.MoveNext
            End If
        Wend
    End If
End Sub


Donc si je passe true, je peux ajouter ceci :

"(boules)"

Merci encore pour ton aide.

beegees
Messages postés
152
Date d'inscription
mardi 4 novembre 2008
Statut
Membre
Dernière intervention
10 avril 2017
1
Cool,

Merci pour ta réponse.

Pour une fois que je fais quelque chose de bien

beegees