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

Plus petite valeur supérieure à 0

15 réponses
Avatar
JièL
Salutatousse

des fois on a la tête dans le guidon et on ne vois plus la solution qui
est pourtant là !

Bref, il est tard et je cherche le mini de cellules éparpillées (qui
sont des sommmes) mais supérieur à 0

Genre =MIN.SUP.ZERO(a1;b5;d56;r45)
De préférence avec une formule pas une macro, sauf si c'est absolument
indispensable ;-) (je suis toujours un AMIS* ;-D)

J'ai pas trouvé chez misange bien que je sois quasiment sûr que ça existe.

Au fait c'est pour un Excel 2010

* Anti Macro Inutilement Superfétatoire

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/

5 réponses

1 2
Avatar
michdenis
Si tu as des valeurs décimales et pour permettre la mise
à jour à chaque modification de valeur dans une des
cellules de la plage...

'--------------------------------------
Function LeMax(Plg As String)
Application.Volatile
Dim T(), A As Long
With Application
For Each are In Range(Plg).Areas
If .CountA(are) > 0 Then
ReDim Preserve T(A)
T(A) = Val(.Substitute(.Small(are, .CountIf(are, 0) + 1), ",", "."))
A = A + 1
End If
Next
LeMax = .Min(T)
End With
End Function
'--------------------------------------

--
MichD
--------------------------------------------


"michdenis" a écrit dans le message de groupe de discussion : i43gnn$oki$
Pour une plage de cellules éparpillées, il y a ceci :

Dans la cellule, pour appeler la fonction personnalisée :

A ) si la plage éparpillée est regroupée sous un "NOM" (insertion / nom)
=LeMax("LeNom") 'entre guillemets
B ) Si on utilise l'adresse des plages de cellules :
=LeMax("f5:n5,f3,h2:i2") 'entre guillemets
Dans les 2 cas, un nom ne peut contenir plus de 255 caractères
et un objet "Range("Adresse") ne peut pas avoir plus de 255 caractères pour "Adresse"


Fonction personnalisée à mettre dans un module standard :
'-------------------------------------
Function LeMax(Plg As String)
Dim T(), A As Long
With Application
For Each are In Range(Plg).Areas
If .CountA(are) > 0 Then
ReDim Preserve T(A)
T(A) = .Small(are, .CountIf(are, 0) + 1)
A = A + 1
End If
Next
LeMax = .Min(T)
End With
End Function
'-------------------------------------

--
MichD
--------------------------------------------


"JièL" a écrit dans le message de groupe de discussion :
4c64abfb$0$32625$
Salutatousse

des fois on a la tête dans le guidon et on ne vois plus la solution qui
est pourtant là !

Bref, il est tard et je cherche le mini de cellules éparpillées (qui
sont des sommmes) mais supérieur à 0

Genre =MIN.SUP.ZERO(a1;b5;d56;r45)
De préférence avec une formule pas une macro, sauf si c'est absolument
indispensable ;-) (je suis toujours un AMIS* ;-D)

J'ai pas trouvé chez misange bien que je sois quasiment sûr que ça existe.

Au fait c'est pour un Excel 2010

* Anti Macro Inutilement Superfétatoire

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/
Avatar
michdenis
En voici une dernière...
La précédente s'occupait de trouver la plus petite valeur différente de 0.
La valeur pouvait être plus petite que zéro.

Celle-ci, la valeur doit être différente de 0 et aussi plus grande de 0

'-------------------------------------------
Function LeMax(Plg As String)
Application.Volatile
Dim T(), A As Long, X As Double
With Application
For Each are In Range(Plg).Areas
If .CountA(are) > 0 Then
If .CountIf(are, ">" & 0) > 0 Then
X = Val(.Substitute(.Small(are, .CountIf(are, "<=" & 0) + 1), ",", "."))
If X > 0 Then
ReDim Preserve T(A)
T(A) = X
A = A + 1
End If
End If
End If
Next
LeMax = .Min(T)
End With
End Function
'-------------------------------------------

--
MichD
--------------------------------------------


"michdenis" a écrit dans le message de groupe de discussion : i43jtf$2fa$
Si tu as des valeurs décimales et pour permettre la mise
à jour à chaque modification de valeur dans une des
cellules de la plage...

'--------------------------------------
Function LeMax(Plg As String)
Application.Volatile
Dim T(), A As Long
With Application
For Each are In Range(Plg).Areas
If .CountA(are) > 0 Then
ReDim Preserve T(A)
T(A) = Val(.Substitute(.Small(are, .CountIf(are, 0) + 1), ",", "."))
A = A + 1
End If
Next
LeMax = .Min(T)
End With
End Function
'--------------------------------------

--
MichD
--------------------------------------------


"michdenis" a écrit dans le message de groupe de discussion : i43gnn$oki$
Pour une plage de cellules éparpillées, il y a ceci :

Dans la cellule, pour appeler la fonction personnalisée :

