OVH Cloud OVH Cloud

un truc complètement fou... impossible ?

9 réponses
Avatar
Bismark Prods
Bonjour,

Re-moi avec un problème vraiment extraordinaire...

Comment pourriez vous expliquer qu'en faisant une boucle For tel que


For i = 1 to treeview.nodes.count 'on imagine 9 nodes
i... 'J'arrive avec un i=10 ?

Next i


Comment peut-on expliquer que je tombe toujours avec un i = max+1 ? Si vous
voulez je peux vous joindre le projet ?

Merci

9 réponses

Avatar
Crevecoeur Jérôme
Bonjour,
Faudrait pas faire la boucle de 0 à count -1 plutôt?

Dans tes réponses , tu demandes aux utilisateurs de tester avant de
poster...


Cordialement

--
----------------------------------------------------------------------------
--------------------
Crévecoeur Jérôme

ACS INFORMATIQUE
122,rue du Château d'orgemont
49000 ANGERS
Tel: 02 41 68 42 36 Fax: 02 41 68 42 48
----------------------------------------------------------------------------
---------------------
"Bismark Prods" a écrit dans le message de
news:
Bonjour,

Re-moi avec un problème vraiment extraordinaire...

Comment pourriez vous expliquer qu'en faisant une boucle For tel que


For i = 1 to treeview.nodes.count 'on imagine 9 nodes
i... 'J'arrive avec un i ?

Next i


Comment peut-on expliquer que je tombe toujours avec un i = max+1 ? Si


vous
voulez je peux vous joindre le projet ?

Merci




Avatar
Jérôme VERITE
Bonjour,

je dirai qu'il est tout a fait normal, d'obtenir 10 a la sortie de la boucle
dans la mesure ou VB incremente i a la fin de celle-ci et vérifie apres
incrémentation si i est <=9,
a la fin de la dernière itération, il fait i = i+1 avec i = 9 ==> i

Dim i As Integer

For i = 1 To 2
Next i
MsgBox i

cela affiche 3

Jérôme


"Bismark Prods" a écrit dans le message de news:

Bonjour,

Re-moi avec un problème vraiment extraordinaire...

Comment pourriez vous expliquer qu'en faisant une boucle For tel que


For i = 1 to treeview.nodes.count 'on imagine 9 nodes
i... 'J'arrive avec un i ?

Next i


Comment peut-on expliquer que je tombe toujours avec un i = max+1 ? Si


vous
voulez je peux vous joindre le projet ?

Merci




Avatar
Bismark Prods
Ca oui ! mais moi ca me fait 3 à l'interieur de la boucle For !!!!


"Jérôme VERITE" a écrit dans le message de
news:
Bonjour,

je dirai qu'il est tout a fait normal, d'obtenir 10 a la sortie de la


boucle
dans la mesure ou VB incremente i a la fin de celle-ci et vérifie apres
incrémentation si i est <=9,
a la fin de la dernière itération, il fait i = i+1 avec i = 9 ==> i

Dim i As Integer

For i = 1 To 2
Next i
MsgBox i

cela affiche 3

Jérôme


"Bismark Prods" a écrit dans le message de news:

> Bonjour,
>
> Re-moi avec un problème vraiment extraordinaire...
>
> Comment pourriez vous expliquer qu'en faisant une boucle For tel que
>
>
> For i = 1 to treeview.nodes.count 'on imagine 9 nodes
> i... 'J'arrive avec un i ?
>
> Next i
>
>
> Comment peut-on expliquer que je tombe toujours avec un i = max+1 ? Si
vous
> voulez je peux vous joindre le projet ?
>
> Merci
>
>




Avatar
Bismark Prods
biensur que non ! jamais 0 avec les treeview !

"Crevecoeur Jérôme" a écrit dans le message de
news:
Bonjour,
Faudrait pas faire la boucle de 0 à count -1 plutôt?

Dans tes réponses , tu demandes aux utilisateurs de tester avant de
poster...


Cordialement

--
--------------------------------------------------------------------------


--
--------------------
Crévecoeur Jérôme

ACS INFORMATIQUE
122,rue du Château d'orgemont
49000 ANGERS
Tel: 02 41 68 42 36 Fax: 02 41 68 42 48
--------------------------------------------------------------------------


