Boucle dans boucle

Résolu
calypsane Messages postés 3 Statut Membre -  
calypsane Messages postés 3 Statut Membre -
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. Yoda
     
    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
  2. calypsane Messages postés 3 Statut Membre
     
    Bonjour,

    Et à quel niveau dois-je écrire cette ligne?
    0
    1. Yoda
       
      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
  3. calypsane Messages postés 3 Statut Membre
     
    Cela fonctionne.

    Merci pour votre aide!
    0