plus grand nombre 0 dans une zone

Le
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 ?
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
anonymousA
Le #3353091
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+
anonymousA
Le #3353071
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+
Youky
Le #3353031
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" 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 ?


Youky
Le #3352941
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" 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" 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 ?






AV
Le #3351391
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
Débutante
Le #3489021
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
Débutante
Le #3489011
EUREKA

MEFC = Mise En Forme Conditionnelle, ce trouve dans Format
JB
Le #3461581
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
JB
Le #3461551
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
JB
Le #3460161
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
Publicité
Poster une réponse
Anonyme