Microsoft 365 La plus grande valeur alphanumérique

Marec

XLDnaute Junior
Bonjour à tous,

Es ce que les valeurs alphanumériques parlent à quelqu’un ??
Si la solution existe et je pense quelqu’un l’a, je serais intéressé !!!

je voudrais récupérer la plus grande valeur parmi Ex: d002,d003,d004 ....Et la faire apparaître dans une cellule d’une seconde feuille du classeur
Au cas où quelqu’un sait faire !!!
D’avance merci
 

job75

XLDnaute Barbatruc
Bonsoir Marec,

Voyez le fichier joint et cette fonction VBA qui utilise la macro bien connue Quick sort :
VB:
Function MaxAlpha(r As Range) As String
Dim a$(), n&
For Each r In r
    If CStr(r) <> "" Then
        ReDim Preserve a(n)
        a(n) = CStr(r)
        n = n + 1
    End If
Next
If n = 0 Then Exit Function
Call tri(a, 0, n - 1)
MaxAlpha = a(0)
End Function

Sub tri(a, gauc, droi) ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) > ref: g = g + 1: Loop
    Do While ref > a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
Le code doit être placé impérativement dans un module standard.

A+
 

Pièces jointes

  • MaxAlpha(1).xlsm
    17 KB · Affichages: 12

Marec

XLDnaute Junior
Bonsoir Marec,

Voyez le fichier joint et cette fonction VBA qui utilise la macro bien connue Quick sort :
VB:
Function MaxAlpha(r As Range) As String
Dim a$(), n&
For Each r In r
    If CStr(r) <> "" Then
        ReDim Preserve a(n)
        a(n) = CStr(r)
        n = n + 1
    End If
Next
If n = 0 Then Exit Function
Call tri(a, 0, n - 1)
MaxAlpha = a(0)
End Function

Sub tri(a, gauc, droi) ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) > ref: g = g + 1: Loop
    Do While ref > a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
Le code doit être placé impérativement dans un module standard.

A+
Bonsoir et merci pour cette réponse rapide.
Je vais tenter d’y comprendre quelque chose.
Mais si cette fonction est bien connue.... heuuuu Pour moi c’est disons ... inconnue lol
Si je me perd dans ce code, je reviendrai vers vous..
Merci pour votre aide en tout cas
 

jmfmarques

XLDnaute Accro
Bonjour
Comment déterminer la plus grande valeur de chaque type dans cette même colonne ??
Peux-tu s'il te plait t'efforcer d'être très précis tant en ce qui concerne la logique exacte de l'extraction que tu envisages , que le mode d'affichage (où et sous quelle forme) de ces "plus grandes valeurs" ?
(histoire d'éviter des réponses inadaptées et donc des pertes de temps)

EDIT : et précise dans la foulée si (comme dans tes exemples) une seule lettre précède la partie "numérique". Et si tel n'est pas le cas, si existe un format unique (toujours la même longueur de "texte" précédant toujours la même longueur de "numérique".
Je regrette personnellement d'avoir eu à te poser ces questions.
 
Dernière édition:

Marec

XLDnaute Junior
Bien le bonjour,
Désolé pour le manque de précision .
Ça répond à mon problème, et j’ai déjà essayé cette formule matricielle.
Mais j’essaie de faire apparaître la valeur Max de chaque g et d dans une autre feuille .
Et dans 2cellules séparées.
Et là...je plante..
Sinon les valeurs sont uniquement g et d suivis de trois numériques..
Merci à toi pour tes réponses et l’intérêt porté au problème
 

Marec

XLDnaute Junior
C’est ce que je cherche à faire
Je verrai pour adapter au mieux à mes besoins spécifiques.
Sans vouloir abuser, est il possible d’afficher la valeur,non pas max ,mais +1 avec cette formule ??
En tout cas grand merci
 

job75

XLDnaute Barbatruc
Bonjour Marec, jmfmarques, JHA, le forum,

Voyez ce fichier (2) et la nouvelle fonction VBA :
VB:
Function MaxAlpha(r As Range)
Dim a$(), n&, b$(), i&, x$, y$, j%
For Each r In r
    If CStr(r) <> "" Then
        ReDim Preserve a(n)
        a(n) = CStr(r)
        n = n + 1
    End If
Next r
If n = 0 Then Exit Function
Call tri(a, 0, n - 1)
ReDim b(0)
b(0) = a(0)
n = 0
For i = 1 To UBound(a)
    x = a(i - 1) & 0
    y = a(i)
    For j = 1 To Len(x)
        If IsNumeric(Mid(x, j, 1)) Then
            If Left(y, j - 1) < Left(x, j - 1) Then
                n = n + 1
                ReDim Preserve b(n)
                b(n) = y
            End If
            Exit For
        End If
Next j, i
MaxAlpha = b 'vecteur ligne
End Function
Formule en C2 à tirer vers le bas :
Code:
=SI(LIGNE(A1)>NBVAL(MaxAlpha(A$2:A$13));"";INDEX(MaxAlpha(A$2:A$13);LIGNE(A1)))
Bonne journée.
 

Pièces jointes

  • MaxAlpha(2).xlsm
    18.6 KB · Affichages: 3
Dernière édition:

JHA

XLDnaute Barbatruc
Bonjour à tous,

A essayer avec "+1"
VB:
=$B1&TEXTE(MAX(SI(GAUCHE(Feuil1!$A$2:$A$11;1)=$B1;STXT(Feuil1!$A$2:$A$11;2;99)*1)+1);"000")

JHA
 

Pièces jointes

  • Classeur max alphanumerique rev 2.xlsx
    10.3 KB · Affichages: 8

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Marec, @job75 ;), @jmfmarques ;), @JHA ;),

Pour le FUN, une version sans VBA qui donne le MAX pour chaque préfixe différent. Les préfixes ne sont pas forcément de tailles identiques. On ne tient pas compte de la casse du préfixe. L'ordre des données n'a pas d'importance.

Une solution sans macro, avec un tableau structuré à 4 colonnes
  1. colonne avec le texte (données sources) nommée "texte"
  2. colonne donnant le rang de la dernière lettre dans le texte (formule matricielle) nommée "FIN Préfixe"
  3. colonne du préfixe (formule normale) nommée "Préfixe"
  4. colonne du suffixe i.e. nombre en queue du texte (formule normale) nommée "Suffixe"
Ensuite un simple TCD sur les colonnes "Préfixe" et "Suffixe" pour donner le max, le min et le nombre d'élément par préfixe.
(n'oubliez pas de mettre à jour le TCD quand vos données changent - on peut l'automatiser)

La formule matricielle donnant le rang de la dernière lettre :
=GRANDE.VALEUR( (STXT([@texte];LIGNE(INDIRECT("1:" & NBCAR([@texte])));1)<"0") + (STXT(A2;LIGNE(INDIRECT("1:" & NBCAR([@texte])));1)>"9") * LIGNE(INDIRECT("1:" & NBCAR([@texte])));1)

La formule normale donnant le préfixe :
=GAUCHE([@texte];[@[FIN Préfixe]])

La formule normale donnant le suffixe :
=CNUM(STXT([@texte];[@[FIN Préfixe]]+1;999))

edit : la version v2 qui donne diectement le max+1.

1591518339186.png
 

Pièces jointes

  • Marec- MaxAlpha- v1.xlsx
    20.9 KB · Affichages: 6
  • Marec- MaxAlpha- v2.xlsx
    20.9 KB · Affichages: 2
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour a tous
Mais j’essaie de faire apparaître la valeur Max de chaque g et d dans une autre feuille .
perso puisqu'il s'agit de préfixes bien détermines
je ne vois pas l’intérêt en vba de sortir l'artillerie du kick sort
VB:
Sub test()
    Dim mesGD
    mesGD = Array("d34", "g12", "d03", "g05", "d45", "g44", "d87", "g23", "d22", "g33", "d28", "g07", "d46")
    MsgBox MonMaxPour(mesGD, "g")
    MsgBox MonMaxPour(mesGD, "d")
End Sub

Function MonMaxPour(arr, prefixe$)
    Dim X&
    For i = LBound(arr) To UBound(arr): X = Application.Max(X, Val(Replace(arr(i), prefixe, ""))): Next
    MonMaxPour = prefixe & X
End Function
 

Discussions similaires

Statistiques des forums

Discussions
312 758
Messages
2 091 783
Membres
105 073
dernier inscrit
liMiteddddd