Bonjour,
Pourriez-vous m'aider à créer une macro afin de calculer MIN/MAX/MOYENNE d'une colonne d'une variable tableau à plusieurs dimensions, s'il vous plaît.
Merci.
Pièce jointe 391786
Version imprimable
Bonjour,
Pourriez-vous m'aider à créer une macro afin de calculer MIN/MAX/MOYENNE d'une colonne d'une variable tableau à plusieurs dimensions, s'il vous plaît.
Merci.
Pièce jointe 391786
Salut,
je ne saisis pas tout, tu as déjà tes formules qui calculent les résultats ou tu les cherches ? :koi:
Si tu les as déjà, il te suffit de passer par l'enregistreur de macro pour voir le code équivalent :)
Jean-Philippe,
Je souhaite calculer le min max moyenne d'une variable tableau à plusieurs dimensions.
Exemple :
Code:
1
2 Redim tableau(999,999) Min = Application.WorksheetFunction.Min(tableau(de x à y, numéro de colonne))
Je n'arrive pas à trouver la bonne syntaxe en VBA
OK,
mais tes x et y et numéros de colonnes. ce sont des valeurs qu'on va chercher à quel niveau ?
Par exemple au mileu du tableau :
Code:
1
2
3
4
5 Redim tableau(999,999) x=100 y=800 num_col=10 Min = Application.WorksheetFunction.Min(tableau(de x à y, num_col))
On fixe ses valeurs arbitrairement
On calcul le min max moyenne dans un intervalle du tableau
As-tu lu cet excellent tuto :
https://didier-gonard.developpez.com...s-tableau-vba/
Je te recommande de passer par la recopie de ton bloc de tableau dans une plage de cellules pour retomber sur ta zone de confort :)
Oui je l'ai lu et d'autres d'ailleurs mais je n'ai pas trouver mon bonheur :-)
Je ne veux pas passer par une feuille de calcul mais rester avec une variable tableau pour optimiser le temps de traitement car mon tableau peut dépasser les 30000 lignes
J'ai fait un exemple a la va-vite :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Sub piou() Dim A Dim B Dim C Dim strSep As String Dim strDelim As String Dim strNew As String Dim rowBegin As Long Dim rowEnd As Long strDelim = "," strSep = "||" 'on remplit de 1 à 5 pour l'exemple A = Array(1, 2, 3, 4, 5) rowBegin = 1 rowEnd = 2 A(rowEnd + 1) = strSep 'make a single string strNew = Join(A, strDelim) 'split the string at the marker vArr = Split(strNew, strSep) ReDim B(rowBegin To rowEnd) 'split the smaller string with the desired records B = Split(Left$(vArr(0), Len(vArr(0)) - 1), strDelim) ReDim C(0 To rowEnd - rowBegin + 1) For i = LBound(B) To UBound(B) C(i) = CLng(B(i)) Next i Debug.Print Application.WorksheetFunction.Min(A) Debug.Print Application.WorksheetFunction.Min(C) Debug.Print Application.WorksheetFunction.Max(A) Debug.Print Application.WorksheetFunction.Max(C) Debug.Print Application.WorksheetFunction.Average(A) Debug.Print Application.WorksheetFunction.Average(C) End Sub
Ok merci !
Mais on est obligé de passer par un Array ?
Voici un bout de code qui fonctionne pour un tableau 1 dimension :
Mais comment fait-on avec un tableau à X dimensions et quand on veut taper au milieu de celui-ci par exemple ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Option Explicit Sub TEST() Dim FIN As Long Dim MINI As Double Dim MAXI As Double Dim MOYENNE As Double Dim TABLEAU() FIN = 30000 ReDim TABLEAU(FIN) TABLEAU = Range("A1:A" & FIN).Value MINI = Application.WorksheetFunction.Min(TABLEAU) MAXI = Application.WorksheetFunction.Max(TABLEAU) MOYENNE = Application.WorksheetFunction.Average(TABLEAU) MsgBox ("MINI :" & MINI & vbCrLf & "MAXI :" & MAXI & vbCrLf & "MOYENNE :" & MOYENNE) End Sub
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Option Explicit Sub TEST() Dim FIN As Long Dim MINI As Double Dim MAXI As Double Dim MOYENNE As Double Dim TABLEAU() FIN = 11 ReDim TABLEAU(FIN, 3) TABLEAU = Range("A2:C" & FIN).Value 'MINI = Application.Min(Application.Index(TABLEAU, , 2)) 'MAXI = Application.Max(Application.Index(TABLEAU, , 2)) 'MOYENNE = Application.WorksheetFunction.Average(Application.Index(TABLEAU, , 2)) MINI = Application.Min(Application.Index(TABLEAU, Evaluate("Row(2:" & 9 & ")"), 2)) MAXI = Application.Max(Application.Index(TABLEAU, Evaluate("Row(2:" & 9 & ")"), 2)) MOYENNE = Application.WorksheetFunction.Average(Application.Index(TABLEAU, Evaluate("Row(2:" & 9 & ")"), 2)) MsgBox ("MINI :" & MINI & vbCrLf & "MAXI :" & MAXI & vbCrLf & "MOYENNE :" & MOYENNE) End Sub
Cela ne fonctionne pas sur un tableau de plus grande dimension :(
Salut,
Si les pistes ne conviennent pas, tu peux toujours faire des boucles imbriquées avec des sommes et des min/max...
Oui j'ai suivi tes conseils et ca fonctionne cependant je pensais qu'il existerait une fonction préprogrammée dans excel pour faire ce genre de manipulations avec des variables tableaux à plusieurs dimensions.
Merci :-)