avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 2012
-
3 déc. 2011 à 18:26
avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 2012
-
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.
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 4 déc. 2011 à 08:31
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
avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 20123 4 déc. 2011 à 14:54
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;
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 3 déc. 2011 à 19:57
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
avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 20123 3 déc. 2011 à 20:49
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 20123 3 déc. 2011 à 23:16
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 4 déc. 2011 à 08:38
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 4 déc. 2011 à 08:52
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 4 déc. 2011 à 09:40
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
avyrex1926
Messages postés360Date d'inscriptiondimanche 3 décembre 2006StatutMembreDernière intervention 3 janvier 20123 4 déc. 2011 à 12:47
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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018212 4 déc. 2011 à 13:14
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