Extraire nombre plus élevé d'une chaine

Bonjour,

J'essai de récupérer le nombre le plus élevé d'une chaîne dans une cellule.

cas 1, cas 7, cas 3, cas 2, cas 5, cas 6

J'aimerais que ça me retourne 7.

Je ne peux pas ajouter des colonnes donc une formule ou une fonction VBA serait l'idéal.

Merci

Bonjour,

Une proposition de fonction personnalisée :

Public Function MaxChaine(Cellule As Range)

Dim aa() As String, bb() As String, i As Integer, Max As Integer

If Cellule.Count > 1 Then
    MaxChaine = "#PLAGE"
Else
    aa = Split(Cellule, ",")
    For i = LBound(aa) To UBound(aa)
        bb = Split(aa(i), " ")
        If CInt(bb(UBound(bb))) > Max Then Max = CInt(bb(UBound(bb)))
    Next i
    MaxChaine = Max
End If

End Function

MErci pour la réponse rapide.

j'ai une erreur quand je l'applique.

Peut-être que je l'applique pas correctement !

maxchaine

Bonjour le forum,

hknpg2qcbii remplacer

Ensuite rechercher la virgule et remplacer par rien

Ensuite recherche l'espace et remplacer par rien

Résultat obtenu en A1(voir image jointe)

B1 : =STXT($A$1;COLONNE()-1;1)*1

A tirer vers la droite.

chffre le plus eleve

MErci pour la réponse rapide.

j'ai une erreur quand je l'applique.

Peut-être que je l'applique pas correctement !

maxchaine.png

Où as-tu ajouté le code ? Chez moi ça fonctionne normalement avec le code placé dans un module standard...

Re,

Bien sûr, les 3 "rechercher - Remplacer" successifs peuvent être réalisés en 1 seule opération :

rechercher et remplacer

J'ai ajouté dans un module standard également.

Est-ce qu'il faut que je modifie quelque chose dans le VBA, car je l'ai laissé tel quel?

ex: MaxChaine = "#PLAGE"

aussi je ne l'applique pas à une plage, mais bien à une cellule.

ça change quelque chose ?

MErci

Bonjour,

par formule, pour s'amuser, à condition que les cas ne dépassent pas 9 :

=MAX(SI((STXT(A2;LIGNE(INDIRECT("$1:$"&NBCAR(A2)));1)>="0")*(STXT(A2;LIGNE(INDIRECT("$1:$"&NBCAR(A2)));1)<="9");--STXT(A2;LIGNE(INDIRECT("$1:$"&NBCAR(A2)));1);0))

formule matricielle à valider avec Shift+Ctrl+Entrée

eric

J'ai ajouté dans un module standard également.

Est-ce qu'il faut que je modifie quelque chose dans le VBA, car je l'ai laissé tel quel?

ex: MaxChaine = "#PLAGE"

aussi je ne l'applique pas à une plage, mais bien à une cellule.

ça change quelque chose ?

MErci

Rien à changer, cette partie permet justement d'afficher le message "#PLAGE" dans le cas où tu appliques la formule à une plage et pas à une cellule unique. Du coup je ne vois pas vraiment d'où vient le problème, je peux t'envoyer la formule dans un fichier, car de mon côté ça fonctionne...

EDIT : je crois qu'un détail m'avais échappé, tu n'as pas systématiquement un espace avant le nombre, donc ça fait planter la formule. Je peux te proposer autre chose, mais le prérequis est que le texte soit toujours "cas".

Re,

cas jusqu'à 99 finalement :

=MAX(SI((STXT(A2;LIGNE(INDIRECT("$1:$"&NBCAR(A2)));1)>="0")*(STXT(A2;LIGNE(INDIRECT("$1:$"&NBCAR(A2)));1)<="9");--STXT(A2;LIGNE(INDIRECT("$1:$"&NBCAR(A2)));2);0))

toujours formule matricielle à valider avec Shift+Ctrl+Entrée

eric

Merci Eriic ça fonctionne très bien

Pedro, j'aimerais bien avoir ton fichier pour voir svp!

Merci à tous

Merci Eriic ça fonctionne très bien

Pedro, j'aimerais bien avoir ton fichier pour voir svp! Il y a toujours un espace avant le nombre. Mon exemple était pas bon!

Merci à tous

Mon fichier c'est juste un copier/coller de ton exemple dans ton premier message. J'ai mis ça dans une cellule puis en argument de ma formule. Et si y'a des espaces partout, PAF, ça fonctionne !

Rechercher des sujets similaires à "extraire nombre eleve chaine"