[vb] problème de boucle avec datagridview

problème de boucle avec datagridview [vb] - VB/VBA/VBS - Programmation

Marsh Posté le 29-05-2009 à 09:46:34    

Bonjour,
 
J'ai 2 boutons radio, une datagridview, et un bouton.
Lors du click sur le bouton:
Si je sélectionne le 1er radio bouton, j'ai un message m'indiquant que j'ai fait le choix n°1.
Si je sélectionne le 2ème bouton radio, je rempli un tableau de 2 colonnes (le nombre de ligne n'est pas connu à l'avance mais reste limité, d'ou le for i = 0 to 1000, on atteindra jamis les 1000)
Et j'ai un message me donnant la valeur des cellules.
 
Je souhaite qu'il m'indique la valeur des cellules. La première colonne ne peut être vide, sauf si j'ai teminé de renseigner.
 
Donc je souhaite:
jusqu'à ce que la cellule soit vide, prendre les valeurs de cellule et les afficher.
 
 
Le problème avec mon code et qu'il ne sort pas de la boucle for (normal j'ai mis 1000 alors que je veux stopper lorsque la cellule testé est vide) et qu'il m'affiche la derniere ligne, qui est vide.
 
 
If RadioButton2.Checked = True Then
            MsgBox("Choix n°2" )
           
            ' tant que la datagrid n'est pas vide
      While DataGridView1.Rows.Item(varX).Cells.Item(0).Value IsNot DBNull.Value
               
  ' pour une valeur de ligne allant de zéro à mille
          For i = 0 To 1000
                 ' les variables var1 et var2 prennent les valeurs de cellule
                 var1 = DataGridView1.Rows.Item(i).Cells.Item(0).Value
                 var2 = DataGridView1.Rows.Item(i).Cells.Item(1).Value
                 MsgBox("Colonne 1: " & var1)
                 MsgBox("Colonne 2: " & var2)
          Next
       End While
 
Else
    MsgBox("Choix n°1" )
End If
   MsgBox("Traitement terminé" )
 
 
ps: je précise, je ne suis pas developpeur et mon code n'est surement pas très propre ... déjà qu'il ne fonctionne pas :)


Message édité par akabis le 29-05-2009 à 09:50:28
Reply

Marsh Posté le 29-05-2009 à 09:46:34   

Reply

Marsh Posté le 29-05-2009 à 10:39:35    

j'ai remplacé mon imbrication de boucle:
While
  for
  next
End while
 
Remplacé par  
 
i=0
Do While DataGridView1.Rows.Item(i).Cells.Item(0).Value IsNot DBNull.Value
               
                var1 = DataGridView1.Rows.Item(i).Cells.Item(0).Value
                var2 = DataGridView1.Rows.Item(i).Cells.Item(1).Value
                i = i + 1
                MsgBox("Colonne 1: " & var1)  
                 MsgBox("Colonne 2: " & var2)  
Loop

 
Ca fonctionne jusquà la derniere itération. A cette derniere itération il prend les champs vide et le débogger bloque sur cette ligne:
DataGridView1.Rows.Item(i).Cells.Item(0).Value IsNot DBNull.Value
 
et m'indique: l'index était hors limite. Il ne doit pas être négatif ou inferieur à la taille de la collection. nom du parametre: index
...kézako?
merci
 
eDIT: j'ai l'impression qu'une cellule vide ne prend pas de valeur et donc le met dans les choux
Edit2: j'ai fait le teste avec un if
i=0
if While DataGridView1.Rows.Item(i).Cells.Item(0).Value IsNot DBNull.Value then
               
                var1 = DataGridView1.Rows.Item(i).Cells.Item(0).Value
                var2 = DataGridView1.Rows.Item(i).Cells.Item(1).Value
                i = i + 1
                MsgBox("Colonne 1: " & var1)  
                 MsgBox("Colonne 2: " & var2)  
end if

 
Si il y a une valeur, il l'affiche sinon il ne fait rien. Donc dans ce cas ça fonctionne.
J'ai l'impression qu'avec les itérations, même si la conition est vérifié, il fait une dernière boucle ce qui bloque tout.
J'ai essayé avec:
Do
Loop while
... même pb


Message édité par akabis le 29-05-2009 à 12:00:32
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed