Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

fonction MAX sur serie lettre avec doublons

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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

Dernière édition:
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

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

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

A
Réponses
31
Affichages
4 K
Aurélie679
A
T
Réponses
21
Affichages
8 K
tkd2009
T
M
Réponses
0
Affichages
981
metamiga
M
P
Réponses
3
Affichages
2 K
pico31
P
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…