Moyenne des cellules d'un tableau

marcobosio

XLDnaute Nouveau
Bonjour...
désolé de reposter une nouvelle fois un message déjà envoyé la semaine dernière...mais j'ai vu que Pierrot y avait apporté une réponse sans avoir le temps de récupérer le code avant le crash du serveur

En gros...je souhaiterais :
- que la macro calcule les moyennes des valeurs liées aux clés de tri (soit la moyenne des valeurs liées à "information", à "sécurité", etc.)
Or, à l'heure actuelle elle fait la moyenne de toutes les données stockées dans la colonne du tableau, quelque soit cette clé de tri.
- que la macro ne prenne pas en compte une clé de tri vide (au cas où l'utilisateur n'aurait pas renseigné la cellule du tableau)

D'avance merci pour votre aide, et encore une fois un grand merci à Pierrot pour son aide la semaine dernière (même si je n'ai malheuresement pas pu en profiter...)

Bon début de semaine !
 

Pièces jointes

  • Tdb_ligne_V0.2.zip
    25.9 KB · Affichages: 27

Gorfael

XLDnaute Barbatruc
Re : Moyenne des cellules d'un tableau

marcobosio à dit:
Bonjour...
désolé de reposter une nouvelle fois un message déjà envoyé la semaine dernière...mais j'ai vu que Pierrot y avait apporté une réponse sans avoir le temps de récupérer le code avant le crash du serveur

En gros...je souhaiterais :
- que la macro calcule les moyennes des valeurs liées aux clés de tri (soit la moyenne des valeurs liées à "information", à "sécurité", etc.)
Or, à l'heure actuelle elle fait la moyenne de toutes les données stockées dans la colonne du tableau, quelque soit cette clé de tri.
- que la macro ne prenne pas en compte une clé de tri vide (au cas où l'utilisateur n'aurait pas renseigné la cellule du tableau)

D'avance merci pour votre aide, et encore une fois un grand merci à Pierrot pour son aide la semaine dernière (même si je n'ai malheuresement pas pu en profiter...)

Bon début de semaine !
Salut
Je sais que c'est pénible de recommencer, mais il faut un minimum d'infos
Moyennes ? données ? périodes ? Feuilles concernées ? Où mettre les résultats ?

Ou bien, tu attends que pierrot vienne à ton secours :D
A+
 

marcobosio

XLDnaute Nouveau
Re : Moyenne des cellules d'un tableau

Lol :eek:)
C'est vrai que c'est un peu succint !

Alors :
- J'ai un tableau détaillé dans l'onglet "QUALITE_SERVICE", qui donne des valeurs mensuelles pour n critères définis par l'utilisateur (dans mon exemple, les critères "CERTIFICATION").
Chaque critère est associé à une "clé", qui permet de faire des regroupements de ces critères autour de 9 thèmes communs.

Ce que je voudrais...
Alimenter, à partir de ce tableau de bord détaillé, le tableau de synthèse de l'onglet "TDB" (celui de droite), qui reprend les 9 clés dont j'ai parlé plus haut.
Pour chaque clé, je voudrais insérer dans ce tableau :
- L'objectif (à partir de la colonne "D", soit du niveau d'exigence, de l'onglet Qualité de Service)
Celui ci est calculé, pour chaque clé, par la moyenne des niveaux d'exigence des n critères associés à la clé en question
Ex. Pour la clé "information", les critères CO1 et CSI20 de l'onglet détaillé
- De la même façon, la valeur M du mois en cours
- La valeur M-1
- Le cumul depuis le début d'année

Une macro (développée grâce à Pierrot...) permet d'alimenter ce tableau de synthèse, mais les moyennes sont fausses...
C'est pour ça que si Pierrot passe par là, je pense qu'il pourra copier/coller la macro adaptée qu'il avait publié vendredi...

Un grand merci en tout cas à vous tous pour votre aide !
 

Pierrot93

XLDnaute Barbatruc
Re : Moyenne des cellules d'un tableau

Bonjour Marco, Gorfael

je te remets le code ci dessous, attention il avait été fait avec ton fichier d'origine. j' ais apporté des petites modifications au code, suite à ton post de vendredi. A tester et à adapter en fonction de ton dernier fichier :

Code:
Option Explicit
Sub Test()
Dim c As Range, macoll As New Collection, montableau(), i As Byte
Dim t As Byte, montableau2(), m As Range, lc As String

With Sheets("QUALITE_SERVICE")

Set m = .Range("D1:O1").Find(DateSerial(Year(Date), Month(Date), 1), , xlFormulas, xlWhole)
If m Is Nothing Then MsgBox "Mois en cours pas dans la base.": Exit Sub
lc = Left(m.Address(0, 0), (m.Column < 27) + 2)

For Each c In .Range("B2:B" & .Range("B65536").End(xlUp).Row)
On Error Resume Next
    macoll.Add c.Value, CStr(c.Value)
On Error GoTo 0
Next c

For i = 1 To macoll.Count
    For Each c In .Range("B2:B" & .Range("B65536").End(xlUp).Row)
        If c.Value = macoll.Item(i) Then
            ReDim Preserve montableau(0 To t)
            If Not IsEmpty(c.Offset(0, 1).Value) Then montableau(t) = c.Offset(0, 1).Value
            ReDim Preserve montableau2(0 To t)
            If Not IsEmpty(.Range(lc & c.Row).Value) Then montableau2(t) = .Range(lc & c.Row).Value
            t = t + 1
        End If
    Next c
    Set c = Sheets("TDB").Range("A2:A" & Sheets("TDB").Range("A65536").End(xlUp).Row).Find(macoll.Item(i), , xlValues, xlWhole)
    If Not c Is Nothing Then
        c.Offset(0, 2).Value = Application.WorksheetFunction.Average(montableau)
        c.Offset(0, 3).Value = Application.WorksheetFunction.Average(montableau2)
    Else
        MsgBox "impossible de coller les données"
        Exit Sub
    End If
    ReDim montableau(0 To 0)
    ReDim montableau2(0 To 0)
