Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

plus grand nombre 0 dans une zone

10 réponses
Avatar
Débutante
Bonjour,

Petit casse-tête pour les féru de la programmation (j'ai essayé et je bugg)
et pourtant j'en ai besoin.

J'ai un tableau A1:V9 rempli de nombres négatifs et positifs non triés.
Pour unr valeur X j'aimerai savoir :
- quelle est la cellule contenant la valeur la plus grande < X dans le tableau
- quelle est la cellule contenant la valeur la plus petite > X dans le
tableau

J'ai voulu faire une fonction :
- qui ballaye l'ensemble du tableau,
- qui compare chaque contenu avec la valeur de X,
- qui mémorise cette valeur dans une variable PPNP (plus petit nombre
positif) si PPNP est vide ou si valeur < PPNP et valeur > X
- qui mémorise cette valeur dans une variable PGNN (plus grand nombre
négatif) si PGNN est vide ou si valeur > PGNN et valeur < X
elle est ou plus grand nombre négatif)

Pour l'instant c'est OK pour retourner PPNP ou PGNN avec X=0 et 'P' ou 'G'
en argument de la fonction dans une seule colonne ou une seule rangée.
Je ne sais comment faire pour :
- avoir la ligne et la colonne de la cellule qui contient la valeur de PPNP
ou PGNN,
- fonctionner sur plusieurs lignes et plusieurs colonnes,
- gérer plusieurs valeurs identiques dans le tableau correspondant à PPNP ou
PGNN,
- utiliser une autre valeur que X=0,
- utiliser des cellules ni contigue,

Fus-je assez claire ?
Qui voudra bien m'aider ?

10 réponses

Avatar
anonymousA
Bonjour,

sans macro, mais avec une MEFC pour repérer les cellules répondant
aux critères et ce même si X est <>0. J'ai supposé que ta plage de
cellules A1:V9 s'appelle plg , que la cellule dans laquelle tu portes
la valeur X s'appelle variable , que les cellules de la plage plg
contiennent toutes des chiffres et ne sont pas vides et enfin qu'aucun
de ces chiffres n'est supérieur à 10 puissance 100 ou inférieur à
-(10 puissance 100).

Tu portes p.e dans la MEFC de la cellule A1, les deux conditions
suivantes

Condition 1: format gras / bleu
=(A1-MIN(SI(((plg-variable)*1)>0;(plg-variable)*1;PUISSANCE(10;100))))= variable

Condition 2: format gras / rouge
=(A1-MAX(SI(((plg-variable)*1)<0;(plg-variable)*1;-PUISSANCE(10;100)))) =variable

puis tu copies ce format dans toutes les cellules de la plage plg. Dans
les conditions décrites précédemment, si tu tapes un nombre dans la
plage de cellules appelée variable, alors le nombre le plus proche
supérieur à X sera en gras bleu et le plus proche inférieur sera en
gras rouge. SI plusieurs nombres répondent à la même condition ( cas
de l'égalité de certains d'entre eux) alors, ils auront le même
format. Enfin, comme ta demande concernait les nombres strictemnt
supérieurs ou inférieurs, les nombres exactement égaux à X ne
seront pas mis en valeur.

A+
Avatar
anonymousA
Possible de simplifier un peu les formules

=(A1-MIN(SI((plg-variable)>0;(plg-variable);PUISSANCE(10;100))))=variable

=(A1-MAX(SI((plg-variable)<0;(plg-variable);-PUISSANCE(10;100))))=variable

A+
Avatar
Youky
J'aime me faire mal à la tête alors j'ai fait ceci , si j'ai bien compris
je copie les données en feuil2 pour les trier, à modifier si besoin feuil2
Youky

Private Sub CommandButton1_Click()
rep = Val(InputBox("Entrer la valeur de X"))
For Each c In Range("A1:V9")
If c.Value <> "" Then
n = n + 1
Feuil2.Cells(n, 1) = c.Value
End If
Next
Feuil2.Select
Feuil2.Columns("A:A").Select
Selection.Sort Key1:þuil2.Range("A1"), Order1:=xlAscending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
For c = 1 To n
If Feuil2.Cells(c, 1) = rep Then
ppv = Feuil2.Cells(c - 1, 1)
pgv = Feuil2.Cells(c + 1, 1)
End If
Next
Feuil1.Select
For Each c In Range("A1:V9")
If c.Value = ppv Then
c.Select
MsgBox "ppv:" & ppv & Chr(10) & _
"ligne " & Selection.Row & Chr(10) & _
"colonne " & Selection.Column
End If
If c.Value = pgv Then
c.Select
MsgBox "pgv:" & pgv & Chr(10) & _
"ligne " & Selection.Row & Chr(10) & _
"colonne " & Selection.Column
End If
Next
End Sub

