Alimentation de controles combo, listview, listbox

zoummuoz

XLDnaute Nouveau
Bonjour a tous.
Merci pour votre forum, qui depuis quelques jours est une mine d'info pour moi qui commence le VBA sous excel.
Je ne suis pas encore intervenu sur le forum car je debute ...
Je reprends un projet qui est historiquement sous excel. Tous l'interfacage et les etats s'y trouvent, mais pas en VBA, en macro XL4.
C'est une gestion de planning, groupes, salles, moyens, budget, ...
Mon but est de sortir les données d'excel et de les passer sous mysql. Je conserve l'interface qui sous excel car elle est impec.
Mon soucis est benin mais je n'arrive pas a trouver une solution. J'ai parcouru votre forum en long et en large mais je trouve pas...

J'ai une fonction :
Code:
Public Function MysqlTableau(requete As String) As Variant
elle execute mes requete (SELECT) et me retourne un tableau.
Avec ce tableau j'alimente mes controles graphiques. Pour ce faire j'ai remarqué qu'il faut que je le transpose (application.transpose) car il est issue d'un recordset (.getrow=tableau).
J'ai une autre fonction :
Code:
Public Function MAJControlList(Tableau As Variant, ByVal ListViewBoxCombo As Control, TypeControle As Integer)
je lui envoye le tableau, le controle, et je lui dit quel est son type (listbox, listview, combo) et elle me le rempli avec le tableau, en conservant mes precieux ID de mysql comme index de mes listes (ce qui facilite mes requetes par la suite), bien sur masqués et en me colorisant les lignes (listview) en fonction d'un etat.

L'alimentation d'une listbox se fait ainsi par exemple :
Code:
 'La colonne pour l'index et la valeur de retour de la liste
        LstViewBox.BoundColumn = 1
        
        'Colonne qui va s'afficher si selection :
        LstViewBox.TextColumn = 2
        
        'Remplissage et indexation de la lisbox.
        LstViewBox.List = Tableau

L'alimentation d'une listview se fait ainsi par exemple :
Code:
       For colonne = 1 To UBound(Tableau, 2)
    
                    'La premiere et la derniere colonne ne sont pas affichée
            If colonne = 1 Or colonne = UBound(Tableau, 2) Then
                LstViewBox.ColumnHeaders.Add , , CStr(Tableau(1, colonne)), 0
            Else
                LstViewBox.ColumnHeaders.Add , , CStr(Tableau(1, colonne)), 90
            End If
    
        Next colonne
 
        'ECRITURE DES LIGNES DANS LE LIST VIEW
                'on cree un sub item pour le lisview
                For ligne = 1 To UBound(Tableau, 1)
            
                    For colonne = 1 To UBound(Tableau, 2)

                        If colonne = 1 Then
                            LstViewBox.ListItems.Add , , CStr(Tableau(ligne, colonne))
                            If Tableau(ligne, UBound(Tableau, 2)) = 0 Then
                                'Si c'est la derniere colonne et que c'est = 0 alors grisé
                                LstViewBox.ListItems(ligne).ForeColor = RGB(128, 128, 128)
                            End If
                        Else
                            LstViewBox.ListItems(ligne).ListSubItems.Add , , CStr(Tableau(ligne, colonne))
                            If Tableau(ligne, UBound(Tableau, 2)) = 0 Then
                                'Si c'est la derniere colonne et etat=0 alors grisé; colonne-1 car le listviewsubitem commence a 0 ! et merde !
                                LstViewBox.ListItems(ligne).ListSubItems(colonne - 1).ForeColor = RGB(128, 128, 128)
                            End If
                        End If
                               
                    Next colonne
            
                Next ligne
                
         'Selectionne la premiere ligne de la liste.
         LstViewBox.ListItems(1).Selected = True
Tout fonctionne impec !! MAIS :
Si j'ai un seul enregistrement dans mon tableau mes list(box, combo, view) se replissent bien, mais les colonnes passent en ligne. Je m'explique :

Ma fonction sql recupere un tableau : ID - Nom - Etat

Si j'ai un seul enregistrement les lists affichent :
ID
Nom
Etat

Le UBound(Tableau) me renvois 1, le UBound(Tableau,2)me renvois une erreur.
Si je passe a 2 ou plus enregistrements à afficher, tout est impec !.

Avez vous une idée ? Moi je sais plus et je ne veux surtout pas faire une usine a gaz pour gerer cela, les deux fonctions presentées etant tres solucitées dans l'applie.

Merci a tous pour votre interet et pour tout ce que vous m'avez deja apporté.:)
 

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 534
dernier inscrit
Kalamymustapha