Next i

End With

End Sub

bon après midi
@+
 

Pierrot93

XLDnaute Barbatruc
Re : Moyenne des cellules d'un tableau

Re

un truc me revient, avec le dernier code fourni vendredi, sur l'onglet "Qualite_service" n'oublie pas de renseigner les mois par une date (01/01/2007) plutôt que "janv", ensuite tu mets le format que tu veux.

@+
 

marcobosio

XLDnaute Nouveau
Re : Moyenne des cellules d'un tableau

Hello à tous les deux,

et un grand merci pour votre aide.
Pierrot, j'ai bien réussi à adapter le code, et je ne sais pas comment te remercier...j'ai acheté des bouquins VBA, mais j'avoue qu'on n'apprend jamais autant que par la pratique !

Maintenant, une nouvelle étape à franchir, composée de 2 besoins (priorisés dans l'ordre, le 1er étant important, le 2ème "si possible") :

A/ TABLEAUX DE SYNTHESE
Dans l'onglet "qualité de service", il est possible de définir une variable "état de synthèse" (colonne C dans l'exemple) pour chaque critère :
l'utilisateur peut saisir cette variable ou ne pas la saisir.

Je souhaiterais donc que :
- si l'utilisateur saisit qqchose dans la colonne "état de synthèse", tous les critères associés à ce qqchose se retrouvent dans un petit tableau de synthèse dans l'onglet "TDB".
Ainsi, dans l'exemple, l'utilisateur a saisi 4 variables dans état de synthèse (certification, qualité gares, qualité trains et autres). J'aimerais donc que 4 tableaux soient crées dans l'onglet TDB, reprenant les critères pour lesquels la variable "état de synthèse" est renseignée.

B/ GENERER N TABLEAUX DE SYNTHESE
...je précise pour commencer que si ce 2ème besoin est trop compliqué, je peux limiter le nombre de tableaux à générer à 4, parce que j'avoue que je n'ai pas la moindre idée de comment m y prendre :eek:)

Comme l'utilisateur peut potentiellement saisir ce qu'il veut dans la colonne "état de synthèse", il faudrait que la macro sache créer n tableaux dans l'onglet "TDB"...
Je vois bien le truc comme ça :
- le 1er tableau est crée à partir de la cellule A40
- le 2ème à partir de la cellule I40
- pour le 3ème, la macro cherche la dernière ligne du 1er tableau (celui crée en A40), saute 2 lignes, et le crée. Ce tableau commencera donc à la ligne A40.Offset(n lignes du 1er tableau + 2,0) :eek:)
- pour le 4ème, même principe, mais en sautant 2 lignes à la fin du 2ème tableau.
- le 5ème serait crée sous le 5ème
- le 6ème sous le 6ème

...toute autre idée est bien évidemment la bienvenue

Pour le moment aucune de mes tentatives ne fonctionne...si vous avez des pistes, je suis donc preneur ;o)

Et après ça, promis, j'arrête de vous embêter :eek:))
Et encore un grand merci à tous pour votre aide !!
 

Pièces jointes

  • TDB_test_v0.3.zip
    30.5 KB · Affichages: 33

marcobosio

XLDnaute Nouveau
Re : Moyenne des cellules d'un tableau

J'avance...j'avance :eek:)
Pour le 1er point, je suis en train de passer par une boucle...

Petite question bête : comment compter le nombre de lignes d'une zone "range" ?

J'ai essayé
.Range("C15:C" & .Range("C65536").End(xlUp).Rows.Count)

... mais ça ne fonctionne pas...
 

Gorfael

XLDnaute Barbatruc
Re : Moyenne des cellules d'un tableau

marcobosio à dit:
J'avance...j'avance :eek:)
Pour le 1er point, je suis en train de passer par une boucle...

Petite question bête : comment compter le nombre de lignes d'une zone "range" ?

J'ai essayé
.Range("C15:C" & .Range("C65536").End(xlUp).Rows.Count)

... mais ça ne fonctionne pas...
Salut
Ta formule donne : C11 : C1

Range("C65536").End(xlUp).Rows.Count : nombre le ligne de la dernière cellule non-vide de la colonne C :D
Te reste plus qu'à essayer
.Range("C15:C" & .Range("C65536").End(xlUp).row).rows.count
ou
Range("C65536").End(xlUp).row-15
ou
Range(Range("C15"),range("C65536").end(xlup)).rows.count
en plus court Range([C15], [C65536].end(xlup)).rows.count
A+
 
Dernière édition:

marcobosio

XLDnaute Nouveau
Re : Moyenne des cellules d'un tableau

Hello !!
Super, merci Gorfael...ça fonctionne parfaitement et j'ai réussi à répondre à mon premier besoin (alimenter les tableaux de synthèse...).

Maintenant je m'attaque au 2ème point décrit ci-dessus...soit la création de n tableaux de synthèse en fonction de ce qui est saisi par l'utilisateur...une autre paire de manches ;o)

Merci !!
 

Discussions similaires

Statistiques des forums

Discussions
312 389
Messages
2 087 935
Membres
103 678
dernier inscrit
bibitm