Calcul décile Excel

Bonjour,

Bonjour tout le monde

J'ai un tableau dans lequel j'ai des colonnes de chiffre de la ligne 1 à la ligne 548, et

à la place de ces chiffres je veux avoir D1, D2, D3.....jusqu'à D9 ce qui correspond aux 9 déciles et ce pour chaque colonne.

Par exemple le premier chiffre est à la ligne 17 colonne 8 (parceque y'a des cellules ou y'a rien cela je veux les laisser vide): c'est 54 (les chiffres vont de 1 à 100):
je veux une formule qui me trouve à quel décile ce chiffre appartient et si c'est au décile 3 par exemple je veux avoir D3 et pas 17 (D3 est le décile 3 baser sur le calcul des deciles de la colonne en question et ce colonne par colonne)

Merci beaucoup de me lire et de l'aide que vous pourrez m'apporter.

6 réponses

  1. Merci pour ta réponse
    Les deciles jlai ai déja calculé pour chaque colonne
    Ouais effectivement c pas simple
    jpourrais faire ca avec un macro vb mais j'y arrive pas non plus jcrois que c encore plus dur:

    j'ai un code qui marche bien mais c'est juste pour une colonne car bien sur les valeurs des déciles changent d'une colonne à l'autre:

    C ca ma macro si tu connais mieux vba mais bien sur c que pour les déciles de la 1ère colonne donc bien sur j'aimerai généraliser ca pour toutes les autres colonnes.......

    Merci pour tes réponses.

    Sub Décile()

    Décile1 = 20.9
    Décile2=...........
    jusuq à Décile9

    Dim w As Worksheet
    For Each w In Worksheets
    Range("AM20:FB619").Select
    For Each Cellule In Selection
    If Cellule.Value < Décile1 Then Cellule.Value = D1
    .......................
    If Cellule.Value > Décile9 Then Cellule.Value = D10
    Next Cellule

    Next w

    End Sub
    1
    1. Contributeur
      Bonjour,

      proposition en vba :
      sélectionner la plage et lancer la macro.
      Sub decile()
          Dim decile(9) As Double, c As Range, i As Long
          If MsgBox("Remplacer par les déciles sur " & Selection.Address & ". (" & Selection.Cells.Count & " valeurs)", vbYesNo + vbQuestion, "Confirmation") = vbNo Then Exit Sub
          For i = 1 To 9
              decile(i) = Application.WorksheetFunction.Percentile(Selection, i / 10)
          Next i
          For Each c In Selection
              For i = 9 To 1 Step -1
                  If c > decile(i) Then Exit For
              Next i
              c = "D" & i + 1
          Next c
      End Sub

      Fais qcq tests pour voir si ça correspond à ce que tu veux

      eric

      EDIT : ajout d'une petite sécurité pour éviter les erreurs de manip
      1
      1. Jte remercie beaucoup pour ton aide.

        mes chiffres vont de AM20 à FB619 avec beaucoup de cellules vide qui doivent rester vide et avec cette macro j'ai des D10 un peu partout y compris la ou j'ai des cellules vides.

        Sinon en comparant à une colonne que je fait sur Excel en utilisant la fonction centile à part les D10 que j'ai à la place des cellules vides j'ai des petites différences pour le dernier décile du style j'ai D10 avec cette macro et moi sur ma colonne en utilisant excel(la fonction centile) j'ai D9

        Et sinon en vb tu connais pas comment on utilise les tableaux c beaucoup plus rapide pour des tableaux de taille importante, cette macro se fait en 1 min à peu près. mais la vitesse de la macro c secondaire t deja trop gentil de m'aider

        Merci encore pour ton aide c sympa.
        1
        1. Contributeur
          ok, je verrai ça ce soir (si pas de pb...)
          par contre ça serait interessant que tu déposes un fichier anonymisé sur cijoint.fr et que tu colles le lien ici.
          Précises dessus là où tu trouves des différences (D9-D10). Moi j'ai utilisé If c > decile(i), il faut peut-être >= ?
          Et précise aussi si tu as des cas en plus que les cellules vides à ne pas traiter

          eric
          0
        2. j'arrive pas à le déposer mon fichier il est ptetre trop lourd. mais jpeux tlenvoyer par mail, le mien c doudou-boutamdja009@hotmail.fr

          Merci encore t gentil
          0
        3. Contributeur
          S'il ne passe pas sur cijoint.fr il passera encore moins par mail...
          Allège-le, le tout est qu'il y ait une plage où la différence se produit. Et s'il fait plus de 8Mo tu peux le zipper
          Précise aussi si tu n'as que des valeurs dans les plages concernées ou s'il peut y avoir des formules à conserver.
          eric

          PS : édite ton message pour éliminer l'adresse mail si tu ne veux pas être spammée encore plus
          0
        4. Contributeur
          J'ai trouvé l'erreur sûrement à l'origine des différences (i as long au lieu de as double)
          Contrôle avec cette version, le fichier exemple n'est peut-être pas nécessaire.
          Je calcule en mémoire, ça devrait être plus rapide
          Sub decile() 
              Dim decile(9) As Double, i As Double 
              Dim datas(), lig As Long, col As Long 
              If MsgBox("Remplacer par les déciles sur " & Selection.Address & ". (" & Selection.Cells.Count & " valeurs)", vbYesNo + vbQuestion, "Confirmation") = vbNo Then Exit Sub 
              If Selection.Cells.Count = 1 Then Exit Sub 
              datas = Selection 
              For i = 1 To 9 
                  decile(i) = Application.WorksheetFunction.Percentile(datas, i / 10) 
              Next i 
              For lig = 1 To Selection.Rows.Count 
                  For col = 1 To Selection.Columns.Count 
                      If datas(lig, col) <> "" Then 
                              For i = 1 To 9 
                                  If datas(lig, col) <= decile(i) Then Exit For 
                              Next i 
                              datas(lig, col) = "D" & i 
                      End If 
                  Next col 
              Next lig 
              Selection = datas 
          End Sub

          eric
          0
      2. Merci beaucoup pour ton aide

        sinon
        pour les cellules vides c bon ces cellules reste vide

        Mais avec cette macro ca m'affiche toujours un ou deux décile en dessous ou au dessus par rapport à excel avec la fonction centile.

        par exemple à la ligne 27 avec cette macro on a D8 D8 D8 D1 D1 D1 D1....

        et avec ma fonction centile d'excel (à la ligne 1027) D9 D9 D9 D3 D3 D3 D3

        Donc je sais pas pourquoi

        en tout cas merci bien. jvais essayer dbosser dessus pour essayer dcomprendre pourquoi
        1
        1. Contributeur
          J'avais testé sur un petit tableau aléatoire, les déciles avaient la même valeur sur la feuille et en vba.
          De plus WorksheetFunction.Percentile fait appel à la fonction centile() des feuilles
          Sans fichier exemple avec erreur impossible de rechercher qcq chose...
          Après avoir déposé ton fichier sur cijoint.fr il faut coller le lien fourni ici.
          eric
          0
      3. Bon..
        Je sais pas pourquoi c'est différent mais jbalance ca comme ca.
        En tout cas merci beaucoup.
        1
        1. bonjour,

          exposé comme ça ce n'est pas simple.

          pour infos, il faut utiliser la fonction centile(matrice;0,1) : 0,1 représente le décile.

          la matrice représente la colonne A ou b ou c ou tout autre zone.

          Donc en résumé on a une matrice (ensemble de cellule) qui donne une valeur.

          Je pense qu'il faut recréer un autre tableau mais cela reste flou.
          A+
          0