IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème Boucle For [Débutant]


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Par défaut Problème Boucle For
    Bonjour,

    J'ai un problème au niveau de ma boucle Pour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    For i=0 to MaDataGridView.RowCount
     
    If condition1 et condition2 alors
       mon code
    Elseif condition3 et conditio3n alors
       mon code
     
    EndIf
     
    If condition4 et condition5 alors
       mon code
    Elseif condition6 et condition7 alors
       mon code
     
    EndIf
     
     
    If condition8 et condition9 alors
       mon code
    Elseif condition10 et condition11 alors
       mon code
     
    EndIf
     
    Next


    Mais voila, mon code ne va effectuer le code que pour les conditions 8-9 et 10-11.

    Je me suis donc dit : 1 boucle pour = 1 série de condition, j'ai donc voulu faire une autre boucle Pour, mais quand je regarde en mode pas à pas détaillé, il n'y a que la première boucle qui s'effectue et après ça passe a la fin de la Sub...


    Donc ma question est : Pourquoi quand je met toutes mes conditions dans une seule boucle pour, ça n'effectue que la derniere condition, et si réparti les conditions dans des boucles pour, il n'y en a qu'une qui est executée ?

    Cordialement

  2. #2
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Première intuition : ça vient du code qu'il y a dans tes conditions...
    Tu peux donner le code complet ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Par défaut
    Bonjour,

    bien sûr voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     For i = 0 To dgvDeclencheurs.RowCount
     
     
     
                'Dates de révisions
                If dgvDeclencheurs.Item(4, i).Value > Date.Now.AddMonths(-1) And dgvDeclencheurs(4, i).Value < Date.Now.AddMonths(3) Then
     
                    dgvDeclencheurs.Item(4, i).Style.BackColor = Color.Black
                    dgvDeclencheurs.Rows(i).DefaultCellStyle.ForeColor = Color.Red
     
                ElseIf dgvDeclencheurs.Item(4, i).Value > Date.Now.AddMonths(-3) And dgvDeclencheurs(4, i).Value < Date.Now.AddMonths(3) Then
     
                    dgvDeclencheurs.Item(4, i).Style.ForeColor = Color.Orange
                    dgvDeclencheurs.Rows(i).DefaultCellStyle.ForeColor = Color.Chocolate
     
                End If
     
                'Dates de piles
                If dgvDeclencheurs.Item(6, i).Value > Date.Now.AddMonths(+1) And dgvDeclencheurs(6, i).Value < Date.Now.AddMonths(3) Then
     
                    dgvDeclencheurs.Item(6, i).Style.BackColor = Color.Black
                    dgvDeclencheurs.Rows(i).DefaultCellStyle.ForeColor = Color.Red
     
                ElseIf dgvDeclencheurs.Item(6, i).Value > Date.Now.AddMonths(-3) And dgvDeclencheurs(6, i).Value < Date.Now.AddMonths(3) Then
     
                    dgvDeclencheurs.Item(6, i).Style.BackColor = Color.Black
                    dgvDeclencheurs.Rows(i).DefaultCellStyle.ForeColor = Color.Orange
     
                End If
     
                'Nombre de sauts
                If dgvDeclencheurs.Item(7, i).Value < dgvDeclencheurs.Item(8, i).Value Then
                    dgvDeclencheurs.Item(8, i).Style.BackColor = Color.Black
                    dgvDeclencheurs.Rows(i).DefaultCellStyle.ForeColor = Color.Red
     
     
                ElseIf dgvDeclencheurs.Item(7, i).Value * (90 / 100) < dgvDeclencheurs.Item(8, i).Value And dgvDeclencheurs.Item(7, i).Value > dgvDeclencheurs.Item(8, i).Value Then
                    dgvDeclencheurs.Item(8, i).Style.BackColor = Color.Black
                    dgvDeclencheurs.Rows(i).DefaultCellStyle.ForeColor = Color.Orange
     
                End If
            Next
    Et il n'y a que ce code la qui est effectué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
          'Nombre de sauts
                If dgvDeclencheurs.Item(7, i).Value < dgvDeclencheurs.Item(8, i).Value Then
                    dgvDeclencheurs.Item(8, i).Style.BackColor = Color.Black
                    dgvDeclencheurs.Rows(i).DefaultCellStyle.ForeColor = Color.Red
     
     
                ElseIf dgvDeclencheurs.Item(7, i).Value * (90 / 100) < dgvDeclencheurs.Item(8, i).Value And dgvDeclencheurs.Item(7, i).Value > dgvDeclencheurs.Item(8, i).Value Then
                    dgvDeclencheurs.Item(8, i).Style.BackColor = Color.Black
                    dgvDeclencheurs.Rows(i).DefaultCellStyle.ForeColor = Color.Orange
     
                End If

  4. #4
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    A mon avis le problème c'est la comparaison entre ton dgvDeclencheurs.Item(4, i).Value et le DateTime retourné par AddMonths().

    As-tu essayé de le convertir avec un DateTime.Parse/TryParse ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Par défaut
    Merci pour ta réponse rapide, non je n'ai pas essayé de le convertir avec un DateTime.Parse/TryParse car je ne connaissais pas, et de plus, le code fonctionne parfaitement quand j'enleve le dernier bout de code ('Nb sauts).

    J'ai fait un pas a pas détaillé avec espion sur mes variables au début du code, tout fonctionne mais au fur et a mesure, j'ai l'impression qu'a chaque fois que la boucle pour recommence, alors elle ne vérifie plus dgvDeclencheurs.Item(4, i).Value et le DateTime.....

  6. #6
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Si ça marche sans parsing, c'est que ta cellule doit déjà être de type Date pour ces colonnes là.

    Quel est le type de la valeur pour les colonnes 7 et 8 ?
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    dgvDeclencheurs.Item(7, i).Value * (90 / 100) < dgvDeclencheurs.Item(8, i).Value

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Par défaut
    Si ça marche sans parsing, c'est que ta cellule doit déjà être de type Date pour ces colonnes là.
    Oui désolé j'ai oublié de le préciser...

    Pour les colonnes 7 et 8, ce sont des Smallint qui sont récupéré dans ma BDD avec un GetValue

  8. #8
    Membre expérimenté Avatar de Neiflheim
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2011
    Messages : 135
    Par défaut
    Etant donné que l'indice des rows est de base 0, je ne comprend pas pourquoi tu n'obtiens aucune erreur dans ta boucle arrivé à i = rowCount

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For i = 0 To dgvDeclencheurs.RowCount
    Devrait plutôt être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For i = 0 To dgvDeclencheurs.RowCount -1

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Par défaut
    Citation Envoyé par Neiflheim Voir le message
    Etant donné que l'indice des rows est de base 0, je ne comprend pas pourquoi tu n'obtiens aucune erreur dans ta boucle arrivé à i = rowCount

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For i = 0 To dgvDeclencheurs.RowCount
    Devrait plutôt être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For i = 0 To dgvDeclencheurs.RowCount -1
    Lorsque je commence fais For i = 1, alors la première ligne est ignorée, les composants DataGrid Commencent à 0 il me semble pourtant

  10. #10
    Membre expérimenté Avatar de Neiflheim
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2011
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2011
    Messages : 135
    Par défaut
    Oui ils commencent bien à 0, mais ils finissent à RowCount - 1

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 79
    Par défaut
    Voici la solution à mon probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Val(dgvDeclencheurs.Item(7, i).Value.ToString) < Val(dgvDeclencheurs.Item(8, i).Value.ToString)
    Merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème boucle for
    Par revsys dans le forum Delphi
    Réponses: 20
    Dernier message: 24/05/2007, 15h50
  2. Problème boucle for
    Par rouliane dans le forum C++
    Réponses: 2
    Dernier message: 14/12/2006, 14h37
  3. [VBA-E, Débutant] Problème Boucle for
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2006, 12h30
  4. [Débutant] Problème boucle for
    Par toniooooo dans le forum Langage
    Réponses: 10
    Dernier message: 18/04/2006, 14h42
  5. [FLASH 8] Problème Boucle For
    Par Begood dans le forum Flash
    Réponses: 6
    Dernier message: 21/03/2006, 11h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo