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 :
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 :
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 :
L'alimentation d'une listview se fait ainsi par exemple :
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é.
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
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)
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
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é.