Calculer la moyenne avec des conditions

Résolu
hamid marseille -  
 hamidmarseille -
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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. hamid marseille
       
      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
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > hamid marseille
         
        Excuse moi, effectivement j'avais mal vu !
        bon WE
        0
    2. hamid marseille
       
      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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. hamid marseille
       
      dis tu veux bien m'expliquer comment t'inclure une piece jointe! car je t'ai préparé le fichier. merci d'avance
      0
    2. hamid marseille
       
      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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. hamidmarseille
       
      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
    2. hamidmarseille
       
      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