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

VBA Access Discussion :

Une boucle for qui ne donne pas le bon nombre d'itération


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Une boucle for qui ne donne pas le bon nombre d'itération
    Bonjour à vous,

    J'ai commencé il y a quelques jours la programmation en VBA et je rencontre un problème, voici mon programme:

    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
    Private Sub Addition()
     
        Dim n As Integer
        Dim TabNombres() As Long
        Dim Res As Long
        Dim Nbre As Integer
     
        n = 0
     
        On Error Resume Next
     
        Nbre = InputBox(" Combien voulez vous de nombres ? ", " Combien de nombres ? ", "")
     
        For n = 1 To Nbre
     
            TabNombres(n) = InputBox("Saisissez les nombres !", _
            "Saisie des nombres", "")
            Res = TabNombres(n) + Res
            n = n + 1
     
        Next n
     
        AfficherResAddition "Le résultat du calcul est : " & Res
     
    End Sub
    --------------------------------------------------------------------------
    Public Sub AfficherResAddition(Text As String)
     
        MsgBox Text, vbOKOnly + vbInformation, "Résultat du calcul"
     
    End Sub
    Ce programme demande à un utilisateur combien il veut de nombre afin de faire une simple addition, cependant je pense que ma boucle for a un problème car elle ne fait pas autant de boucle que le nombre souhaité, de plus le résultat est égal à 0 O_o. Voila j'attends votre aide avec impatience ^^

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Points : 356
    Points
    356
    Par défaut
    Bonjour,

    Il faut enlever car c'est implicite dans le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For n = 1 To Nbre
    ...
    Next n

  3. #3
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Points : 61
    Points
    61
    Par défaut
    Salut,

    comme te dit SSJconsult, soit tu enlève le n=n+1 ou alors... utilise do while ou autre
    là tu ne traites que les nombres impaires :
    n=1 >> n=n+1: n=1+1=2 >> next n: n=2+1=3 (step par défaut=1)
    n=3 >> n=n+1: n=3+1=4 >> next n: n=4+1=5
    n=5 ...
    ...


    De plus, je crois qu'il faut déclarer ou redimensionner ton TabNombre(), comme elle est ta fonction plante normalement (je crois) ! non ?!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    On Error Resume Next
        
        Nbre = InputBox(" Combien voulez vous de nombres ? ", " Combien de nombres ? ", "")
        Redim TabNombre(1 To Nbre)

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Boucle for
    Tout d'abord, merci pour vos réponse aussi rapides et précises, en effet le probleme venait bien du n = n + 1, cependant je constate que peu importe les nombres que je rentre, le résultat est toujours = 0, voici ma ligne de code :

    Res = TabNombres(n) + Res

    c'est surement une erreur toute bête^^
    Merci d'avance

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Points : 356
    Points
    356
    Par défaut
    Le probleme vient du fait que tu utilises dans ta boucle alors que cette variable est bien declaree mais non "dimensionnee"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim TabNombres() As Long
    Tu as des lors plusieurs possibilites :

    Possibilite 1 : dimensionner la variable
    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
    Private Sub Addition()
     
        Dim n As Integer
        Dim TabNombres(10) As Long
        Dim Res As Long
        Dim Nbre As Integer
     
        n = 0
     
        On Error Resume Next
     
        Nbre = InputBox(" Combien voulez vous de nombres ? ", " Combien de nombres ? ", "")
     
        For n = 1 To Nbre
     
            TabNombres(n) = InputBox("Saisissez les nombres !", _
            "Saisie des nombres", "")
            Res = TabNombres(n) + Res
     
        Next n
     
        AfficherResAddition "Le résultat du calcul est : " & Res
     
    End Sub
    Cette solution a le desavantage de limiter ta boucle a 10 (ou a la valeur precisee dans le DIM)

    Possibilite 2 : ne pas dimensionner
    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
    Private Sub Addition()
     
        Dim n As Integer
        Dim TabNombres As Long
        Dim Res As Long
        Dim Nbre As Integer
     
        n = 0
     
        On Error Resume Next
     
        Nbre = InputBox(" Combien voulez vous de nombres ? ", " Combien de nombres ? ", "")
     
        For n = 1 To Nbre
     
            TabNombres = InputBox("Saisissez les nombres !", _
            "Saisie des nombres", "")
            Res = TabNombres + Res
     
        Next n
     
        AfficherResAddition "Le résultat du calcul est : " & Res
     
    End Sub
    Possibilite 3 : ne pas utiliser de variable (la plus simple)
    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
    Private Sub Addition()
     
        Dim n As Integer
        Dim Res As Long
        Dim Nbre As Integer
     
        n = 0
     
        On Error Resume Next
     
        Nbre = InputBox(" Combien voulez vous de nombres ? ", " Combien de nombres ? ", "")
     
        For n = 1 To Nbre
     
            Res = Res + InputBox("Saisissez les nombres !", _
            "Saisie des nombres", "")
     
        Next n
     
        AfficherResAddition "Le résultat du calcul est : " & Res
     
    End Sub

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Points : 356
    Points
    356
    Par défaut
    En fait, il y a encore plus simple
    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
    Private Sub Addition()
     
        Dim n As Integer
        Dim Res As Long
     
        For n = 1 To InputBox(" Combien voulez vous de nombres ? ", _
                                      " Combien de nombres ? ", "")
     
            Res = Res + InputBox("Saisissez les nombres !", _
                                          "Saisie des nombres", "")
     
        Next n
     
        AfficherResAddition "Le résultat du calcul est : " & Res
     
     
    End Sub

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    En effet, cette solution est assez simple, courte et nette

  8. #8
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Citation Envoyé par SSJconsult Voir le message
    En fait, il y a encore plus simple
    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
    Private Sub Addition()
     
        Dim n As Integer
        Dim Res As Long
     
        For n = 1 To InputBox(" Combien voulez vous de nombres ? ", _
                                      " Combien de nombres ? ", "")
     
            Res = Res + InputBox("Saisissez les nombres !", _
                                          "Saisie des nombres", "")
     
        Next n
     
        AfficherResAddition "Le résultat du calcul est : " & Res
     
     
    End Sub
    Je préfère de loin ta possibilité 2 qui permet en aval de tester les valeurs retournée par les inputbox. Car si l'utilisateur saisi de l'alphanumérique par erreur, c'est le crash assuré

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Points : 356
    Points
    356
    Par défaut
    Tofalu:
    Car si l'utilisateur saisi de l'alphanumérique par erreur, c'est le crash assuré
    En effet, tu as parfaitement raison , c'etait pour l'exemple...

    Tout le monde sait bien qu'un utilisateur ne se trompe jamais, c'est le programme qui est mauvais

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/07/2011, 11h54
  2. Une boucle infinie qui ne freeze pas ?
    Par humitake dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 14/04/2011, 11h45
  3. une boucle for qui ne fonctionne pas
    Par piffeo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/11/2008, 21h52
  4. Une boucle for qui coince
    Par renaud26 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 23/05/2008, 10h10
  5. boucle for qui ne marche pas
    Par Invité dans le forum Langage
    Réponses: 16
    Dernier message: 12/06/2006, 10h59

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