A ) si la plage éparpillée est regroupée sous un "NOM" (insertion / nom)
=LeMax("LeNom") 'entre guillemets
B ) Si on utilise l'adresse des plages de cellules :
=LeMax("f5:n5,f3,h2:i2") 'entre guillemets
Dans les 2 cas, un nom ne peut contenir plus de 255 caractères
et un objet "Range("Adresse") ne peut pas avoir plus de 255 caractères pour "Adresse"


Fonction personnalisée à mettre dans un module standard :
'-------------------------------------
Function LeMax(Plg As String)
Dim T(), A As Long
With Application
For Each are In Range(Plg).Areas
If .CountA(are) > 0 Then
ReDim Preserve T(A)
T(A) = .Small(are, .CountIf(are, 0) + 1)
A = A + 1
End If
Next
LeMax = .Min(T)
End With
End Function
'-------------------------------------

--
MichD
--------------------------------------------


"JièL" a écrit dans le message de groupe de discussion :
4c64abfb$0$32625$
Salutatousse

des fois on a la tête dans le guidon et on ne vois plus la solution qui
est pourtant là !

Bref, il est tard et je cherche le mini de cellules éparpillées (qui
sont des sommmes) mais supérieur à 0

Genre =MIN.SUP.ZERO(a1;b5;d56;r45)
De préférence avec une formule pas une macro, sauf si c'est absolument
indispensable ;-) (je suis toujours un AMIS* ;-D)

J'ai pas trouvé chez misange bien que je sois quasiment sûr que ça existe.

Au fait c'est pour un Excel 2010

* Anti Macro Inutilement Superfétatoire

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/
Avatar
isabelle
salut JièL,

ouf, pas facile quand c'est discontinue,
seules les formules Somme, Moyenne, Nb, Nbval permettent de faire des calculs sur des plages discontinues ou multi-feuilles,
alors ça donne une formule à rallonge

=PETITE.VALEUR(($A$1;$C$3;$D$7;$F$9);SOMME(SI(A1<0;1;0);SI(C3<0;1;0);SI(D7<0;1;0);SI(F9<0;1;0))+1)

isabelle

Le 2010-08-13 07:39, JièL a écrit :
Le 13/08/2010 07:33, isabelle a écrit :
salut Matricule_DX32768



Hey, salut Isabelle de la Geolière ;-), t'as bonne mémoire.

si t'es pas trop allergique au matricielle,



Un peu quand même parce que pas encore en état au niveau des extrémités
et je suis pas un chirogourdiste en plus ;-)

=MIN(SI(A1:A10>0;A1:A10))



Marche très bien, mais... Tu/vous as/avez oublié un détail : "je cherche
le mini de cellules *éparpillées* "

J'ai essayé avec des parenthèses ou des accolades, mais rien à faire.
Bon, je sais, c'est un détails, je pourrais bien rassembler ces cellules
dans une autre partie du tableau ou peut-être utiliser un nom (pas sur
que ça fonctionne d'ailleurs) mais j'aime bien chipotter ;-)

bisou*



Bizoux aussi

isabelle
ps/ test xp uniquement



Si ça marche pour les anciennes versions ça marche pour la nouvelle,
c'était au cas où de nouvelles fonctions avaient fait leur apparitions

Avatar
michdenis
Pour les archives : Compilation


A ) si la plage éparpillée est regroupée sous un "NOM" (insertion / nom)
=LeMax("LeNom") 'entre guillemets
B ) Si on utilise l'adresse des plages de cellules :
=LeMax("f5:n5,f3,h2:i2") 'entre guillemets
Dans les 2 cas, un nom ne peut contenir plus de 255 caractères
et un objet "Range("Adresse") ne peut pas avoir plus de 255 caractères pour "Adresse"

Fonction personnalisée à mettre dans un module standard :


'Trouver la valeur minimale d'une plage éparpillée plus grande de 0
'---------------------------------------
Function LeMin(Plg As String)
Application.Volatile
Dim T(), A As Long
With Application
For Each ARE In Range(Plg).Areas
If .CountA(ARE) > 0 Then
If .CountIf(ARE, ">" & 0) > 0 Then
X = Val(.Substitute(.Small(ARE, .CountIf(ARE, "<=" & 0) + 1), ",", "."))
If X > 0 Then
ReDim Preserve T(A)
T(A) = X
A = A + 1
End If
End If
End If
Next
LeMin = .Min(T)
End With
End Function
'---------------------------------------

'Trouver la valeur minimale d'une plage éparpillée différente de 0
'La valeur peut être négative

Function LeMin1(Plg As String)
Application.Volatile
Dim T(), A As Long
With Application
For Each ARE In Range(Plg).Areas
If (.CountA(ARE) - .CountIf(ARE, "=" & 0)) > 0 Then
ReDim Preserve T(A)
T(A) = Val(.Substitute(.Small(ARE, .CountIf(ARE, 0) + 1), ",", "."))
A = A + 1
End If
Next
LeMin1 = .Min(T)
End With
End Function
'---------------------------------------


--
MichD
--------------------------------------------


"michdenis" a écrit dans le message de groupe de discussion : i43oan$g50$
En voici une dernière...
La précédente s'occupait de trouver la plus petite valeur différente de 0.
La valeur pouvait être plus petite que zéro.

Celle-ci, la valeur doit être différente de 0 et aussi plus grande de 0

