Filtrer donnée dans MSHFlexgrid VB6 [Résolu]

avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 3 déc. 2011 à 18:26 - Dernière réponse : avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention
- 4 déc. 2011 à 14:54
Bonjour a tous,

Je rencontre un probleme en voulant trier des données dans mon MSHFlexgrid1 (Projet VB6)

Je m'explique,

Dand ma colonne 4 se trouve un ID(Numéro de magasin ex:00167D) et dans la colonne 5, ce trouve une date format DD-MM-YYYY ex: (06-11-2011)qui représente la date ou le magasin fut entré sous une nouvelle donnée.

Donc dans ma liste, si je prend par example l'ID:00167D, il peux y avoir plusieurs ligne mais avec des date différente.

EX:
00167D 03-10-2011
00167D 26-09-2011
00167D 26-09-2011
00167D 19-09-2011
00167D 12-09-2011
00167D 05-09-2011
00167D 04-09-2011
00167D 04-09-2011
00167D 04-09-2011
00167D 04-09-2011
00167D 29-08-2011
00167D 22-08-2011
00167D 15-08-2011
00167D 08-08-2011
00167D 01-08-2011
00167D 31-07-2011
00167D 31-07-2011
00167D 31-07-2011
00167D 25-07-2011
00167D 18-07-2011
00167D 11-07-2011
00167D 04-07-2011


Mon probléme est que je veux garder dans mon MSHFlexgrid1 seulement la dernière date, la plus récente, et ce, par ID colonne 4.

Voici mon code jusqu'à maintenant.

Parcontre, j'obtien une erreur:

Erreur d'exécution 381 Indice hors limites avec cette partie du code:
If MSHFlexGrid1.TextMatrix(NewRow, 4) = strCol4 Then

Pouvez-vous m'aider s.v.p.?

Voici mon code complet.

Merci encore pour votre aide.


Private Sub FetchNoRowCol(ws As Excel.Worksheet, ByRef NoOfRows As Long, _
        ByRef NoOfColumns As Long)
   
    NoOfRows = ActiveSheet.Cells.SpecialCells(11).Row
NoOfColumns = ActiveSheet.Cells.SpecialCells(11).Column
               
End Sub


Dim xlObject     As Excel.Application
Dim xlWB         As Excel.Workbook
Dim NoOfRows     As Long
Dim NoOfColumns  As Long
Dim r As Long, NewRow As Long, RowToDelete As Long
Dim strCol4 As String, strCol5 As String
Dim strNewCol4 As String, strNewCol5 As String



For r = 0 To MSHFlexGrid1.Rows - 1
      If r <= MSHFlexGrid1.Rows - 1 Then
         strCol4 = MSHFlexGrid1.TextMatrix(r, 4)
         strCol5 = MSHFlexGrid1.TextMatrix(r, 5)
         If Len(strCol4) > 0 And Len(strCol5) > 0 Then
            strCol5 = CDate(MSHFlexGrid1.TextMatrix(r, 5))
            For NewRow = r - 1 To MSHFlexGrid1.Rows - 1
               RowToDelete = 0
               If NewRow <= MSHFlexGrid1.Rows - 1 Then
                  If MSHFlexGrid1.TextMatrix(NewRow, 4) = strCol4 Then
                     strNewCol5 = CDate(MSHFlexGrid1.TextMatrix(NewRow, 5))
                     If DateDiff("s", strCol5, strNewCol5) > 0 Then
                        RowToDelete = r
                     ElseIf DateDiff("s", strCol5, strNewCol5) < 0 Then
                        RowToDelete = NewRow
                     End If
                     If RowToDelete Then
                        MSHFlexGrid1.RemoveItem RowToDelete
                        r = r - 1
                     End If
                  End If
               End If
            Next NewRow
         End If
      End If
   Next r
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 4 déc. 2011 à 08:31
3
Merci
Pourtant, je suis bien dans un project VB6

Permets-moi d'en douter, lorsque je lis ceci :
Private Sub FetchNoRowCol(ws As Excel.Worksheet, ByRef NoOfRows As Long, _
        ByRef NoOfColumns As Long)
   
    NoOfRows = ActiveSheet.Cells.SpecialCells(11).Row
NoOfColumns = ActiveSheet.Cells.SpecialCells(11).Column
               
End Sub

