fonction MAX sur serie lettre avec doublons

rodge5895

XLDnaute Occasionnel
bonjour les amis !

Comment dans le fichier joint résoudre ces 2 questions ?
1/ Détecter la valeur max à partir d'un échantillon de lettres disponibles ? cf en jaune
2/ Dire si la série de lettres comporte ou non des répétitions ? cf en rouge

Merci pour vos lumières, sujet un peu compliqué !!
rodge
 

Pièces jointes

  • max sur lettres avec doublons !.xlsx
    9.6 KB · Affichages: 46

Dugenou

XLDnaute Barbatruc
Bonjour,
Pourquoi le max est-il à D en colonne I ?

Les échantillons sont-ils toujours affichés en ordre croissant
voir proposition en pj
Cordialement
 

Pièces jointes

  • rodge5895.xlsx
    10.1 KB · Affichages: 46
Dernière édition:

rodge5895

XLDnaute Occasionnel
Bonjour,
On a réussi à détecter la valeur max à partir d'un échantillon de lettres disponibles (en jaune ans le fichier d'origine) !
Mais comment incrémenter une lettre de plus ?
Par ex si la lettre max est AC, mettre AD dans une autre cellule pour info ?
rodge
 

job75

XLDnaute Barbatruc
Re,

Si l'on suppose donc que les lettres sont des en-têtes de colonnes on peut aller (à partir d'Excel 2007) jusqu'à XFD.

Et le plus simple est d'utiliser cette fonction VBA :
Code:
Function ColMax$(r As Range, Optional suivante As Boolean)
Dim maxi%
On Error Resume Next
For Each r In r
  With Columns(r.Value)
    If .Column > maxi Then maxi = .Column
  End With
Next
ColMax = "n/a" 'facultatif
ColMax = Split(Columns(maxi - suivante).Address(, 0), ":")(0)
End Function
A placer impérativement dans un module standard (Alt+F11 => Module1).

Edit : j'ai remplacé Range(r & 1) par Columns(r.Value)

Formules dans le fichier joint :

- en H3 =ColMax(H6:H21)

- en H5 =ColMax(H6:H21;VRAI)

- en H23 =SI(SOMMEPROD(N(NB.SI(H6:H21;H6:H21)>1));"Oui";"Non")

A+
 

Pièces jointes

  • max sur lettres avec doublons ! VBA(1).xlsm
    22.2 KB · Affichages: 18
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Bonjour à tous.

Une variante :
VB:
Function ColD$(colRef As Range, Optional Décalage%)
Dim C%, M%, A$, Ref As Range
    On Error Resume Next
    For Each Ref In colRef.Cells
        C = Columns(Ref.Value).Column: If M < C Then M = C
    Next Ref
    A = Columns(M - Décalage * (M > 0)).Address(, 0)
    ColD = Left$(A, Len(A) \ 2)
End Function
et quelques bricoles dans le classeur joint.

ℝOGER2327
#8474


Mercredi 11 Gueules 144 (Saint Baobab, célibataire - fête Suprême Quarte)
17 Pluviôse An CCXXV, 0,9608h - lichen
2017-W05-7T02:18:22Z
 

Pièces jointes

  • Colonnes.xlsm
    28.9 KB · Affichages: 26

job75

XLDnaute Barbatruc
Bonjour rodge5895, Roger, le forum,

Vous avez raison Roger, Columns(r.Value) est mieux que Range(r & 1), j'ai corrigé.

Pour ceux qui sont allergiques au VBA voyez le fichier joint avec les noms définis Numero et Lettre.

Ce sont des matrices de 16384 éléments et les calculs prennent évidemment beaucoup plus de temps.

Edit : chez moi sur Win 10 - Excel 2013 les 6 formules en lignes 3 et 5 se calculent :

- en 0,9 millième de seconde avec la solution VBA

- en 0,28 seconde avec la solution Formules.

@ Roger : Split(xxx, ":")(0) s'exécute en 2 millionièmes de seconde (12 µs pour les 6 formules), c'est négligeable.

Bonne journée.
 

Pièces jointes

  • max sur lettres avec doublons ! Formules(1).xlsx
    15.9 KB · Affichages: 27
Dernière édition:

Statistiques des forums

Discussions
312 201
Messages
2 086 166
Membres
103 149
dernier inscrit
Deepkneec