OVH Cloud OVH Cloud

Classement et coordonnées de cellule

3 réponses
Avatar
Stach
Bonjour =E0 tous,

Qq peut-il me donner le code VBA qui me permettrai de=20
r=E9aliser la chose suivante:

Dans la colonne A j'ai 5 chiffres. J'aimerai que dans la=20
colonne B apparaisse le classement de ceux-ci.

exemple:

A B =20
17 5 =20
7 1 =20
14 4 =20
9 2 =20
13 3 =20

J'aimerai =E9galement pouvoir r=E9cup=E9rer les coordonn=E9es de=20
chaque chiffre =E0 savoir:

Le 1er chiffre (7) se trouve dans la cellule: Cells(3,1)
Le 2=E8me chiffre (9) se trouve dans la cellule: Cells(5,1)
Le 3=E8me chiffre(13) se trouve dans la cellule: Cells(6,1)
etc..

Est-ce possible?

Grand merci.

Stach ;-)

3 réponses

Avatar
Vincent.
Salut
La petite procéduire suivante ma paraît assez adaptée
(attention quand même au fait que je n'ai pas d'entête à
mes colonnes A et B)...

Sub zaza()
Range("B1").EntireColumn.Insert
i = 0
For Each c In Range(Range("A1"), Range("A65536").End
(xlUp)).Offset(0, 1)
c.Value = i
i = i + 1
Next c
i = 1
Range("A1").CurrentRegion.Sort Range("A1"),
xlAscending, , , , , , xlNo
For Each c In Range(Range("A1"), Range("A65536").End
(xlUp)).Offset(0, 2)
c.Value = i
i = i + 1
Next c
Range("A1").CurrentRegion.Sort Range("B1"),
xlAscending, , , , , , xlNo
Range("B1").EntireColumn.Delete

' récupération de la deuxième plus petite valeur
rang = 2
Set plage = Range("B1:B5")
With Application.WorksheetFunction
Set Range9 = Cells(.Match(.Small(plage, rang),
plage, 0), 1)
End With
Range9.Select
End Sub
Si tu as besoin de plus de précision, n'hésite pas !
A+

V.

-----Message d'origine-----
Bonjour à tous,

Qq peut-il me donner le code VBA qui me permettrai de
réaliser la chose suivante:

Dans la colonne A j'ai 5 chiffres. J'aimerai que dans la
colonne B apparaisse le classement de ceux-ci.

exemple:

A B
17 5
7 1
14 4
9 2
13 3

J'aimerai également pouvoir récupérer les coordonnées de
chaque chiffre à savoir:

Le 1er chiffre (7) se trouve dans la cellule: Cells(3,1)
Le 2ème chiffre (9) se trouve dans la cellule: Cells(5,1)
Le 3ème chiffre(13) se trouve dans la cellule: Cells(6,1)
etc..

Est-ce possible?

Grand merci.

Stach ;-)
.



Avatar
Michel Gaboly
Bonjour,

Si VBA n'est pas une condition essentielle, on peut
s'en passer, en utilisant des fonctions d'Excel :

Avec les valeurs indiquées, 17, 7 , 14, 9 et 13 dans
les cellules A1 à A5 le classement en colonne B s'ob-
tient avec la fonction RANG() :

En B1 :

=RANG(A1;A$1:A$5;1)

à recopier vers le bas, en respectant l'emplacement
des "$" qui permettent d'avoir une référence mixte.

En D1 à D5 les chiffres 1 à 5

En E1 :

­RESSE(LIGNE(A$1:A$5) + EQUIV(PETITE.VALEUR(A$1:A$5;D1);A$1:A$5;0) - 1;COLONNE(A1:A5);4;1)

La formule doit bien sûr être sur une seule ligne.

En donnant un nom (Insertion, Noms, Définir...)
à la plage A1:A5, "Réf" par exemple, les formules
deviennent

=RANG(Réf;Réf;1)

et

­RESSE(LIGNE(Réf) + EQUIV(PETITE.VALEUR(Réf;D1);Réf;0) - 1;COLONNE(Réf);4;1)

PETITE.VALEUR(Réf;D1) renvoie la plus petite
(car D1 contient 1) valeur de la plage "Réf".
PETITE.VALEUR(Réf;D2) renvoie la seconde plus
(car D1 contient 2) petite valeur de la plage "Réf".
...

EQUIV(PETITE.VALEUR(Réf;D1);Réf;0) renvoie
le numéro d'ordre de la cellule dans laquelle
PETITE.VALEUR(Réf;D1), c'est-à-dire la + peti-
te valeur apparaît dans "Ref", en l'occurrence 2,
car 7 apparaît dans la seconde des 5 cellules.

LIGNE(Réf) renvoie le numéro de ligne de la cel-
lule située au coin supérieur gauche de "Réf",
soit 1.


LIGNE(Réf) + EQUIV(PETITE.VALEUR(Réf;D1);Réf;0) - 1

renvoie le numéro de ligne dans laquelle apparaît
la plus petite valeur de la plage.

La formule complète renvoie la référence corres-
pondante.

Je peux t'envoyer le fichier en Bal perso, si tu
veux.

Voilà.



Bonjour à tous,

Qq peut-il me donner le code VBA qui me permettrai de
réaliser la chose suivante:

Dans la colonne A j'ai 5 chiffres. J'aimerai que dans la
colonne B apparaisse le classement de ceux-ci.

exemple:

A B
17 5
7 1
14 4
9 2
13 3

J'aimerai également pouvoir récupérer les coordonnées de
chaque chiffre à savoir:

Le 1er chiffre (7) se trouve dans la cellule: Cells(3,1)
Le 2ème chiffre (9) se trouve dans la cellule: Cells(5,1)
Le 3ème chiffre(13) se trouve dans la cellule: Cells(6,1)
etc..

Est-ce possible?

Grand merci.

Stach ;-)


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
Hervé
Salut Stach,
En complément des réponses de Michel et Vincent, et pour la richesse de la
diversité :
Je ne sais pas comment tu veux récupérer les Cells ; "Le 1er chiffre (7) se
trouve dans la cellule: Cells(3,1)" donc à la fin de la proc, un message
affiche l'adresse de cellule des différentes valeurs :

Sub Ranger()
Dim Plage As Range
Dim Cel As Range
Dim Tbl
Dim Chaine As String
Dim I As Integer, J As Integer

Set Plage = Range([A1], [A65536].End(xlUp))
Tbl = Plage

J = Plage.Rows.Count

On Error Resume Next
Do
I = Application.WorksheetFunction.Max(Plage)
Set Cel = Plage.Find(I, , xlValues)
Cel.Offset(0, 1).Value = J
J = J - 1
Chaine = Chaine & I _
& " se trouve dans la cellule " _
& Cel.Address(0, 0) & vbCrLf
Cel.Value = ""
Loop While Not Cel Is Nothing

Plage = Tbl

MsgBox Chaine

Erase Tbl
Set Cel = Nothing
Set Plage = Nothing
End Sub

Hervé.

"Stach" a écrit dans le message news:
09e401c3b032$d14c7c90$
Bonjour à tous,

Qq peut-il me donner le code VBA qui me permettrai de
réaliser la chose suivante:

Dans la colonne A j'ai 5 chiffres. J'aimerai que dans la
colonne B apparaisse le classement de ceux-ci.

exemple:

A B
17 5
7 1
14 4
9 2
13 3

J'aimerai également pouvoir récupérer les coordonnées de
chaque chiffre à savoir:

Le 1er chiffre (7) se trouve dans la cellule: Cells(3,1)
Le 2ème chiffre (9) se trouve dans la cellule: Cells(5,1)
Le 3ème chiffre(13) se trouve dans la cellule: Cells(6,1)
etc..

Est-ce possible?

Grand merci.

Stach ;-)