Calculer la moyenne avec des conditions

Résolu/Fermé
hamid marseille - Modifié par hamid marseille le 7/10/2016 à 10:11
 hamidmarseille - 8 oct. 2016 à 13:00
Bonjour,
j'ai besoin d'une petite aide!
j'ai un fichier excel, ce fichier contient 30 onglet tous ces onglet contiennent un tableau de me nombre de ligne et colonnes. plus particulièrement dans chaque tableau il y'a deux colone N et O.
dans la colone N ya les écart comme 20 et dans la colonne O des noms comme CCO LYON, ULPRR et ULRM UFNA ....etc

désomrais je veux avoir un moyen d'aller chercher ces écart et calculer la moyenne dans la colone N si seulement la cellule a coté de l'écart est écrit CCO LYON ou ULRPP ou ULRM

genre dans la celule N8 = 20, la cellule O8 = CCO LYON
dans la cellule N10 = 12, la cellule O12 = ULPRR

alors la je calcule la moyenne de des écart qui 20+12= 32! 32/2 = 16 et j'affiche ce resultat dans une cellule
merci beaucoup pour votre aide.



3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 7/10/2016 à 14:04
bonjour

as tu essayer les Tableaux croisés Dynamiques avant de parler VBA ?

un exemple réalisé en 5 minutes
http://www.cjoint.com/c/FJhmeELPgKm

 Michel
0
hamid marseille
7 oct. 2016 à 14:35
merci miche, en fait je me suis mal exprimer! je peux appliquer ta solution lorsque j'ai qu'une seule feuil mais moi j'ai 30 feuils. chaque feuil représente un jour ce qui donne 30 feuil = 30 jour

donc il me demande faire ça en automatqiue
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > hamid marseille
7 oct. 2016 à 14:54
Excuse moi, effectivement j'avais mal vu !
bon WE
0
hamid marseille
7 oct. 2016 à 15:04
je te passe le code VBA que j'ai fais pour juste chercher dans quelle colone c'est écrit CCO LYON, UL RM et UL PRR.
mation que tu trouve l'un de ces mot clés va dans a cellule juste avant ( colonne N) et prend l'écart a coté et calcule la moyenne.

explication: si tu trouve trois cellules dans chaque cellule ya CCO lyon, UL RM et UL PRR, tu prend les écart de ces 3 cellule et calcule la moyenne tu me l'affiche dans la cellule auquel j'ai affecté la macro

voici le code :

Sub recherche()
Dim plage As Range

Set plage = ThisWorkbook.Worksheets("30").Range("o8:o180") 'la feuil numero 30 de la cellule o8 a o180
Monchiffre = "CCO LYON" 'adefinir suivant la recherche

For Each cell In plage
If cell.Value = Monchiffre Then
MsgBox cell.Address & " est l' adresse de la valeur: " & cell.Value
End If
Next cell

Dim plage1 As Range

Set plage1 = ThisWorkbook.Worksheets("30").Range("o8:o180") 'la feuil numero 30 de la cellule o8 a o180
Monchiffre1 = "UL RM" 'adefinir suivant la recherche

For Each cell In plage1
If cell.Value = Monchiffre1 Then
MsgBox cell.Address & " est l' adresse de la valeur: " & cell.Value
End If
Next cell

Dim plage2 As Range

Set plage2 = ThisWorkbook.Worksheets("30").Range("o8:o180") 'la feuil numero 30 de la cellule o8 a o180
Monchiffre2 = "UL PRR" 'adefinir suivant la recherche

For Each cell In plage2
If cell.Value = Monchiffre2 Then
MsgBox cell.Address & " est l' adresse de la valeur: " & cell.Value
End If
Next cell
End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
7 oct. 2016 à 15:08
je n'aurais pas le temps aujourdhui mais une idée qui trotte dans ma tite tête...

Les 3 valeurs indiquées CCO Lyon... sont elles les seules dans tes tableaux ?

