Hello,

Envoyé par
Mic13710
remplir un tableau à une dimension et faire un moy = Application.Average(tableau) mais peut-être existe t'il un moyen plus direct.
Merci pour votre aide.
oui en utilisant la fonction Application.Index
il faut savoir que application.index est toujours en base index 1 même avec un tableau en base index 0
1° On cible un élément du tableau :
Exemple Code pour le tableau tablo :
msgbox application.index(tablo,3,2)
est l'équivalent de msgbox tablo(3,2) ou tablo(2,1) suivant que le tableau tablo à des index commençant à 1 ou 0
2° On cible une ligne entière( la 3 par exemple) (donc on va se retrouver avec un array (1 dim)
Attention "0" veut dire ici "toute les colonnes" et non colonne(0) qui n'existe pas.
Code:
ligne=application.index(tablo,3,0)'on obtient la ligne 3 complète dans un array 1 dim
3° on cible une colonne entière ( la 3 par exemple)
Attention "0" veut dire ici "toute les les lignes" et non ligne(0) qui n'existe pas.
Code:
macolonne= application.index( tablo,0,3)
Exemple d'utilisation pour calculer la moyenne d'une colonne d'un tableau :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Sub CalculMoyenne()
'declaration du tableau 2D
Dim intA(2, 3) As Integer
'declaration des variables
Dim rw As Integer
Dim col As Integer
Dim cumul As Integer
For col = 0 To 3
cumul = 0
For rw = 0 To 2
intA(rw, col) = CInt((99 * Rnd) + 1)
cumul = cumul + intA(rw, col)
Next rw
Debug.Print "Moyenne colonne " & col & " : " & cumul / rw
Next col
' moyenne de toute la deuxième colonne ( 2 pour Index , colonne 1 Pour intA car part de 0)
Debug.Print "Moyenne 2ème colonne : " & _
Application.Average(Application.Index(intA, 0, 2))
End Sub |
pour ne pas s'emmêler les pinceaux il aurait peut-être fallu mettre le tableau intA en base index 1 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Sub CalculMoyenne2()
'declaration du tableau 2D
Dim intA(1 To 3, 1 To 4) As Integer
'declaration des variables
Dim rw As Integer
Dim col As Integer
Dim cumul As Integer
For col = 1 To 4
cumul = 0
For rw = 1 To 3
intA(rw, col) = CInt((99 * Rnd) + 1)
cumul = cumul + intA(rw, col)
Next rw
Debug.Print "Moyenne colonne " & col & " : " & cumul / (rw - 1)
Next col
' moyenne de toute la deuxième colonne
Debug.Print "Moyenne 2ème colonne : " & _
Application.Average(Application.Index(intA, 0, 2))
End Sub |
Ami calmant, J.P
Partager