Recherche plus grande valeur VBA

Bonne opération LouReed !

Mais SOMMEPROD, tu lui passes une matrice en bloc...

bonjour,

une solution via une fonction personnalisée

Function maxstring(r, s)
' r plage de recherche
' s chaine de caractères parmi lesquelles rechercher le max
    m = -99999999
    For Each c In r
        v = Val(Replace(c, s, ""))
        If v > m Then m = v
    Next
    maxstring = s & m
End Function
14test-florian53.xlsm (14.14 Ko)

Bonjour,

Merci la solution fonctionne mais si une valeur purement numérique traîne dans la colonne sa plante.

Proposition de modification sans l'accord de h2so4 :

Function maxstring(r, s)
' r plage de recherche
' s chaine de caractères parmi lesquelles rechercher le max
    m = -99999999
    For Each c In r
        If Not IsNumeric(c) Then
            v = Val(Replace(c, s, ""))
            If v > m Then m = v
        End If
    Next
    maxstring = s & m
End Function

si ce n'est pas numérique alors c'est qu'il y a du texte, on y va !

Mais ceci est encore une ambuche du trjet !

@ bientôt

LouReeD

Bonsoir,

Il faut adapter !

Exemple :

="ABC DEF 0"&MAX(SI(GAUCHE(TEST2;7)="ABC DEF";CNUM(STXT(TEST2;10;2));""))&"."&(ANNEE(AUJOURDHUI())-1)

Même chose avec la macro de h2so4... (c'est à dire, il faut adapter pour prendre toutes les particularités en compte).

Nickel, merci à vous j'ai essayé les 2 solutions et ça fonctionne . il n'y a plus qu'à choisir entre les 2 .

Désolé de ne pas avoir été clair dés le début.

re-bonjour,

une proposition d'amélioration de la robustesse de la fonction.

Function maxstring(r, s)
' r plage de recherche
' s chaine de caractères parmi lesquelles rechercher le max
    m = -99999999
    For Each c In r
        If Len(c) >= Len(s) Then
            v = Val(Replace(c, s, ""))
            If v > m Then m = v
        End If
    Next
    If m > -99999999 Then
        maxstring = s & m
    Else
        maxstring = CVErr(xlErrNA)
    End If
End Function

Entre nous je choisirais...le version du Maréchal qui prend en compte l'absence d'espace entre les lettres et les chiffres !

@ bientôt

LouReeD

Edit : et si c'est un nombre de 12 chiffres ?

If Len(c) >= Len(s) Then

La solution de MFerrand est bien sauf que je trouve que la formule matricielle ralenti très fortement le fichier excel est ce possible de désactiver le "calcul automatique " de celle ci cette a dire qu'il ne calcul qu'une seule fois et pas constamment ?

Salut LouReed !

J'ai une inclination pour la fonction de h2so4... qui répond à ce que visais dans mon post ciblé par toi...

La forme Function permet son intégration dans un code plus large, et évite des formules qui pourraient alourdir...

Dans la mesure où l'on ignore l'aboutissement final il est difficile de rechercher meilleure adaptation...

Cordialement.

J'aurais une question concernant le code car je comprends pas certaines phases de la programmation:

A quoi correspond

m = -99999999

ce code ? que veut il dire ?

Merci

Bonsoir,

en l'absence d'acide sulfurique je me permet de répondre (enfin d'essayer) :

si je comprend bien, m est la variable mémoire où l'on stocke la plus grande valeur et pour être sur qu'au premier test m soit vraiment plus petit que V alors on le met à mois 99999999, du coup le test If v>m then m=v

fait que la valeur numérique V remplace m et à chaque boucle on refait le test entre le nouveau m (qui correspond à l'ancien v) et le nouveau v (qui correspond à sa nouvelle valeur suite au différent test de la boucle)

@ bientôt

LouReeD

Rechercher des sujets similaires à "recherche grande valeur vba"