Flexgrid MultiSelection et récupération de donnée

Résolu
MP2P Messages postés 5 Date d'inscription lundi 7 février 2005 Statut Membre Dernière intervention 5 janvier 2006 - 31 août 2005 à 17:12
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 - 1 sept. 2005 à 10:24
salut a tous

j'effectue un projet en vb je dois utiliser une flexgrid le probleme c'est que je n'arrive pas a faire une sélection de plusieurs lignes (elles ne doivent pas forcement etre à la suite) recupérer les lignes sélectionnées pour pouvoir imprimer dans un document

j'arrive a selectionner une ligne et limprimer mais pas plusieurs lignes
Si quelqu'un aurait des solutions à apporter(codes) envoyer les moi
je dois livrer demin c'est URGENT

merci beaucoup

3 réponses

Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
1 sept. 2005 à 06:26
Salut MP2P,


Tu peux t'amuser à tenir une liste des lignes selectionnées et les mettre en couleurs. Par exemple, sur le clic de la flex




Private tablo() As Integer





dans form_load


redim tablo(0)






dans MSFlexGrid1_Click




Call Surligner_Multiple_Ligne(MSFlexGrid1, tablo)





puis dans un module




Public Sub Surligner_Multiple_Ligne(flex As MSFlexGrid, lignes() As Integer, _

Optional CouleurDflt As Variant = &H80000005, _


Optional Couleur As Variant = vbGreen)

Dim i As Integer

Dim j As Integer

Dim RowSelect As Integer



With flex

RowSelect = .RowSel

Call update_ligne_select(flex, lignes, CouleurDflt, Couleur)



Dim max As Integer

max = UBound(lignes) - 1



For i = 0 To max 'Traite chaque ligne

If lignes(i) -1 Then

.Row = lignes(i)

For j = 0 To .Cols -
1 'Mise en couleur de la selection

.Col = j

.CellBackColor = Couleur

Next j

End If

Next i



If .Rows 0 Then .RowSel = RowSelect

End With

End Sub



Public Sub update_ligne_select(flex As MSFlexGrid, lignes() As Integer, _


Optional Couleur As Variant = &H80000005, _


Optional CouleurSelect As Variant = vbGreen)

Dim j As Integer

Dim i As Integer

Dim max As Integer

Dim RowSelect As Integer



Dim found As Boolean

With flex

RowSelect = .RowSel

.Col = 0

max = UBound(lignes)

For i = 0 To max

If lignes(i) = .RowSel Then

found = True

.Row = lignes(i)

If .CellBackColor = CouleurSelect Then

For j = 0 To .Cols - 1

.Col = j

.CellBackColor = Couleur

Next j

lignes(i) = -1

End If

End If

Next i



' Ajouter dans le tablo des selected

If Not found Then

If max = 0 Then

ReDim lignes(0 To max + 1)

Else

ReDim Preserve lignes(0 To max + 1)

End If

lignes(max) = .RowSel

End If



If .Rows 0 Then .RowSel = RowSelect

End With

End Sub



C'est clair que c'est à améliorer vu
qu'il faudrait par exemple supprimer du tablo au lieu de mettre -1 ...
que c'est pas terrible de parcourir deux fois le tableau des
selections, alors qu'un seul suffit ... bref c'est perfectible ...




Tout dépend si tu as un faible nombre de lignes dans ta flex :



Si
tel est le cas, tu peux déclarer un tableau de booléen de 0 à
flex.rows-1 (initialisé à false)

et sur le click mettre dans la bonne couleur toutes les colones de flex.rowsel en fonction de tablo(flex.rowsel) et du coups la mise à jour du tablo : tablo(flex.rowsel) not tablo(flex.rowsel). Pour imprimer : parcourir tablo et imprimer si tablo(flex.rowsel) True . Au quel cas, tu simplifiras considérablement les traitements...



Au final, tes lignes selectionnées sont dans tablo que tu n'as plus
qu'à parcourir pour faire la suite de ton traitement d'impression (ici vérifier que -1)...


++

Zlub


3
MP2P Messages postés 5 Date d'inscription lundi 7 février 2005 Statut Membre Dernière intervention 5 janvier 2006
1 sept. 2005 à 10:14
je te remercie bcp pour le code
mon chef sera content!
@+
3
Zlub Messages postés 809 Date d'inscription mercredi 11 octobre 2000 Statut Membre Dernière intervention 29 septembre 2010 8
1 sept. 2005 à 10:24
Salut,

De rien ... mais essais d'arranger un peu le code ... c'est codé à l'arrachée ...

++

Zlub

<hr size="2" width="100%">
0
Rejoignez-nous