IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro pour calculer MIN/MAX/MOYENNE d'une colonne d'une variable tableau à plusieurs dimensions


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut Macro pour calculer MIN/MAX/MOYENNE d'une colonne d'une variable tableau à plusieurs dimensions
    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.

    Nom : Tableau.jpg
Affichages : 3693
Taille : 133,4 Ko

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    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

  3. #3
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    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))

  4. #4
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    Je n'arrive pas à trouver la bonne syntaxe en VBA

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    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

  6. #6
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    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))

  7. #7
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    On fixe ses valeurs arbitrairement
    On calcul le min max moyenne dans un intervalle du tableau

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    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

  9. #9
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    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

  10. #10
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    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

  11. #11
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    Ok merci !
    Mais on est obligé de passer par un Array ?

    Voici un bout de code qui fonctionne pour un tableau 1 dimension :

    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
    Mais comment fait-on avec un tableau à X dimensions et quand on veut taper au milieu de celui-ci par exemple ?

  12. #12
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    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

  13. #13
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    Cela ne fonctionne pas sur un tableau de plus grande dimension

  14. #14
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    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

  15. #15
    Membre averti
    Homme Profil pro
    Technicien
    Inscrit en
    Avril 2016
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 31
    Par défaut
    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 :-)

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo