Boucle dans boucle

Résolu
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

  1. 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
    1. Bonjour,

      Et à quel niveau dois-je écrire cette ligne?
      0
      1. 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
    2. Cela fonctionne.

      Merci pour votre aide!
      0