le mieux serait que tu mettes en PJ la structure des tes tableaux et + particulièrement : ent^tes ? nbre de lignes; les 2 colonnes N O suffiront

30 onglets et pas d'autres genre page de garde ou... ?
0
hamid marseille
7 oct. 2016 à 16:32
dis tu veux bien m'expliquer comment t'inclure une piece jointe! car je t'ai préparé le fichier. merci d'avance
0
hamid marseille
7 oct. 2016 à 16:37
non finalement voila j'a réussi a inclure le fichier en PJ

voici le lien du fichier : http://www.cjoint.com/c/FJhoIYO7VZF

NON y'en a plusieurs valeurs dans le tableau.

oui je te passe en pièce jointe les deux colonne mais y'aura 30 feuils dans le fichier + une feuille ou je dois afficher les moyenne.

merci d'avance pour ton aide! je suis vraiment dans la merde
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 8/10/2016 à 12:14
Bonjour

Calculs fait sur 4 jours pour essais à modifier dans macro

calcul des moyennes que pour les unités annoncées: "CCO LYON ou ULRPP ou ULRM"

http://www.cjoint.com/c/FJikkBFXBEm

le code
Option Explicit
Dim T_jour
'------------
Sub compiler()
Dim Mois As Byte, Cptr As Byte

Application.ScreenUpdating = False
'nbre de jours dans le mois
With Sheets("les MOYENNE")
'nbre de jours dans le mois
Mois = Application.CountA(.Range("A5:A35"))
'mémorise les jours du mois
ReDim T_jour(1 To Mois)

'For Cptr = 1 To Mois A ACTIVER APRES ESSAIS
For Cptr = 1 To 4 ' A SUPPRIMER APRES ESSAIS
'appelle le calcul de la moyenne du mois
Call Moyenne_jour(Cptr)
Next

'restitue les moyennes du mois
.Range("B5").Resize(Mois, 1) = Application.Transpose(T_jour)
End With
End Sub

'------------------------------------------------------------------------------
Sub Moyenne_jour(Jour)
Dim Onglet As String, Derlig As Integer, T_in, Cptr As Integer, Unite(), Test, Nbre As Integer, Total As Double

'mise au format de la feuille étudiée
Onglet = Format(Jour, "00")

With Sheets(Onglet)
Derlig = .Columns("N").Find(what:="*", searchdirection:=xlPrevious).Row
'mémorise les colonnes N-O
T_in = .Range("N2:O" & Derlig)
'mémorise les unités à prendre en compte
Unite = Array("CCO LYON", "ULPRR", "ULRM UFNA")
'apurage sur unités sélectionnées
For Cptr = 1 To UBound(T_in)
Test = Filter(Unite, T_in(Cptr, 2), True)
'si l 'unit existe dans la colonne O
If UBound(Test) = 0 Then
Nbre = Nbre + 1 'nombre de prise en compte
Total = Total + T_in(Cptr, 1) 'cumul des ecarts colonne N
End If
Next

'calcul de la moyenne du jour
If Nbre > 0 Then
T_jour(Jour) = Total / Nbre
Else
T_jour(Jour) = "vide"
End If
End With
End Sub

 Michel
0
hamidmarseille
8 oct. 2016 à 12:47
bonjour, je te remercie pour cette solution, tu ma beaucoup aidé! mais j'ai une erreur sur le code, au niveau de :

T_jour(Jour) = Total / Nbre

l'erreur dis : sub ou fonction non définie

j'essaye de comprendre d'où vient ce bug mais aucun aidé! a mon avis le programme est juste et parfait
0
hamidmarseille
8 oct. 2016 à 13:00
michel, finalement c'était une erreur de ma part, j'avais oublié de déclaré T_jour en haut du code. je te remercie encore une fois :) , la macro marche a merveille. super. pour les gens qui ont besoin de cette solution. alors c'est la bonne macro. SUPER :)
0