Trouver un max (colonne)

Bonjour,

Je cherche à trouver le maximum dans une colonne du type suivant, sachant que "<2,0" signifie que la mesure relevée est inférieure à un seuil défini, ici 2,0. La commande devrait dans ce cas me renvoyer "3,1", mais les "<2,0" n'étant pas considérés comme des nombres, je ne parviens pas à le gérer via la commande

max("A:A")

(en supposant qu'il s'agisse de la colonne A). Auriez-vous une solution à me proposer, sachant que la structure de la colonne ci-dessous ne peut en aucun cas être modifiée ?

Merci d'avance.

données

<2,0

Bonjour

Après un test

max

C'est pas cela que tu voulais ?

En effet, c'est bien cela que je voudrais !

En réalité, le problème est le suivant: dans le fichier que j'utilise, toutes les virgules sont en fait des points, ce qui justifie que ça ne fonctionne pas. J'ai rajouté le code suivant qui corrige problème:

With Workbooks(fic).Worksheets(feu)
.Columns("A:A").TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 1), DecimalSeparator:=".", ThousandsSeparator:=",", _
        TrailingMinusNumbers:=True
End With

Du moins, qui semble fonctionner ! Car la valeur que j'obtiens n'est pas celle attendue ! En effet, sur cette nouvelle liste (ci-dessous), et en rajoutant la ligne de code suivante, j'obtiens comme résultat 2,0 ... Pourquoi ?? A croire que ça arrondi à l'entier le plus proche..

Sheets(CStr(xxx)).Cells(yyy, rech.Column).Value = Val(Application.Max(Workbooks(fic).Sheets(feu).Range("A:A")))

<1.5

<1.5

<1.5

<1.5

<1.5

<1.5

<1.5

1.5

2.1

<1.5

1.9

<1.5

Bonjour

N'utilises pas Val

Sheets(CStr(xxx)).Cells(yyy, rech.Column).Value = Application.Max(Workbooks(fic).Sheets(feu).Range("A:A"))

1) Ca fonctionne !! Pourquoi ?

2) Reste un souci: la liste en question peut aussi très bien ne comporter que des <1.5 par exemple, sans valeur précise. Dans ce cas, il faudrait également que je puisse récupérer le max. Si ce ne sont que des <1.5, alors la "valeur" à retourner serait <1.5. Possible ?

J'oubliais: merci !

Bonjour

Ce que j'en sais

La séparation des nombres en interne ont le point comme séparateur décimal

La virgule dans la cellule n'est qu'une manière de voir les nombres (je pense que sur les versions US il doit y avoir le point)

Val n'aime que le point

Essayes Val("128,8") tu auras 128

Et Val("128.8") tu auras 128,8 (dans la cellule)

Pas une bonne explication mais la seule (elle ne vaut pas grand chose)

Pour en revenir si pas de valeur autre que "<1.5" essayes

Sheets(CStr(xxx)).Cells(yyy, rech.Column).Value = Application.Max(Workbooks(fic).Sheets(feu).Range("A:A") , 1.5 )

Merci pour ces précisions.

Cependant, pour revenir sur Val, j'ai rajouté le code

    With Workbooks(fic).Worksheets(feu)
    .Columns("A:A").TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
            :=Array(1, 1), DecimalSeparator:=".", ThousandsSeparator:=",", _
            TrailingMinusNumbers:=True
    End With

afin justement de pouvoir trouver le max ! Car sans ça, et en laissant Val sur l'instruction suivante, le max ne s'affiche pas.. On obtient 0. Dans ce cas, pourquoi alors ?

Pour le reste, j'essaie le code dès que possible, merci !

Bonjour

Banzai64 a écrit :

Pour en revenir si pas de valeur autre que "<1.5" essayes

Sheets(CStr(xxx)).Cells(yyy, rech.Column).Value = Application.Max(Workbooks(fic).Sheets(feu).Range("A:A") , 1.5 )

Je viens de tester en remplaçant Max par Min pour vérifier que ça fonctionne sur la liste suivante, ça ne semble pas fonctionner vu que ça me retourne 1,5 ! Une autre idée ?

