Boucle dans boucle

Résolu/Fermé
calypsane Messages postés 3 Date d'inscription mercredi 1 avril 2015 Statut Membre Dernière intervention 1 avril 2015 - 1 avril 2015 à 15:48
calypsane Messages postés 3 Date d'inscription mercredi 1 avril 2015 Statut Membre Dernière intervention 1 avril 2015 - 1 avril 2015 à 17:12
Bonjour à tous,

Je souhaite créer une macro permettant d'ajouter des valeurs qui sont dans un même intervalle afin, par la suite, pouvoir créer un histogramme.

Voici un exemple de valeurs:
HU % surface
-956,6963087 0
-948,5 0,060643061
-940,25 0
-931,75 0
-923,5 0,060643061
-915,25 0
-906,75 0
-898,25 0,121286121
-889,75 0,060643061
-881,5 0,121286121
-873,25 0
-864,75 0
-856,25 0,060643061
-847,75 0
-839,5 0,121286121
-831,25 0,121286121
-822,75 0,060643061

et voici le code correspondant:

Sub MAR()
Dim i, n, j, k
Dim general(69)

Sheets("M").Select
For i = -1000 To 0 Step 20
For k = 0 To 69
For n = 3 To 170
If Range("A" & n) >= i And Range("A" & n) < i + 20 Then
general(k) = general(k) + Range("B" & n)
End If
Next n
Next k
Next i
Sheets("Global").Select
For j = 0 To 69
Range("B" & j + 4) = general(j)
Next j
End Sub


J'aimerai que mes boucles i et k s'incrémentent en même temps mais je ne sais pas comment...

Pouvez-vous m'aider?

3 réponses

Bonjour,

la boucle For i = -1000 To 0 Step 20 fait 50 itérations
la boucle For k = 0 To 69 fait 70 itérations

il y a discordance, on ne peut pas incrémenter i et k simultanément:
si on prend i comme variable de contrôle, on incrémente k de 1 a chaque tour, la valeur maxi de k sera 49.

ou alors je n'ai pas compris la question?

A+
0
calypsane Messages postés 3 Date d'inscription mercredi 1 avril 2015 Statut Membre Dernière intervention 1 avril 2015
1 avril 2015 à 16:25
Bonjour,

Et à quel niveau dois-je écrire cette ligne?
0
Voilà comme j'ai compris le problème

Sub MAR()
Dim i, n, j, k
Dim general(69)

Sheets("M").Select

k=0 'initialisation de k
For i = -1000 To 0 Step 20

'incrémentation de k à chaque tour de la boucle i
'k varie de 0 à 49
k=k+1

For n = 3 To 170
If Range("A" & n) >= i And Range("A" & n) < i + 20 Then
general(k) = general(k) + Range("B" & n)
End If
Next n

Next i
Sheets("Global").Select
For j = 0 To 69
Range("B" & j + 4) = general(j)
Next j
End Sub
0
calypsane Messages postés 3 Date d'inscription mercredi 1 avril 2015 Statut Membre Dernière intervention 1 avril 2015
1 avril 2015 à 17:12
Cela fonctionne.

Merci pour votre aide!
0