Calcul décile Excel
katiaboutamdja
Messages postés
16
Statut
Membre
-
katiaboutamdja Messages postés 16 Statut Membre -
katiaboutamdja Messages postés 16 Statut Membre -
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.
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:
- Decile excel
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Déplacer colonne excel - Guide
- Excel trier par ordre croissant chiffre - Guide
6 réponses
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
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
Bonjour,
proposition en vba :
sélectionner la plage et lancer la macro.
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
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
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.
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.
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
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
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
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
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
eric
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
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
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
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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+
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+