Denombrement

bonjour , j'ai une question assez simple par rapport à la reaction de mon bout de code qui consiste à denombrer le nombre de fois qu'un nombre est repeté , le voici

Sub dé()
'determination du nombre de lancés de chaque sorte:
t = Array(1, 2, 3, 3, 1, 4, 6, 5, 4, 2, 1)

For k = Application.Min(t) To Application.Max(t)
n = 0
 For i = 0 To 10
   If k = Val(t(i)) Then
    n = n + 1
   End If
 Next
 If n > 1 Then
   MsgBox n & " lancés du " & t(i)  ' comment est il possible ici que i prenne la valeur 11 puisque dans mon tableau je vais de 0 à 10
 End If
 Next
End Sub

j'obtiens une erreur au niveau de l'instruction :

MsgBox n & " lancés du " & t(i)

car i prend la valeur 11 ce que je comprend pas !

par contre si j'effectue cette correction ca marche :

MsgBox n & " lancés du " & k

voyez vous pourquoi ? en vous remerciant par avance

Bonjour Rocket

pour moi cela est normal... c'est le principe de la boucle for...

si tu dois aller jusqu’à 10 il faut que le code contenu soit réaliser quand i = 10... et donc à la fin il incremente la variable i... qui est égal à 11 et donc on sort du for...

Fred

bonjour

dans la boucle

for i=0 to 10: next i

ces instructions sont interprétées et transformées par vba pour pouvoir être exécutées

'for i=0 to 10 est transformé en

i=0
débutdeboucle:
si i>10 aller à findeboucle 'on sort de la boucle quand i>10 soit i=11
instruction àl'intérieur de la boucle
'next i est transformé en
i=i+1
aller à débutdeboucle
findeboucle:
'ici i vaut 11

Merci pour vos réponses , puisqu'il s'agissait d'une boucle for allant de 0 à 10 je pensais qu' a i =10 la boucle se terminait

..on en apprend tout les jours ..merci à vous

Re

N'oubli pas de clore le sujet

Merci

Fred

Bonjour à tous,

@rocket4 ,

puisque le sujet n'est pas clos,

pour te convaincre fait ce test,

Sub test_boucle()
 For i = 0 To 2
    n = n + 1
    Debug.Print i
 Next
Debug.Print i & " - " & n
n = 0
 For i = 1 To 3
    n = n + 1
    Debug.Print i
 Next
Debug.Print i & " - " & n
End Sub

@sabV : CQFD (via débogage)

Bonjour, Salut à tous !

Ce comportement des boucles For... Next est tout à fait utile et utilisable. Exemple sur ce bout de code :

    For i = 0 To 10
        If testcondition Then Exit For
    Next i
    If i > 10 Then Exit Sub

Tu testes une condition dans ta boucle et en sort lorsqu'elle est satisfaite. Si elle ne l'est pas, la boucle ira à son terme et tu dois alors interrompre la procédure.

En sortie de boucle tu ne sais pas si la condition a été ou non satisfaite. Le moyen de le savoir est de tester la valeur de i. Si i est supérieur au terme de la boucle, condition non satisfaite. Si i est inférieur ou égal au terme c'est que la condition a été satisfaite.

Cordialement.

merci à vous tous pour vos nombreuses interventions

Rechercher des sujets similaires à "denombrement"