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.
![]()
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.
![]()
Salut,
je ne saisis pas tout, tu as déjà tes formules qui calculent les résultats ou tu les cherches ?
Si tu les as déjà, il te suffit de passer par l'enregistreur de macro pour voir le code équivalent![]()
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Migrer les applications VBA Access et VBA Excel vers la Power Platform
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
Jean-Philippe,
Je souhaite calculer le min max moyenne d'une variable tableau à plusieurs dimensions.
Exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Migrer les applications VBA Access et VBA Excel vers la Power Platform
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
Par exemple au mileu du tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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![]()
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Migrer les applications VBA Access et VBA Excel vers la Power Platform
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Migrer les applications VBA Access et VBA Excel vers la Power Platform
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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...
Cycle de vie d'un bon programme :
1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise
Pas de question technique par MP, je ne réponds pas
Mes ouvrages :
Migrer les applications VBA Access et VBA Excel vers la Power Platform
Apprendre à programmer avec Access 2016, Access 2019 et 2021
Apprendre à programmer avec VBA Excel
Prise en main de Dynamics 365 Business Central
Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
Pensez à consulter la FAQ Excel et la FAQ Access
Derniers tutos
Excel et les paramètres régionaux
Les fichiers Excel binaires : xlsb,
Autres tutos
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 :-)
Partager