XL 2019 Calcul de la moyenne et étendue sur plusieurs lignes

Hanjen

XLDnaute Nouveau
Bonjour tous,

Je souhaite calculer par le biais d'une macro, la moyenne et l'étendue de 3 valeurs situées dans des cellules qui ne se suivent pas.
Les valeurs sont récupérées dans le feuille 1 et les résultats sont mis en Feuil2.
J'ai préparé un fichier qui représente mon besoin, j'ai fais les calcul avec Excel pour que vous ayez une idée.

Merci pour votre aide
 

Pièces jointes

  • Calcul_Moyenne_Etendue.xlsm
    26.7 KB · Affichages: 22

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Hanjen,
Un essai en PJ avec :
VB:
Sub Calcul_moyenne_etendue()
    Sheets("Final").Range("A5:E" & Sheets("Final").Range("A65500").End(xlUp).Row).ClearContents
    Application.ScreenUpdating = False
    DL = Sheets("BDD").Range("A65500").End(xlUp).Row
    Set F = Sheets("BDD")
    With Sheets("Final")
        .Activate
        For L = 5 To DL
            .Cells(L, "A") = F.Cells(L, "A")
            .Cells(L, "B") = (F.Cells(L, "B") + F.Cells(L, "H") + F.Cells(L, "N")) / 3
            .Cells(L, "C") = (F.Cells(L, "D") + F.Cells(L, "J") + F.Cells(L, "P")) / 3
            .Cells(L, "D") = (F.Cells(L, "E") + F.Cells(L, "K") + F.Cells(L, "Q")) / 3
            .Cells(L, "E") = Application.Max(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q")) _
                            - Application.Min(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q"))
        Next L
    End With
End Sub
 

Pièces jointes

  • Calcul_Moyenne_Etendue.xlsm
    26 KB · Affichages: 5

Hanjen

XLDnaute Nouveau
Bonjour Hanjen,
Un essai en PJ avec :
VB:
Sub Calcul_moyenne_etendue()
    Sheets("Final").Range("A5:E" & Sheets("Final").Range("A65500").End(xlUp).Row).ClearContents
    Application.ScreenUpdating = False
    DL = Sheets("BDD").Range("A65500").End(xlUp).Row
    Set F = Sheets("BDD")
    With Sheets("Final")
        .Activate
        For L = 5 To DL
            .Cells(L, "A") = F.Cells(L, "A")
            .Cells(L, "B") = (F.Cells(L, "B") + F.Cells(L, "H") + F.Cells(L, "N")) / 3
            .Cells(L, "C") = (F.Cells(L, "D") + F.Cells(L, "J") + F.Cells(L, "P")) / 3
            .Cells(L, "D") = (F.Cells(L, "E") + F.Cells(L, "K") + F.Cells(L, "Q")) / 3
            .Cells(L, "E") = Application.Max(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q")) _
                            - Application.Min(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q"))
        Next L
    End With
End Sub
Je viens de l'adapter à mon programme il fonctionne bien :) merci
Je souhaite mettre la colonne E en pourcentage j'ai essayé :
.Cells(i,"E").Numerformat="0.00%": . Application.Max(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q")) _
- Application.Min(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q"))
Ca ne marche pas...je ne sais pas où placer le "0.0%":
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Puisque Excel 2019 une requête power query. Pour cela les tables on été nommées 'Table1' à 'Table3'.

La requête 'Résultat', est composée de trois requêtes ( 1 par table) et d'elle-même (Pour démonstration étape par étape)

La requête 'ToutEnUn' fait la même chose en une seule requête. Son résultat est sur la feuille 'Rq-ToutEnUn'.

Cordialement
 

Pièces jointes

  • Calcul_Moyenne_Etendue.xlsm
    46.9 KB · Affichages: 3

Hanjen

XLDnaute Nouveau
Le format est :
VB:
.Cells(L, "E") = Format(Application.Max(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q")) _
                            - Application.Min(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q")), "0.00%")
ce qui m'échappe est que max-min n'est pas un % mais une valeur.
J'ai fais une erreur sur le fichier que j'ai préparé... mais les valeurs sont bien en %
Je viens de tester ça marche bien :)
merci
 

Hanjen

XLDnaute Nouveau
Bonjour,

Puisque Excel 2019 une requête power query. Pour cela les tables on été nommées 'Table1' à 'Table3'.

La requête 'Résultat', est composée de trois requêtes ( 1 par table) et d'elle-même (Pour démonstration étape par étape)

La requête 'ToutEnUn' fait la même chose en une seule requête. Son résultat est sur la feuille 'Rq-ToutEnUn'.

Cordialement
Merci je regarde ça pour comprendre et apprendre :) je reviens vers vous si j'ai une question.
Sinon @sylvanu a répondu à mon problème.
 

Hanjen

XLDnaute Nouveau
J'ai fais une erreur sur le fichier que j'ai préparé... mais les valeurs sont bien en %
Je viens de tester ça marche bien :)
merci
Bonjour à tous,
je me permets de relancer la discussion car je ne trouve pas ma réponse ailleurs
avec la fonction Format(x,x) pour définir le nombre de décimal j'obtiens un triangle vert d'erreur dans mes cellules m'indiquant une erreur et que les cellules sont du texte alors que ce sont bien des nombres :(

1619779750796.png
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Au post #7 je vois que vous avez :
.Cells(L, "E") = Format(Application.Max(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q")) _
- Application.Min(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q")), "0.00%")

C'est la fonction format qui produit un texte dans vos cellules.

Mettez plutôt :
.Cells(L, "E") = Application.Max(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q")) _
- Application.Min(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q"))

Et formatez votre colonne en pourcentage ou rajouter au code :
.Cells(L,"E").NumberFormat = "0.00%"

Ou avec un With :
VB:
With .Cells(L,"E3")
   .Value = Application.Max(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q")) _
               - Application.Min(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q"))
   .NumberFormat = "0.00%"
End With
Cordialement
 

Hanjen

XLDnaute Nouveau
Bonjour,

Au post #7 je vois que vous avez :


C'est la fonction format qui produit un texte dans vos cellules.

Mettez plutôt :


Et formatez votre colonne en pourcentage ou rajouter au code :


Ou avec un With :
VB:
With .Cells(L,"E3")
   .Value = Application.Max(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q")) _
               - Application.Min(F.Cells(L, "E"), F.Cells(L, "K"), F.Cells(L, "Q"))
   .NumberFormat = "0.00%"
End With
Cordialement
Merci pour votre retour!
J'ai opté pour la solution

.Cells(L,"E").NumberFormat = "0.00%"

ça fonctionne :) maintenant si je ne veux pas de décimal (seulement pour une colonne). J'ai essayé le "0" mais il ne comprends pas ahhh
 

Discussions similaires