"Débutante" a écrit dans le message de
news:
Bonjour,

Petit casse-tête pour les féru de la programmation (j'ai essayé et je
bugg)
et pourtant j'en ai besoin.

J'ai un tableau A1:V9 rempli de nombres négatifs et positifs non triés.
Pour unr valeur X j'aimerai savoir :
- quelle est la cellule contenant la valeur la plus grande < X dans le
tableau
- quelle est la cellule contenant la valeur la plus petite > X dans le
tableau

J'ai voulu faire une fonction :
- qui ballaye l'ensemble du tableau,
- qui compare chaque contenu avec la valeur de X,
- qui mémorise cette valeur dans une variable PPNP (plus petit nombre
positif) si PPNP est vide ou si valeur < PPNP et valeur > X
- qui mémorise cette valeur dans une variable PGNN (plus grand nombre
négatif) si PGNN est vide ou si valeur > PGNN et valeur < X
elle est ou plus grand nombre négatif)

Pour l'instant c'est OK pour retourner PPNP ou PGNN avec X=0 et 'P' ou 'G'
en argument de la fonction dans une seule colonne ou une seule rangée.
Je ne sais comment faire pour :
- avoir la ligne et la colonne de la cellule qui contient la valeur de
PPNP
ou PGNN,
- fonctionner sur plusieurs lignes et plusieurs colonnes,
- gérer plusieurs valeurs identiques dans le tableau correspondant à PPNP
ou
PGNN,
- utiliser une autre valeur que X=0,
- utiliser des cellules ni contigue,

Fus-je assez claire ?
Qui voudra bien m'aider ?


Avatar
Youky
Oups, j'ai oublié si le x n'est pas compris dans les cellules
ici c'est rectifié

Private Sub CommandButton1_Click()
rep = Val(InputBox("Entrer la valeur de X"))
For Each c In Range("A1:V9")
If c.Value <> "" Then
n = n + 1
Feuil2.Cells(n, 1) = c.Value
End If
Next
Feuil2.Select
Feuil2.Columns("A:A").Select
Selection.Sort Key1:þuil2.Range("A1"), Order1:=xlAscending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
For c = 1 To n
If Feuil2.Cells(c, 1) = rep Then
ppv = Feuil2.Cells(c - 1, 1)
pgv = Feuil2.Cells(c + 1, 1)
Exit For
End If
If Feuil2.Cells(c, 1) > rep Then
ppv = Feuil2.Cells(c - 1, 1)
pgv = Feuil2.Cells(c, 1)
Exit For
End If
Next
Feuil1.Select
For Each c In Range("A1:V9")
If c.Value = ppv Then
c.Select
MsgBox "ppv:" & ppv & Chr(10) & _
"ligne " & Selection.Row & Chr(10) & _
"colonne " & Selection.Column
End If
If c.Value = pgv Then
c.Select
MsgBox "pgv:" & pgv & Chr(10) & _
"ligne " & Selection.Row & Chr(10) & _
"colonne " & Selection.Column
End If
Next
End Sub
"Youky" a écrit dans le message de news:
43bbed93$0$20179$
J'aime me faire mal à la tête alors j'ai fait ceci , si j'ai bien compris
je copie les données en feuil2 pour les trier, à modifier si besoin feuil2
Youky

Private Sub CommandButton1_Click()
rep = Val(InputBox("Entrer la valeur de X"))
For Each c In Range("A1:V9")
If c.Value <> "" Then
n = n + 1
Feuil2.Cells(n, 1) = c.Value
End If
Next
Feuil2.Select
Feuil2.Columns("A:A").Select
Selection.Sort Key1:þuil2.Range("A1"), Order1:=xlAscending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom
For c = 1 To n
If Feuil2.Cells(c, 1) = rep Then
ppv = Feuil2.Cells(c - 1, 1)
pgv = Feuil2.Cells(c + 1, 1)
End If
Next
Feuil1.Select
For Each c In Range("A1:V9")
If c.Value = ppv Then
c.Select
MsgBox "ppv:" & ppv & Chr(10) & _
"ligne " & Selection.Row & Chr(10) & _
"colonne " & Selection.Column
End If
If c.Value = pgv Then
c.Select
MsgBox "pgv:" & pgv & Chr(10) & _
"ligne " & Selection.Row & Chr(10) & _
"colonne " & Selection.Column
End If
Next
End Sub

"Débutante" a écrit dans le message
de news:
Bonjour,

Petit casse-tête pour les féru de la programmation (j'ai essayé et je
bugg)
et pourtant j'en ai besoin.

J'ai un tableau A1:V9 rempli de nombres négatifs et positifs non triés.
Pour unr valeur X j'aimerai savoir :
- quelle est la cellule contenant la valeur la plus grande < X dans le
tableau
- quelle est la cellule contenant la valeur la plus petite > X dans le
tableau

