[EXCEL 97] Détermination du rang d'une valeur
Fermé
arthix
Messages postés
52
Date d'inscription
lundi 30 juin 2003
Statut
Membre
Dernière intervention
31 août 2006
-
20 avril 2005 à 14:29
random Messages postés 1612 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 30 mars 2006 - 28 avril 2005 à 10:34
random Messages postés 1612 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 30 mars 2006 - 28 avril 2005 à 10:34
A voir également:
- [EXCEL 97] Détermination du rang d'une valeur
- Liste déroulante excel - Guide
- Déplacer une colonne excel - Guide
- Calculer une moyenne sur excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
8 réponses
le problème est que la fonction rang ne fonctionne qu'avec la valeur exacte
alors on pourrait jouer ca comme ca
tu commences par une cellule intermédiaire
=cellule(c1)-mod(c1;10)
tu obtiens 20
ensuite tu veux le rang de 20
tu mets dans une autre cellule=rang(icicellullecontenant20;
c1:c6;1)
ca va te renvoyer 2 attention aux ex aequo
tu nommes b1:b1000 ch
puis tu utilises la fonctioon index(ch;cellule qui revoie2;3)
alors on pourrait jouer ca comme ca
tu commences par une cellule intermédiaire
=cellule(c1)-mod(c1;10)
tu obtiens 20
ensuite tu veux le rang de 20
tu mets dans une autre cellule=rang(icicellullecontenant20;
c1:c6;1)
ca va te renvoyer 2 attention aux ex aequo
tu nommes b1:b1000 ch
puis tu utilises la fonctioon index(ch;cellule qui revoie2;3)
random
Messages postés
1612
Date d'inscription
vendredi 26 novembre 2004
Statut
Membre
Dernière intervention
30 mars 2006
155
20 avril 2005 à 15:25
20 avril 2005 à 15:25
pas besoin de tri rang(matrice1;vecteur2)
random
Messages postés
1612
Date d'inscription
vendredi 26 novembre 2004
Statut
Membre
Dernière intervention
30 mars 2006
155
20 avril 2005 à 16:11
20 avril 2005 à 16:11
pardon j'ai été interrompu
essaye de faire rang(c2;b2:c6;1) tu obtiendras 22
si ca ne règle pas ta question il te reste les fonctions de base de données
essaye de faire rang(c2;b2:c6;1) tu obtiendras 22
si ca ne règle pas ta question il te reste les fonctions de base de données
arthix
Messages postés
52
Date d'inscription
lundi 30 juin 2003
Statut
Membre
Dernière intervention
31 août 2006
5
20 avril 2005 à 16:46
20 avril 2005 à 16:46
Pareil aucun résultat
ma solution : passer par une colonne intermédiaire pour eviter la saturation des 7 fonction enchainées ... pas glop pas glop excel 97 (je fais avec les outils fournis :-)
++
auré
ma solution : passer par une colonne intermédiaire pour eviter la saturation des 7 fonction enchainées ... pas glop pas glop excel 97 (je fais avec les outils fournis :-)
++
auré
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
G.David
Messages postés
768
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
1 juin 2020
203
27 avril 2005 à 15:59
27 avril 2005 à 15:59
A B C
___________
1 | 2 | 10 | 22 |
2 | 3 | 20 |
3 | 5 | 30 |
4 | 6 | 40 |
5 | 8 | 50 |
6 | 9 | 60 |
as tu essayé de retourner le tableau
_________
10 | 2 | 1 | 22
20 | 3 | 2 |
et de faire rechercheV(c1;tableau;2;vrai)
le parametre vrai donnant la valeur approchée
le faux donnant la valeur exact (logique microsoft !?!)
par contre j'ignore ce qui se passera après 25 ....
___________
1 | 2 | 10 | 22 |
2 | 3 | 20 |
3 | 5 | 30 |
4 | 6 | 40 |
5 | 8 | 50 |
6 | 9 | 60 |
as tu essayé de retourner le tableau
_________
10 | 2 | 1 | 22
20 | 3 | 2 |
et de faire rechercheV(c1;tableau;2;vrai)
le parametre vrai donnant la valeur approchée
le faux donnant la valeur exact (logique microsoft !?!)
par contre j'ignore ce qui se passera après 25 ....
bonjour
je ne sais pas si tu peux inverser tes colonnes A et B,
mais en le faisant tu obtiens facilement ce que tu cherche :
A B C D
___________
1 | 2 | 10 | 22 |=RECHERCHEV(C1;A1:B6;2)
2 | 3 | 20 |
3 | 5 | 30 |
4 | 6 | 40 |
5 | 8 | 50 |
6 | 9 | 60 |
avec la formule en D1 tu obtiens 3
Le but est le suivant : pour une valeur donnée (22 par exemple, en C1), je recherche son rang parmi la colonne B (pour la valeur directement inférieure, donc 20 ici) et je rend la valeur de la colonne A correspondante (soit 3 ici)
je ne sais pas si tu peux inverser tes colonnes A et B,
mais en le faisant tu obtiens facilement ce que tu cherche :
A B C D
___________
1 | 2 | 10 | 22 |=RECHERCHEV(C1;A1:B6;2)
2 | 3 | 20 |
3 | 5 | 30 |
4 | 6 | 40 |
5 | 8 | 50 |
6 | 9 | 60 |
avec la formule en D1 tu obtiens 3
Le but est le suivant : pour une valeur donnée (22 par exemple, en C1), je recherche son rang parmi la colonne B (pour la valeur directement inférieure, donc 20 ici) et je rend la valeur de la colonne A correspondante (soit 3 ici)
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 712
28 avril 2005 à 09:00
28 avril 2005 à 09:00
bonjour
désolé c'est validé erroné, voici la bonne version :
A B C D
___________
1 | 10 | 2 | 22 |=RECHERCHEV(C1;A1:B6;2)
2 | 20 | 3 |
3 | 30 | 5 |
4 | 40 | 6 |
5 | 50 | 8 |
6 | 60 | 9 |
désolé c'est validé erroné, voici la bonne version :
A B C D
___________
1 | 10 | 2 | 22 |=RECHERCHEV(C1;A1:B6;2)
2 | 20 | 3 |
3 | 30 | 5 |
4 | 40 | 6 |
5 | 50 | 8 |
6 | 60 | 9 |
random
Messages postés
1612
Date d'inscription
vendredi 26 novembre 2004
Statut
Membre
Dernière intervention
30 mars 2006
155
28 avril 2005 à 10:34
28 avril 2005 à 10:34
tu crées un module de class que tu nommes mac
dans lequel tu copies
Dim v As New Collection
Public Sub ajout(x As Variant)
Dim ou As Integer
If IsNumeric(x) Then
If v.Count = 0 Then
v.Add (x)
Else
ou = 1
Do While (x < v(ou)) Or ou > v.Count
ou = ou + 1
Loop
If ou > v.Count Then
v.Add (x)
Else
v.Add x, before:=ou
End If
End If
End If
End Sub
Public Function ordre(valcherche As Double, croissant As Boolean) As Variant
Dim u As Integer
For u = v.Count To 1 Step -1
If valcherche = v(u) Then
If Not croissant Then
ordre = u
Else
ordre = v.Count - u + 1
End If
Exit Function
End If
Next u
ordre = "erreur"
End Function
ensuite dans un module tu fais
Function nrang(maval As Double, sens As Boolean, p1 As Range, p2 As Range) As Variant
Dim plage As Range
Dim maco As New mac
Dim boucle As Variant
For Each boucle In p1
maco.ajout (boucle.Value)
Next
For Each boucle In p2
maco.ajout (boucle.Value)
Next
nrang = maco.ordre(maval, sens)
Set maco = Nothing
End Function
ensuite tu invoques la fonction nrang(cellule1,ascendant ou descendant (vrai ou faux); plage1; plage2)
dans lequel tu copies
Dim v As New Collection
Public Sub ajout(x As Variant)
Dim ou As Integer
If IsNumeric(x) Then
If v.Count = 0 Then
v.Add (x)
Else
ou = 1
Do While (x < v(ou)) Or ou > v.Count
ou = ou + 1
Loop
If ou > v.Count Then
v.Add (x)
Else
v.Add x, before:=ou
End If
End If
End If
End Sub
Public Function ordre(valcherche As Double, croissant As Boolean) As Variant
Dim u As Integer
For u = v.Count To 1 Step -1
If valcherche = v(u) Then
If Not croissant Then
ordre = u
Else
ordre = v.Count - u + 1
End If
Exit Function
End If
Next u
ordre = "erreur"
End Function
ensuite dans un module tu fais
Function nrang(maval As Double, sens As Boolean, p1 As Range, p2 As Range) As Variant
Dim plage As Range
Dim maco As New mac
Dim boucle As Variant
For Each boucle In p1
maco.ajout (boucle.Value)
Next
For Each boucle In p2
maco.ajout (boucle.Value)
Next
nrang = maco.ordre(maval, sens)
Set maco = Nothing
End Function
ensuite tu invoques la fonction nrang(cellule1,ascendant ou descendant (vrai ou faux); plage1; plage2)
20 avril 2005 à 15:22
J'ai bien compris que rang ne fctionne que si la valeur dont on cherche le rang fait partie de la sélection, mais mon idée était d'executer la fonction rang sur la matrice formée par A1:A6 plus la valeur en question, soit en fait sur le vecteur :
{10;20;30;40;50;60;22}
après avoir effectué un tri,
cependant il ne semble pas possible (tjrs avec excel 97) de créer un vecteur formé d'une sélection (ici A1:A6) et d'une valeur (C1 par ex ...
enfin oui si je sais effectivement que mes valeurs sont 10 20 30 etc... il est facile d'adopter ta solution, mon pb est plutot que mes valeurs sont du genre 22430 25100 26855 etc ... aucune logique mathématique ...
Merci pour ton aide en tout cas
++
auré