qui ne saurait tourner sous VB6, mais uniquement sous VBA/Excel
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Merci ucfoutu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de ucfoutu
Meilleure réponse
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 4 déc. 2011 à 14:54
3
Merci
Je dirais même plus:
select 
            ff.carrier_id,
            ff.effective_dt,
            ff.region_id,
            ff.access_id,
            ff.chg_metric,
            ff.charge_cur,
            ff.charge,
            ff.min_cur,
            ff.min_charge,
            ff.max_cur,
            ff.max_charge,
            ff.access_key,
            rd.low_key_value,
            rd.high_key_value          
from 
            ff_access_charges_detail ff,
            region_detail rd,
    (select max(effective_dt) as max_dt, region_id
     from ff_access_charges_detail
             group by region_id) max_ff
where 
            ff.region_id=rd.region_id,
            and ff.effective_dt >= to_date('01/01/2009','mm/dd/rrrr')
            and ff.region_id = max_ff.region_id
    and ff.effective_dt = max_ff.max_dt;

Merci avyrex1926 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de avyrex1926
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 3 déc. 2011 à 19:57
0
Merci
Bonjour,
épuisant, après près de 6 ans de pratique de ce forum et 364 messages !
Ce que tu montres n'est pas du code de développement VB6 !

Je vais donc très volontairement me contenter (et n'irai pas plus loin dans ces conditions) de t'inviter à déterminer le nombre de colonnes de ta grille !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 3 déc. 2011 à 20:49
0
Merci
Bonjour ucfoutu

Merci pour ton intervention.
Désolé de voir que ce code n'est pas du développement vb6. Pourtant, je suis bien dans un project VB6.

N'étant pas un spécialiste comme toi, mais bien un débutant qui s'efforce tant bien que mal, sachant très bien que quelqu'un d'autre ne prendrait même pas le temps d'écrire sur le forum, ou bien même d'afficher son code, sachant de sa médiocrité ou de son manque d'expérience.

Dans mon cas, non. Et c'est pour ça que j'ai besoin d'une personne d'expérience comme toi pour m'aider.

Anfin, je désire tout de même répondre à tes questions.
Dans ma grille, au total, j'ai 14 colonnes.
0 étant la première, je veux supprimez-les ligne basé sur les colonnes 4 et 5.
Merci encore pour ton aide.
Commenter la réponse de avyrex1926
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 3 déc. 2011 à 23:16
0
Merci
Est-ce qu'il serait plus facile d'utiliser un base de donné access?

Normallement, j'uttiliserais se code:
Private Sub Command9_Click()
Dim sSQL2 As String
    Dim oRST2 As ADODB.Recordset
  Set oRST2 = New ADODB.Recordset
  Dim oConnect2 As ADODB.Connection
  Set oConnect2 = New ADODB.Connection
'

     oConnect2.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=" & parameter.fuel_surcharge.Text

sSQL2 = "SELECT [CARRIER_ID],[ACCESS_ID],[DATE_ID],[CHARGE] FROM [fuel_surcharge_1_new] " '"

oRST2.Open sSQL2, oConnect2

If oRST2.BOF = False Then

 MSHFlexGrid1.Clear
MSHFlexGrid1.Rows = 2
MSHFlexGrid1.Cols = 4

'Header
MSHFlexGrid1.TextMatrix(0, 0) = "CARRIER_ID"
MSHFlexGrid1.TextMatrix(0, 1) = "ACCESS_ID"
MSHFlexGrid1.TextMatrix(0, 2) = "DATE_ID"
MSHFlexGrid1.TextMatrix(0, 3) = "CHARGE"

Do Until oRST2.EOF
  With MSHFlexGrid1
        'do the this if u have multiple field to add on your flexgrid
        .AddItem oRST2("CARRIER_ID") & vbTab & oRST2("ACCESS_ID") & vbTab & oRST2("DATE_ID") & vbTab & oRST2("CHARGE")
  oRST2.MoveNext
  End With
Loop
End If


Peut-on filter a l'entré dans le MSHFlexgrid1?
Commenter la réponse de avyrex1926
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 4 déc. 2011 à 08:38
0
Merci
A moins que .....
à moins que, ailleurs dans du code VB6, tu aies défini le paramètre ws passé à ta procédure..
Mais à ce moment-la : ce n'est plus ActiveSheet, mais ws, qu'il faut utiliser


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 4 déc. 2011 à 08:52
0
Merci
et lorsque, répondant à mes questions, tu dis :
Dans ma grille, au total, j'ai 14 colonnes.

précise comment tu l'as vérifié.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 4 déc. 2011 à 09:40
0
Merci
Et autre chose (je viens de lire tout)
dans ta boucle :
For r = 0 To MSHFlexGrid1.Rows - 1

tu supprimes des lignes. Comment, dès lors, t'étonner de ce que, n'y retrouvant plus le même compte, tu te réfères à un n° de ligne n'existant plus ?
On ne le répètera jamais assez : lorsque, dans une boucle, on supprime des items, il faut parcourir les items de BAS EN HAUT (Step-1) pour éviter ces croche-pieds-là !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 4 déc. 2011 à 12:47
0
Merci
Dac

Avec cette outil VB6, je suis en mesure de pouvoir extraire les données du MSHFlexgrid1 vers Excel.
Private Sub FetchNoRowCol(ws As Excel.Worksheet, ByRef NoOfRows As Long, _
        ByRef NoOfColumns As Long)
   
    NoOfRows = ActiveSheet.Cells.SpecialCells(11).Row
NoOfColumns = ActiveSheet.Cells.SpecialCells(11).Column
               
End Sub


et lorsque, répondant à mes questions, tu dis :

Dans ma grille, au total, j'ai 14 colonnes.


précise comment tu l'as vérifié.


Rien de plus facile que d'ouvrir les yeux et regarder bien attentivement la grille avec les 14 colonnes, et oui, il y a bien 14 colonnes.



3e point: For r = 0 To MSHFlexGrid1.Rows - 1 versus 250 To 1 MSHFlexGrid1.Rows
Comment faire alors pour valider la dernier ligne si ce n'est jamais pareille.


Je veux juste valider quelque chose ici.
Commentaires de ucfoutu
Je n'ai pas réellement mauvais caractère, mais ne supporte que très difficilement la fainéantise notoire et encore plus difficilement que l'on tente de développer sans connaître les bases élémentaires de son outil de développement.
Dans cet esprit, j'aide plus volontiers un débutant qui se retrousse les manches qu'un "ancien" qui montre qu'il ne s'y est jamais "réellement mis" et n'a jamais fait un effort personnel, privilégiant l'utilisation de copier/coller .


Je comprend. Par contre, si tu as remarqué, ça fessait très longtemps que je n'était pas venu sur le forum. Pour quelle raison? Et bien, n'étant pas dans le domaine de la programmation mais bien en gestion, je n'ai pu continuer dans cette vois. Dommage mais bon, il m'arrive parfois de déterrer des notion que je n'utilise jamais en ce moment.

Ceci étant dit,selon moi, je ne suis pas de ce type de personne:
mais ne supporte que très difficilement la fainéantise notoire et encore plus difficilement que l'on tente de développer sans connaître les bases élémentaires de son outil de développement.
Dans cet esprit
.

Merci quand même de ton aide.

Pour moi, un forum ce doit d'avoir des personnes passionné et non se comporter de cette façon.

En tant que directeur d'un entreprise maintenant, il serait difficile pour un employé de supporter des critiques tell que les tiennes, et de ce fait, ça me certifie que je ne dois jamais parler de cette façon envers personne.

Je tien a te remercier pour cela.

Bon Dimanche a toi.
Commenter la réponse de avyrex1926
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 4 déc. 2011 à 13:14
0
Merci
Ecoute :
Je ne vais pas m'attarder !
3e point: For r = 0 To MSHFlexGrid1.Rows - 1 versus 250 To 1 MSHFlexGrid1.Rows
Comment faire alors pour valider la dernier ligne si ce n'est jamais pareille.

Et je t'ai dit :
il faut parcourir les items de BAS EN HAUT (Step-1) pour éviter ces croche-pieds-là

et cela ne te dis rien ?
Si c'est vraiment cela et si tu es
directeur d'un entreprise maintenant
, n'hésite surtout pas à faire à quelqu'un (il y en a des milliards) à qui cela "dit" quelque-chose, hein ..
Allez ! je m'en vais de cette discussion.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
avyrex1926 360 Messages postés dimanche 3 décembre 2006Date d'inscription 3 janvier 2012 Dernière intervention - 4 déc. 2011 à 14:46
0
Merci
Et bien je vais suivre ton conseil.

J'y vais dans mon champs d'expertise, le code SQL:

select 
            ff.carrier_id,
            ff.effective_dt,
            ff.region_id,
            ff.access_id,
            ff.chg_metric,
            ff.charge_cur,
            ff.charge,
            ff.min_cur,
            ff.min_charge,
            ff.max_cur,
            ff.max_charge,
            ff.access_key,
            rd.low_key_value,
            rd.high_key_value          
from 
            ff_access_charges_detail ff,
            region_detail rd 
where 
            ff.region_id=rd.region_id,
            and ff.effective_dt >= to_date('01/01/2009','mm/dd/rrrr')


Allez ! je m'en vais de cette discussion.
Commenter la réponse de avyrex1926

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.