listbox, Chart & filtres automatiques sont sur un bateau

RomainDumoulin

XLDnaute Nouveau
Bonjour tout le monde
listbox, Chart & filtres automatiques sont sur un bateau et c'est une galère...

J'ai créé une interface graphique (avec Excel2002) qui permet d'afficher des mesures. On clique sur le bouton en haut de la feuille Excel, puis on selectionne la ou les mesures, on clique sur PLOT et ca s'affiche...

Si j'utilise les filtres automatiques directement sur la feuille, la listbox se remplie en fonction du filtrage...Ok.

Mon probleme : l'affichage des graphiques ne prend pas en compte le filtrage : Ce sont toujours les premieres mesures de la liste non filtrée qui sont affichées...
Je comprend pourquoi et Je me bat pour essayer d'introduire dans la boucle ci dessous un petit "If Not Rows(j).Hidden Then" ...sans reussite...


'boucle sur les éléments de la listbox
For j = 0 To ListBoxLocataire.ListCount - 1
If ListBoxLocataire.Selected(j) = True Then

If Cht.SeriesCollection.Count > 0 Then Cht.SeriesCollection.Add
For i = 1 To 23
Plage(i) = Cells(j + 2, 11 + i) 'recuperation Ordonnees pour chaque série
Next i

Si quelqu un peut me faire profiter de ses competences ? Je lui serai vraiment reconnaissant!
MErci !
et à bientot
 

Pièces jointes

  • databaseRom.zip
    48.5 KB · Affichages: 66
  • databaseRom.zip
    48.5 KB · Affichages: 64
  • databaseRom.zip
    48.5 KB · Affichages: 71
G

Guest

Guest
Re : listbox, Chart & filtres automatiques sont sur un bateau

Bonjour,

Sans avoir ouvert ton fichier peut-être que:

Code:
For i = 1 To 23
If Not  Cells(j + 2, 11 + i).EntireRow.Hidden Then Plage(i) = Cells(j + 2, 11 + i) 'recuperation Ordonnees pour chaque série
Next i
suffira
Mais tu risques d'avoir des valeurs 0 dans ton tableau Plage.

Aussi peut-être que:
Code:
    Dim Plage()
    Dim k As Integer
    '.... suite du code
    For i = 1 To 23
        If Not Cells(j + 2, 11 + i).EntireRow.Hidden Then
            k = k + 1
            ReDim Preserve Plage(1 To j)
            Plage(k) = Cells(j + 2, 11 + i)  'recuperation Ordonnees pour chaque série
        End If
    Next i
    '.....Suite du code
irait mieux?

A+
 

RomainDumoulin

XLDnaute Nouveau
Re : listbox, Chart & filtres automatiques sont sur un bateau

Salut Hasco !
et merci pour te pencher sur mon histoire drole...
dis moi si je me trompe mais je pense que ta proposition de code ne fonctionne pas et/ou je n'arrive pas exploiter tes conseils

"j" boucle sur les données selectionnées dans la listbox.
For j = 0 To ListBoxLocataire.ListCount - 1
If ListBoxLocataire.Selected(j) = True Then

donc :
For i = 1 To 23
If Not Cells(j + 2, 11 + i).EntireRow.Hidden Then
k = k + 1
ReDim Preserve Plage(1 To j)
Plage(k) = Cells(j + 2, 11 + i) 'recuperation Ordonnees pour chaque série
End If
Next i


ne fonctionne pas quand les données sont filtrées et que l'index de la cellule visible n'est pas egale au index de la mesure selectionnée dans la listbox, tu me comprend?

A partir de ta proposition et en essayant de reflechir, l idée est de faire un tableau des valeurs visibles dans la feuille puis les comparer avec les mesures selectionnées dans la listbox...
et c'est dans la manipulation de tableaux que je coince... Si tu vois la ou les erreurs, je suis preneur ! merci !

ca bug a la ligne en rouge...


' recupere les lignes non cachées...

For lgLigDeb = 2 To Range("A" & Cells.Rows.Count).End(xlUp).Row
If Not Rows(lgLigDeb).Hidden Then
k = k + 1
ReDim Preserve visibles(1 To k)
visibles(k) = Cells(j + 2)

End If
Next lgLigDeb

'essay

For j = 0 To ListBoxLocataire.ListCount - 1 'boucle sur les éléments de la listbox
If ListBoxLocataire.Selected(j) = True Then

If Cht.SeriesCollection.Count > 0 Then Cht.SeriesCollection.Add

For i = 1 To 23
Plage(i) = visibles(j, 11 + i) 'recuperation Ordonnees pour chaque série
Next i


With Cht
.SetData C.chDimCategories, C.chDataLiteral, Tableau
.SeriesCollection(x).SetData C.chDimValues, C.chDataLiteral, Plage

End With

x = x + 1
Erase Plage
End If
Next j
 

RomainDumoulin

XLDnaute Nouveau
Re : listbox, Chart & filtres automatiques sont sur un bateau

RESOLU,
avec les moyens du bord : sans redimensionnement dynamique...mais resolu!
Merci encore a toi HASCO!!!
:cool:


'afficher les mesures selectionnées

Private Sub CommandButton1_Click()
Dim i As Integer, x As Integer
Dim j As Integer
Dim Tableau(23)
Dim Plage(23)
Dim visibles(1000, 23)
Dim k As Integer

Dim lgLigDeb As Integer

'suppression des series existantes dans le ChartSpace
For i = Cht.SeriesCollection.Count To 1 Step -1
Cht.SeriesCollection.Delete i - 1
Next i

'Abscisses( plage de frequences )
For i = 1 To 23
Tableau(i) = Cells(1, 11 + i)
Next i

k = 0
For lgLigDeb = 2 To Range("A" & Cells.Rows.Count).End(xlUp).Row
If Not Rows(lgLigDeb).Hidden Then
k = k + 1
'ReDim Preserve visibles(1 To k, 23)
For i = 1 To 23
visibles(k, i) = Cells(lgLigDeb, i + 11)
Next i

End If
Next lgLigDeb


For j = 0 To ListBoxLocataire.ListCount - 1 'boucle sur les éléments de la listbox
If ListBoxLocataire.Selected(j) = True Then

If Cht.SeriesCollection.Count > 0 Then Cht.SeriesCollection.Add

For i = 1 To 23
Plage(i) = visibles(j + 1, i) 'recuperation Ordonnees pour chaque série
Next i

With Cht
.SetData C.chDimCategories, C.chDataLiteral, Tableau
.SeriesCollection(x).SetData C.chDimValues, C.chDataLiteral, Plage

End With
x = x + 1
Erase Plage
End If
Next j
 

Discussions similaires

Statistiques des forums

Discussions
312 765
Messages
2 091 901
Membres
105 096
dernier inscrit
CHOPIN