Calcul décile Excel

Fermé
katiaboutamdja Messages postés 13 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 15 décembre 2010 - Modifié par katiaboutamdja le 8/12/2010 à 14:29
katiaboutamdja Messages postés 13 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 15 décembre 2010 - 15 déc. 2010 à 14:32
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.

A voir également:

6 réponses

katiaboutamdja Messages postés 13 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 15 décembre 2010 3
8 déc. 2010 à 16:35
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 8/12/2010 à 17:15
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
katiaboutamdja Messages postés 13 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 15 décembre 2010 3
Modifié par katiaboutamdja le 9/12/2010 à 16:20
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
9 déc. 2010 à 17:33
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
katiaboutamdja Messages postés 13 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 15 décembre 2010 3
Modifié par katiaboutamdja le 9/12/2010 à 17:40
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 9/12/2010 à 18:40
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 9/12/2010 à 21:50
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
katiaboutamdja
10 déc. 2010 à 16:41
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
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
Modifié par eriiic le 10/12/2010 à 18:36
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
katiaboutamdja Messages postés 13 Date d'inscription jeudi 11 novembre 2010 Statut Membre Dernière intervention 15 décembre 2010 3
15 déc. 2010 à 14:32
Bon..
Je sais pas pourquoi c'est différent mais jbalance ca comme ca.
En tout cas merci beaucoup.
1
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 289
8 déc. 2010 à 16:10
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