--
---------------------
"Bismark Prods" a écrit dans le message de
news:
> Bonjour,
>
> Re-moi avec un problème vraiment extraordinaire...
>
> Comment pourriez vous expliquer qu'en faisant une boucle For tel que
>
>
> For i = 1 to treeview.nodes.count 'on imagine 9 nodes
> i... 'J'arrive avec un i ?
>
> Next i
>
>
> Comment peut-on expliquer que je tombe toujours avec un i = max+1 ? Si
vous
> voulez je peux vous joindre le projet ?
>
> Merci
>
>




Avatar
Jérôme VERITE
alors vérifie que t'incrémente pas ta variable dans la boucle ou dans une
fonction appelée avec i passé comme argument byref où il pourrait etre
modifié

Jérôme

"Bismark Prods" a écrit dans le message de news:
#
Ca oui ! mais moi ca me fait 3 à l'interieur de la boucle For !!!!


"Jérôme VERITE" a écrit dans le message de
news:
> Bonjour,
>
> je dirai qu'il est tout a fait normal, d'obtenir 10 a la sortie de la
boucle
> dans la mesure ou VB incremente i a la fin de celle-ci et vérifie apres
> incrémentation si i est <=9,
> a la fin de la dernière itération, il fait i = i+1 avec i = 9 ==> i
>
> Dim i As Integer
>
> For i = 1 To 2
> Next i
> MsgBox i
>
> cela affiche 3
>
> Jérôme
>
>
> "Bismark Prods" a écrit dans le message de news:
>
> > Bonjour,
> >
> > Re-moi avec un problème vraiment extraordinaire...
> >
> > Comment pourriez vous expliquer qu'en faisant une boucle For tel que
> >
> >
> > For i = 1 to treeview.nodes.count 'on imagine 9 nodes
> > i... 'J'arrive avec un i ?
> >
> > Next i
> >
> >
> > Comment peut-on expliquer que je tombe toujours avec un i = max+1 ? Si
> vous
> > voulez je peux vous joindre le projet ?
> >
> > Merci
> >
> >
>
>




Avatar
Bismark Prods
c'est pas une mauvaise idée ton truc ! je vais testé ca !

"Jérôme VERITE" a écrit dans le message de
news:
alors vérifie que t'incrémente pas ta variable dans la boucle ou dans une
fonction appelée avec i passé comme argument byref où il pourrait etre
modifié

Jérôme

"Bismark Prods" a écrit dans le message de news:
#
> Ca oui ! mais moi ca me fait 3 à l'interieur de la boucle For !!!!
>
>
> "Jérôme VERITE" a écrit dans le message de
> news:
> > Bonjour,
> >
> > je dirai qu'il est tout a fait normal, d'obtenir 10 a la sortie de la
> boucle
> > dans la mesure ou VB incremente i a la fin de celle-ci et vérifie


apres
> > incrémentation si i est <=9,
> > a la fin de la dernière itération, il fait i = i+1 avec i = 9 ==> i
> >
> > Dim i As Integer
> >
> > For i = 1 To 2
> > Next i
> > MsgBox i
> >
> > cela affiche 3
> >
> > Jérôme
> >
> >
> > "Bismark Prods" a écrit dans le message de news:
> >
> > > Bonjour,
> > >
> > > Re-moi avec un problème vraiment extraordinaire...
> > >
> > > Comment pourriez vous expliquer qu'en faisant une boucle For tel que
> > >
> > >
> > > For i = 1 to treeview.nodes.count 'on imagine 9 nodes
> > > i... 'J'arrive avec un i ?
> > >
> > > Next i
> > >
> > >
> > > Comment peut-on expliquer que je tombe toujours avec un i = max+1 ?


Si
> > vous
> > > voulez je peux vous joindre le projet ?
> > >
> > > Merci
> > >
> > >
> >
> >
>
>




Avatar
Bismark Prods
oui mais là j'ai fait une form test :

Option Explicit

Private Type maStruct
sStr As String
sID As String
End Type

Dim tTab(50) As maStruct

Private Sub AddtTab(Info As maStruct)
Dim Li As Long
Dim Result As Boolean