<1.5

<1.5

Bonjour

Heuh le minimum de cette colonne ce n'est pas 1.5 ?

A suivre

Je pense que la formule est bonne mais pourquoi ne pas changer ton séparateur au niveau de Windows.

Lorsque les valeurs sont à gauche dans une cellule c'est du format texte et lorsque les valeurs sont à droite c'est du format nombre. Pour trouver la valeur Min ou Max il faut que ce soit du format nombre, aussi il faut savoir sous Windows si le séparateur est une virgule ou un point.

Dans le panneau de config, chercher les options régionales, pour personnaliser le format en enfin le symbole décimal. Si c'est un point tu devras mettre un moint pour avoir du format nombre, si c'est une virgule tu mettras une virgule.

Bon courage

Bonjour à tous,

Une solution avec deux fonctions personnalisées MAXBIS et MINBIS :

Function MAXBIS(plage As Range)
Dim tablo
Dim limite As Long, i As Long, cpt As Long

Application.Volatile
tablo = plage.Value
limite = plage.Rows.Count
ReDim Preserve tablo(1 To UBound(tablo), 1 To 2)
For i = 1 To limite
    tablo(i, 2) = Val(Replace(Replace(tablo(i, 1), "<", ""), ">", ""))
Next i
Maxi = tablo(1, 2)
cpt = 1
For i = 2 To limite
    If tablo(i, 2) > Maxi Then Maxi = tablo(i, 2): cpt = i
Next i
MAXBIS = tablo(cpt, 1)
End Function

Function MINBIS(plage As Range)
Dim tablo
Dim limite As Long, i As Long, cpt As Long

Application.Volatile
tablo = plage.Value
limite = plage.Rows.Count
ReDim Preserve tablo(1 To UBound(tablo), 1 To 2)
For i = 1 To limite
    tablo(i, 2) = Val(Replace(Replace(tablo(i, 1), "<", ""), ">", ""))
Next i
Mini = tablo(1, 2)
cpt = 1
For i = 2 To limite
    If tablo(i, 2) < Mini Or tablo(i, 2) = Mini And Left(tablo(i, 1), 1) = "<" Then Mini = tablo(i, 2): cpt = i
Next i
MINBIS = tablo(cpt, 1)
End Function
Banzai64 a écrit :

Bonjour

Heuh le minimum de cette colonne ce n'est pas 1.5 ?

A suivre

En fait j'attendais qu'on retourne "<1,5".

Merci pour ce code vba-new !

Par contre, à quel endroit dans le code vba insère-t-on une telle fonction ? Dans le module à la suite du reste ? Et on l'appelle en suivant ?

Re,

Tu n'as pas téléchargé le fichier joint. Jettes-y un coup d'oeil, j'ai mis des exemples.

En effet, j'ai mis le code dans un module.

J'ai téléchargé le fichier, et observé les fonctions, comment elles étaient construites, etc.. C'est exactement ce que je cherchais ! Par contre j'en ai une autre à proposer, qui semble également fonctionner, mais je ne sais pas si elle est "mieux" ou pas, mais elle me semble plus compliquée... Je la posterai demain si tu veux, je ne l'ai pas ici.

En tout cas merci, ça va m'être très utile ! Au final, je ne connaissais rien au VBA, et au fur et à mesure, je commence à cerner 2/3 points quand même..

Bonjour,

Je me permets de continuer ici sans ouvrir un nouveau topic car ma question suivante est très proche de la précédente: quel code mettre pour récupérer exactement ce qu'il y a dans une cellule ? Par exemple, s'il s'agit de <1,5 dans A1, pour le moment je récupère 0 en faisant

Sheets(CStr(xxx)).Cells(yyy, rech.Column).Value = Val(Workbooks(fic).Sheets(feu).Range("A1").Value

Comment obtenir <1.5 ?

Bonjour m@tix,

En enlevant le Val ??

Rechercher des sujets similaires à "trouver max colonne"