'-------------------------------------------
Function LeMax(Plg As String)
Application.Volatile
Dim T(), A As Long, X As Double
With Application
For Each are In Range(Plg).Areas
If .CountA(are) > 0 Then
If .CountIf(are, ">" & 0) > 0 Then
X = Val(.Substitute(.Small(are, .CountIf(are, "<=" & 0) + 1), ",", "."))
If X > 0 Then
ReDim Preserve T(A)
T(A) = X
A = A + 1
End If
End If
End If
Next
LeMax = .Min(T)
End With
End Function
'-------------------------------------------

--
MichD
--------------------------------------------


"michdenis" a écrit dans le message de groupe de discussion : i43jtf$2fa$
Si tu as des valeurs décimales et pour permettre la mise
à jour à chaque modification de valeur dans une des
cellules de la plage...

'--------------------------------------
Function LeMax(Plg As String)
Application.Volatile
Dim T(), A As Long
With Application
For Each are In Range(Plg).Areas
If .CountA(are) > 0 Then
ReDim Preserve T(A)
T(A) = Val(.Substitute(.Small(are, .CountIf(are, 0) + 1), ",", "."))
A = A + 1
End If
Next
LeMax = .Min(T)
End With
End Function
'--------------------------------------

--
MichD
--------------------------------------------


"michdenis" a écrit dans le message de groupe de discussion : i43gnn$oki$
Pour une plage de cellules éparpillées, il y a ceci :

Dans la cellule, pour appeler la fonction personnalisée :

A ) si la plage éparpillée est regroupée sous un "NOM" (insertion / nom)
=LeMax("LeNom") 'entre guillemets
B ) Si on utilise l'adresse des plages de cellules :
=LeMax("f5:n5,f3,h2:i2") 'entre guillemets
Dans les 2 cas, un nom ne peut contenir plus de 255 caractères
et un objet "Range("Adresse") ne peut pas avoir plus de 255 caractères pour "Adresse"


Fonction personnalisée à mettre dans un module standard :
'-------------------------------------
Function LeMax(Plg As String)
Dim T(), A As Long
With Application
For Each are In Range(Plg).Areas
If .CountA(are) > 0 Then
ReDim Preserve T(A)
T(A) = .Small(are, .CountIf(are, 0) + 1)
A = A + 1
End If
Next
LeMax = .Min(T)
End With
End Function
'-------------------------------------

--
MichD
--------------------------------------------


"JièL" a écrit dans le message de groupe de discussion :
4c64abfb$0$32625$
Salutatousse

des fois on a la tête dans le guidon et on ne vois plus la solution qui
est pourtant là !

Bref, il est tard et je cherche le mini de cellules éparpillées (qui
sont des sommmes) mais supérieur à 0

Genre =MIN.SUP.ZERO(a1;b5;d56;r45)
De préférence avec une formule pas une macro, sauf si c'est absolument
indispensable ;-) (je suis toujours un AMIS* ;-D)

J'ai pas trouvé chez misange bien que je sois quasiment sûr que ça existe.

Au fait c'est pour un Excel 2010

* Anti Macro Inutilement Superfétatoire

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/
Avatar
JièL
Merci pour tout ça

--
JièL / Jean-Louis GOUBERT
La FAQ Outlook est là : http://faq-outlook.fr/

Le 13/08/2010 18:10, michdenis a écrit :
Pour les archives : Compilation


A ) si la plage éparpillée est regroupée sous un "NOM" (insertion / nom)
=LeMax("LeNom") 'entre guillemets
B ) Si on utilise l'adresse des plages de cellules :
=LeMax("f5:n5,f3,h2:i2") 'entre guillemets
Dans les 2 cas, un nom ne peut contenir plus de 255 caractères
et un objet "Range("Adresse") ne peut pas avoir plus de 255 caractères pour "Adresse"

Fonction personnalisée à mettre dans un module standard :


'Trouver la valeur minimale d'une plage éparpillée plus grande de 0
'---------------------------------------
Function LeMin(Plg As String)
Application.Volatile
Dim T(), A As Long
With Application
For Each ARE In Range(Plg).Areas
If .CountA(ARE)> 0 Then
If .CountIf(ARE, ">"& 0)> 0 Then
X = Val(.Substitute(.Small(ARE, .CountIf(ARE, "<="& 0) + 1), ",", "."))
If X> 0 Then
ReDim Preserve T(A)
T(A) = X
A = A + 1
End If
End If
End If
Next
LeMin = .Min(T)
End With
End Function
'---------------------------------------

'Trouver la valeur minimale d'une plage éparpillée différente de 0
'La valeur peut être négative

Function LeMin1(Plg As String)
Application.Volatile
Dim T(), A As Long
With Application
For Each ARE In Range(Plg).Areas
If (.CountA(ARE) - .CountIf(ARE, "="& 0))> 0 Then
ReDim Preserve T(A)
T(A) = Val(.Substitute(.Small(ARE, .CountIf(ARE, 0) + 1), ",", "."))
A = A + 1
End If
Next
LeMin1 = .Min(T)
End With
End Function
'---------------------------------------


1 2