Result = True

For Li = LBound(tTab) To UBound(tTab) Step 1
If tTab(Li).sID = Info.sID Then
Result = False
Exit For
End If
Next Li

If Result Then
Li = GetFreeIdxtTab
If Li = -1 Then
MsgBox ("Le nombre maximal d'élément a été atteint !")
Exit Sub
Else
tTab(Li).sID = Info.sID
tTab(Li).sStr = Info.sStr
End If
End If
End Sub

Private Sub RemovetTab(ID As String)
Dim Li As Long

For Li = LBound(tTab) To UBound(tTab) Step 1
If tTab(Li).sID = ID Then
tTab(Li).sID = ""
tTab(Li).sStr = ""
End If
Next Li
End Sub

Private Function GetFreeIdxtTab() As Long
Dim Li As Long
Dim Result As Long

Result = -1

For Li = LBound(tTab) To UBound(tTab) Step 1
If tTab(Li).sID = "" Then
Result = Li
Exit For
End If
Next Li

GetFreeIdxtTab = Result

End Function
Private Sub AfficherListe()
Dim Lx As Long
Dim Li As Long

'recherche bi-directionnelle (-> <-)
For Lx = 0 To UBound(tTab) Step 1
If Not TreeIdExists(tTab(Lx).sID) Then
If InStr(tTab(Lx).sID, "@") Then
Call TPublic.Nodes.Add(, , tTab(Lx).sID, tTab(Lx).sStr)
Call TPublic.Nodes.Add(tTab(Lx).sID, tvwChild, tTab(Lx).sID &
"id", tTab(Lx).sID)
End If
End If
Next Lx
Lx = 0
For Li = 1 To TPublic.Nodes.Count
If Li > TPublic.Nodes.Count Then Exit For
If Not InStr(TPublic.Nodes.Item(Li).Key, "id") Then
If Not TabIdExists(TPublic.Nodes.Item(Li).Key) Then
If GetIdxNode(TPublic.Nodes.Item(Li).Key & "id") <> -1 Then
TPublic.Nodes.Remove (GetIdxNode(TPublic.Nodes.Item(Li).Key
& "id"))
TPublic.Nodes.Remove (Li)
End If
End If
End If
Next Li
End Sub

Private Sub Command1_Click()
Dim Ajout As maStruct

Ajout.sID = txtIDAdd.Text
Ajout.sStr = txtTitre.Text

Call AddtTab(Ajout)
Call AfficherListe

End Sub

Private Function TreeIdExists(ID As String) As Boolean
Dim Li As Long
Dim Result As Boolean

Result = False

For Li = 1 To TPublic.Nodes.Count Step 1
If TPublic.Nodes.Item(Li).Key = ID Then
Result = True
Exit For
End If
Next Li

TreeIdExists = Result

End Function

Private Function TabIdExists(ID As String) As Boolean
Dim Li As Long
Dim Result As Boolean

Result = False

For Li = 0 To UBound(tTab) Step 1
If tTab(Li).sID = ID Then
Result = True
Exit For
End If
Next Li

TabIdExists = Result

End Function

Private Function GetIdxNode(Clef As String) As Long
Dim Li As Long
Dim Result As Long

Result = -1

For Li = 1 To TPublic.Nodes.Count
If TPublic.Nodes.Item(Li).Key = Clef Then
Result = Li
Exit For
End If
Next Li

GetIdxNode = Result

End Function

Private Sub Command2_Click()
Dim Retrait As maStruct

Retrait.sID = TPublic.SelectedItem.Key
Retrait.sStr = TPublic.SelectedItem.Text

Call RemovetTab(txtIDRemove.Text)
Call AfficherListe

End Sub

avec un treeview appelé TPublic
et 3 textbox et 2 command


"Pierre Alexis" a écrit dans le message de
news:
Salut Simon,

Tu as écrit :

> Ca oui ! mais moi ca me fait 3 à l'interieur de la boucle For !!!!

Dans ce cas, peut-on avoir un peu de ton code ?

--
Pierre ALEXIS - MVP Visual Basic
Courriel & messenger :
FAQ Visual Basic : http://faq.vb.free.fr/




Avatar
Bismark Prods
non c'est pas ca !

"Bismark Prods" a écrit dans le message de
news:%23i$
c'est pas une mauvaise idée ton truc ! je vais testé ca !

"Jérôme VERITE" a écrit dans le message de
news:
> alors vérifie que t'incrémente pas ta variable dans la boucle ou dans


une
> fonction appelée avec i passé comme argument byref où il pourrait etre
> modifié
>
> Jérôme
>
> "Bismark Prods" a écrit dans le message de news:
> #
> > Ca oui ! mais moi ca me fait 3 à l'interieur de la boucle For !!!!
> >
> >
> > "Jérôme VERITE" a écrit dans le message de
> > news:
> > > Bonjour,
> > >
> > > je dirai qu'il est tout a fait normal, d'obtenir 10 a la sortie de


la
> > boucle
> > > dans la mesure ou VB incremente i a la fin de celle-ci et vérifie
apres
> > > incrémentation si i est <=9,
> > > a la fin de la dernière itération, il fait i = i+1 avec i = 9 ==>


i
> > >
> > > Dim i As Integer
> > >
> > > For i = 1 To 2
> > > Next i
> > > MsgBox i
> > >
> > > cela affiche 3
> > >
> > > Jérôme
> > >
> > >
> > > "Bismark Prods" a écrit dans le message de news:
> > >
> > > > Bonjour,
> > > >
> > > > Re-moi avec un problème vraiment extraordinaire...
> > > >
> > > > Comment pourriez vous expliquer qu'en faisant une boucle For tel


que
> > > >
> > > >
> > > > For i = 1 to treeview.nodes.count 'on imagine 9 nodes
> > > > i... 'J'arrive avec un i ?
> > > >
> > > > Next i
> > > >
> > > >
> > > > Comment peut-on expliquer que je tombe toujours avec un i = max+1


?
Si
> > > vous
> > > > voulez je peux vous joindre le projet ?
> > > >
> > > > Merci
> > > >
> > > >
> > >
> > >
> >
> >
>
>




Avatar
Bismark Prods
merci oui pourquoi pas effectivement.

"André Joubert" a écrit dans le message de
news:6Tk8b.6366$
Bonjour/soir,
Bien vue Eddi.
Cependant pour fin de compréhension et de clarté je suggérerais
quelque chose du genre:

more = True
while more
.
.
.
.
T = T + 1
IF T > Tv.Nodes.Count THEN more = False
wend

André


"EddiGordo" wrote in message
news:3f617f79$0$20155$
> Bonjour
>
> Il me semble que ton problème viens du fait que la gestion de tes


boucles
> est fluctuante...
>
> En effet, quand on fait "For T=1 to Truc.Count" et qu'on a un Truc.Add


ou
un
> Truc.Remove
> à l'intérieur, on risque de provoquer une extension ou une contraction


du
> parcours de la boucle...
>
> Lorsque le système arrive sur une ligne comme For T = 1 to


Tv.Nodes.Count,
> il évalue la valeur de
> Tv.Nodes.Count (par Ex: 5) et la fige.
> Puis lors du parcours de cette boucle le fait d'exécuter une ligne telle
> Tv.Nodes.Remove 2 réduit le
> nombre de Nodes de l'objet Tv. (De même que .Add ajoute une ligne qui ne
> sera pas traitée.)
> T étant figé, la boucle ira tout de même jusque 5; provoquant un


plantage
> pour le cas d'un Remove
> car dépassant la nouvelle limite...
>
> Peut-être faut-il essayer de corriger les valeurs de ton pointeur en


cours
> de lecture :
> Par ex:
>
> For T = 1 to Truc.Nodes.Count
> ...
> Si on fait un Tv.Remove xx alors on n'oublie pas de faire un T = T + 1
après
> pour le forcer à finir sa boucle plus tôt...
> Et bien sûr un T = T - 1 pour la méthode .Add pour traiter la ligne
> insérée...
>
> Encore faut-il être sûr de l'endroit où se font les .Add et les .Remove
pour
> éviter d'autres
> effets de bords tout aussi pénibles à gérer...
>
> En espérant que cela t'aide...
>
> Enjoy!
>
> "Bismark Prods" a écrit dans le message de news:
> #
>
>