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 :

VBA - average sous conditions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2018
    Messages : 40
    Par défaut VBA - average sous conditions
    Bonjour,

    je désire résliaser ceci en vba mais je bloque. Dans un nouveau tableau je desires obtenir la moyenne des 3 plus grandes valeurs de la colonne 2 par classes. Ex : tableau final : moyenne top 3 des A, ligne 2, moyenne top 3 des B etc...
    ci dessous un ex de données sources.


    A 100
    A 110
    A 121
    B 133,1
    B 146,41
    B 161,051
    B 177,1561
    C 194,87171
    C 214,358881
    C 235,7947691
    C 259,374246

    merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Pourquoi VBA ?
    Ici, un classeur avec des formules matricielles :

    Classeur1.xlsx

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2018
    Messages : 40
    Par défaut
    merci du retour

    Car je ne connais pas a l'avance ce qu'il y aura dans la colonne 1 (A,B, C est juste pour l'ex) et le nombre de lignes .

    merci d'avance

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Re,

    Donc, en VBA et en inscrivant les formules en colonne D :
    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
     
    Sub Test()
     
        Dim Lig As Long
        Dim Tbl
        Dim I As Integer
     
        'tableau de lettres, peut être évolutif
        Tbl = Array("A", "B", "C")
     
        'recherche la dernière ligne non vide de la colonne A de la feuille active (à adapter)
        With ActiveSheet: Lig = .Cells(.Rows.Count, 1).End(xlUp).Row: End With 'sur colonne A
     
        'inscrit les formules en colonne D (à adapter)
        For I = 0 To UBound(Tbl)
     
            Cells(I + 1, 4).FormulaArray = "=(LARGE((R1C2:R" & Lig & "C2)*(R1C1:R" & Lig & "C1=""" & _
                                           Tbl(I) & """)*1,1)+LARGE((R1C2:R" & Lig & "C2)*(R1C1:R" & Lig & "C1=""" & _
                                           Tbl(I) & """)*1,2)+LARGE((R1C2:R" & Lig & "C2)*(R1C1:R" & Lig & "C1=""" & _
                                           Tbl(I) & """)*1,3))/3"
     
        Next I
     
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2018
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juillet 2018
    Messages : 40
    Par défaut
    Bonsoir

    encore merci pour le retour

    ce code me donne une visibilité. Cependant, je pense en fait que j'ai manqué de précision dans ma demande, désolé.
    1.Je ne connais pas à l'avance ce qu'il y auras dans la colonne 1, j'ai mis comme exemple A,B,C mais ca peut etre des noms , des numero etc... Du coup la variable de recherche doit etre variable.
    2. Le cas ou il n'a pas pas 3 occurrences dans la colonne A, ca doit etre la moyenne des 2 , ou si un seul ce que ca renvoie.

    Codialement

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Avec un dictionnaire dans ce cas :
    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
     
    Sub Test()
     
        Dim Dico As Object
        Dim Cle As Variant
        Dim Plage As Range
        Dim Cel As Range
        Dim Lig As Long
        Dim I As Integer
     
        Set Dico = CreateObject("Scripting.Dictionary")
     
        'défini la plage sur la colonne A de la feuille active à partir de A1
        With ActiveSheet: Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
     
        'dédoublonne avec un dico
        For Each Cel In Plage: Dico(Cel.Value) = Cel.Value: Next Cel
     
        Cle = Dico.Keys
        Lig = Plage.Count
     
        'inscrit les formules en colonne D (à adapter)
        For I = 0 To Dico.Count - 1
     
            Cells(I + 1, 4).FormulaArray = "=(LARGE((R1C2:R" & Lig & "C2)*(R1C1:R" & Lig & "C1=""" & _
                                           Cle(I) & """)*1,1)+LARGE((R1C2:R" & Lig & "C2)*(R1C1:R" & Lig & "C1=""" & _
                                           Cle(I) & """)*1,2)+LARGE((R1C2:R" & Lig & "C2)*(R1C1:R" & Lig & "C1=""" & _
                                           Cle(I) & """)*1,3))/3"
     
        Next I
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA impression sous condition
    Par Jmila dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/12/2016, 22h15
  2. [Excel VBA] Faire une condition sous Excel
    Par ANTMA dans le forum Excel
    Réponses: 3
    Dernier message: 03/08/2007, 11h20
  3. [VBA-E] Copier coller sous conditions de couleur
    Par titeZ dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/04/2007, 18h27
  4. [VBA-E]executer "du code" sous conditions
    Par Echizen1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/06/2006, 20h02
  5. [VBA-E]feuille créée sous condition
    Par Angel79 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2006, 15h11

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