J'ai voulu faire une fonction :
- qui ballaye l'ensemble du tableau,
- qui compare chaque contenu avec la valeur de X,
- qui mémorise cette valeur dans une variable PPNP (plus petit nombre
positif) si PPNP est vide ou si valeur < PPNP et valeur > X
- qui mémorise cette valeur dans une variable PGNN (plus grand nombre
négatif) si PGNN est vide ou si valeur > PGNN et valeur < X
elle est ou plus grand nombre négatif)

Pour l'instant c'est OK pour retourner PPNP ou PGNN avec X=0 et 'P' ou
'G'
en argument de la fonction dans une seule colonne ou une seule rangée.
Je ne sais comment faire pour :
- avoir la ligne et la colonne de la cellule qui contient la valeur de
PPNP
ou PGNN,
- fonctionner sur plusieurs lignes et plusieurs colonnes,
- gérer plusieurs valeurs identiques dans le tableau correspondant à PPNP
ou
PGNN,
- utiliser une autre valeur que X=0,
- utiliser des cellules ni contigue,

Fus-je assez claire ?
Qui voudra bien m'aider ?






Avatar
AV
Une soluce ....
Avec la plage nommée "zz" contenant les valeurs (vides possibles et non
considérés comme = 0)

Matricielles (validation par ctrl + maj +entrée)

1) Adresse de la valeur de "X" ou de la valeur la plus proche au-dessus, dans
la plage "zz"
­RESSE(MAX((zz=MIN(SI((zz>=X)*(zz<>"");zz)))*LIGNE(zz));MAX((zz=MIN(SI((zz>=X)*(zz<>"");zz)))*COLONNE(zz)))

2) Adresse de la valeur de "X" ou de la valeur la plus proche au-dessous, dans
la plage "zz"
­RESSE(MAX((zz=MAX(SI((zz<X)*(zz<>"");zz)))*LIGNE(zz));MAX((zz=MAX(SI((zz<X)*(zz<>"");zz)))*COLONNE(zz)))

Un exemple concret là :
http://cjoint.com/?bettUTOtX6

AV
Avatar
Débutante
Un grand MERCI à anonymousA, ainsi qu'à Youky et surtout à AV.

Je ne sais pas ce qu'est une MEFC (je vais faire une recherche).

J'avais donné la taille A1:V9 à titre d'exemple.
J'ai recopié le code de la fonction, pour l'étudier et l'adapter par la suite.

Avec l'exemple joint par AV, c'est super génial, j'ai pû comprendre "in-situ"

Encore une fois MERCI
Avatar
Débutante
EUREKA

MEFC = Mise En Forme Conditionnelle, ce trouve dans Format
Avatar
JB
Bonjour,

PJ http://cjoint.com/?bgjWPMvsvu

A B
1 1 1,5
2 4,9 2
3 -2 5,1
4 5,5 5,05
5 4 4,2
6 -55 7

Les formules pour le + proche de 'Valeur'

=MIN(SI(champ-valeur>0;champ)) valider avec Maj+Ctrl+Entrée
=MAX(SI(champ-valeur<0;champ)) valider avec Maj+Ctrl+Entrée

MEFC

-Sélectionner A1:B6
-Format/Mise en forme cond/La formule est
=MAX(SI(champ-valeur<0;champ))¡
=MIN(SI(champ-valeur>0;champ))¡

Cordialement JB
Avatar
JB
Bonjour

PJ http://cjoint.com/?bgj57zA0W0

A B
1 1 1,5
2 4,9 2
3 -2 5,1
4 5,5 5,05
5 4 4,2
6 -55 7

Formules pour le + proche de 'Valeur':

=MIN(SI(champ-valeur>0;champ))
Valider avec Maj+Ctrl+entrée

=MAX(SI(champ-valeur<0;champ))
Valider avec Maj+Ctrl+entrée


MEFC

-Sélectionner A1:B6
-Format/Mise en forme cond/La formule est
=MAX(SI(champ-valeur<0;champ))¡
=MIN(SI(champ-valeur>0;champ))¡

Cordialement JB
Avatar
JB
Bonjour,

http://cjoint.com/?bguHkBxJ5M

+ proche + : =MIN(SI(champ-valeur>0;champ)) Valider avec
Maj+Ctrl+entrée
+ proche - : =MAX(SI(champ-valeur<0;champ)) Valider avec
Maj+Ctrl+entrée

MEFC:
-Sélectionner A1:B6
-Format/Mise en forme cond/La formule est
=MAX(SI(champ-valeur<0;champ))¡
=MIN(SI(champ-valeur>0;champ))¡

Cordialement JB