Calcul simple dans array
Bonjour,
Je coince sur quelque chose de très simple je pense, je rentre des valeurs dans un array à 1 dimension (une colonne quoi), je veux faire la somme de cette colonne à un moment donné. Puis supprimer les éléments de cette colonne progressivement 1 par 1 en partant du haut (rien de compliqué quoi), et faire la nouvelle somme à chaque suppression. Mais à chaque fois la nouvelle somme reste inchangée par rapport à la première somme, comme si les suppressions ne marchaient pas...
Voici mon code, merci de votre aide !
Dim myarray(49, 1) As Integer, ligtbltemp as integer
ligtbltemp = 0
do while ligtbltemp < 49
mavariable = 2
myarray(ligtbltemp, 0) = mavariable - 1
ligtbltemp = ligtbltemp + 1
loop 'je simplifie bien sûr l'exemple
ligtbltemp = 1
valeurtotale = Application.WorksheetFunction.Sum(myarray) 'ici m'affiche bien la somme attendue
Do While ligtbltemp < 50 Or valeurtemporaire = 0
valeurtemporaire = Application.WorksheetFunction.Sum(myarray) 'ici valeurtemporaire reste identique à valeurtotale alors que j'attends qu'elle diminue au fur et à mesure que chaque cellule du tableau soit remplacée par 0 lors de la seconde boucle...
myarray(ligtbltemp - 1, 0) = 0
ligtbltemp = ligtbltemp + 1
LoopBonsoir Arnnaud,
La valeur de valeurtemporaire est bien décrémentée de 1 à chaque passage dans la boucle.
Pourquoi dites-vous que cette valeur ne change pas ?
Vérification avec une msgbox : MsgBox "valeurtemporaire = " & valeurtemporaire
Cliquer sur le bouton HOP!
Sub test()
Dim myarray(49, 1) As Integer, ligtbltemp As Integer
ligtbltemp = 0
Do While ligtbltemp < 49
mavariable = 2
myarray(ligtbltemp, 0) = mavariable - 1
ligtbltemp = ligtbltemp + 1
Loop 'je simplifie bien sûr l'exemple
ligtbltemp = 1
valeurtotale = Application.WorksheetFunction.Sum(myarray) 'ici m'affiche bien la somme attendue
Do While ligtbltemp < 50 Or valeurtemporaire = 0
valeurtemporaire = Application.WorksheetFunction.Sum(myarray) 'ici valeurtemporaire reste identique à valeurtotale alors que j'attends qu'elle diminue au fur et à mesure que chaque cellule du tableau soit remplacée par 0 lors de la seconde boucle...
MsgBox "valeurtemporaire = " & valeurtemporaire
myarray(ligtbltemp - 1, 0) = 0
ligtbltemp = ligtbltemp + 1
Loop
End SubHello,
Une piste à étudier :
Sub SupprimerLigneTableauUnidimensionnel()
Dim monTableau() As Integer
ReDim monTableau(3)
monTableau(0) = 5
monTableau(1) = 15
monTableau(2) = 5
monTableau(3) = 25
MsgBox Application.WorksheetFunction.Sum(monTableau)
ReDim Preserve monTableau(UBound(monTableau) - 3)
MsgBox Application.WorksheetFunction.Sum(monTableau)
End Subbonsoir, je coince sur cet array à une dimensions et je pense qu'on a toujours 2 dimensions ici.
bon, alors, ma vision :
Sub test2()
Dim arr
arr = Evaluate("row(offset(a1,,,20,))") '=juste pour remplir l'array
Do
MsgBox "mon array contient " & UBound(arr) & " éléments : " & vbLf & Join(Application.Transpose(arr)) & vbLf & "somme = " & Application.Sum(arr)
b = UBound(arr) > 1
If b Then
aux = Evaluate("row(offset(a2,,," & UBound(arr) - 1 & ",))")
arr = Application.Index(arr, aux, 1)
End If
Loop While b
End SubBonjour et merci à tous,
@mafraise effectivement dans mon exemple ça marchait XD en voulant simplifier pour l'exemple j'ai supprimé ce qui faisait que ça ne marchait pas dans mon cas. En gros j'avais mis la décrémentation dans une condition qui faisait qu'elle ne s'appliquait pas au début.
Donc problème résolu, encore merci!!