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

Recherche la reference de la ligne correspondant a une combinaison

  • Initiateur de la discussion Initiateur de la discussion biker
  • Date de début Date de début

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 !

biker

XLDnaute Occasionnel
Bonjour;


Je ne sais pas si il existe une formule qui me permettrai de me donner la reference d'une ligne par rapport a une combinaison ( sachant qu'il me faut le dernier tirage)

Merci pour votre aide
 

Pièces jointes

Re : Recherche la reference de la ligne correspondant a une combinaison

Bonjour à tous

@ David84

Si c'est cela, il faut mettre MAX à la place de MIN dans mes formule :
Code:
MAX(SI(NBCAR(CONCALIGNE)-NBCAR(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(CONCALIGNE;";"&$X1&";";"");";"&$Y1&";";"");";"&$Z1&";";"");";"&$AA1&";";""))=NBCAR($X1&$Y1&$Z1&$AA1)+8;LIGNE(AG$1:AG$11)))

@ plus
 
Re : Recherche la reference de la ligne correspondant a une combinaison

Re
Si c'est cela, il faut mettre MAX à la place de MIN dans mes formule :
Je l'avais fait mais les résultats ne sont pas corrects chez moi :
- le résultat pour 11 14 30 68 via ta formule est ligne 10 alors que c'est la ligne 11
- le résultat pour 24 43 49 10 via ta formule est ligne 6 alors que c'est la ligne 10
- le résultat pour 24 44 49 66 via ta formule est ligne 0 alors que c'est la ligne 10,
- etc.
As-tu les mêmes résultats chez toi où est-ce chez moi que cela dysfonctionne ?
A+
 
Re : Recherche la reference de la ligne correspondant a une combinaison

Re Rachid
je crois que nos résultats concordent.

Si l'on veut ramener la 1ère ligne :
Code:
Function Tirage2(plage As Range, combinaison As Range) As Long
Dim i As Byte, j As Long, k As Integer, Tabl(), Comb(), Nb As Byte
Tabl = plage.Value
Comb = combinaison.Value
    For j = 1 To UBound(Tabl)
        For k = 1 To UBound(Tabl, 2)
            For i = 1 To UBound(Comb, 2)
                If Tabl(j, k) = Comb(1, i) Then Nb = Nb + 1
                If Nb = 4 Then Tirage2 = j: Exit Function
            Next i
        Next k
        Nb = 0
    Next j
End Function

Une fonction qui fait les 2 :
Code:
Function Tirage3(plage As Range, combinaison As Range, Optional sens As Boolean = True) As Long
Dim i As Byte, j As Long, k As Integer, Tabl(), Comb(), Nb As Byte
Tabl = plage.Value
Comb = combinaison.Value
If sens Then
    For j = UBound(Tabl) To 1 Step -1
        For k = 1 To UBound(Tabl, 2)
            For i = 1 To UBound(Comb, 2)
                If Tabl(j, k) = Comb(1, i) Then Nb = Nb + 1
                If Nb = 4 Then Tirage3 = j: Exit Function
            Next i
        Next k
        Nb = 0
    Next j
Else
    For j = 1 To UBound(Tabl)
        For k = 1 To UBound(Tabl, 2)
            For i = 1 To UBound(Comb, 2)
                If Tabl(j, k) = Comb(1, i) Then Nb = Nb + 1
                If Nb = 4 Then Tirage3 = j: Exit Function
            Next i
        Next k
        Nb = 0
    Next j
End If
End Function
Code:
Tirage3(Base;X1:AA1)
ou
Code:
=Tirage3(Base;X1:AA1;1)
ou
Code:
=Tirage3(Base;X1:AA1;VRAI)
ramène la dernière ligne correspondante,
Code:
=Tirage3(Base;X1:AA1;FAUX)
ou
Code:
=Tirage3(Base;X1:AA1;0)
ramène la 1ère ligne correspondante.
A+
 
Re : Recherche la reference de la ligne correspondant a une combinaison

Bonsoir

Merci pour votre remarque. Apparemment, vous avez raison, j'avais oublié des $ dans ma définition de CONCALIGNE. Par conséquent, mes plages utilisées dans ce nom, du style A1:A11 ou B1:B11 en première ligne, donnaient A2:A12, B2:B12... en seconde ligne, et ainsi de suite, d'où des résultats faux dès la seconde ligne.

On ne peut pas rajouter directement les $ nécessaires dans CONCALIGNE car cette définition est alors trop longue. Je suis donc passé par deux noms supplémentaires (dans RefLignsix) :
CONCALIGNE1 =
Code:
";"&A$1:A$11&";;"&B$1:B$11&";;"&C$1:C$11&";;"&D$1:D$11&";;"&E$1:E$11&";;"&F$1:F$11&";;"&G$1:G$11&";;"&H$1:H$11&";;"&I$1:I$11&";;"
CONCALIGNE2=
Code:
J$1:J$11&";;"&K$1:K$11&";;"&L$1:L$11&";;"&M$1:M$11&";;"&N$1:N$11&";;"&O$1:O$11&";;"&P$1:P$11&";;"&Q$1:Q$11&";;"&R$1:R$11&";;"&S$1:S$11&";"
et finalement
CONCALIGNE=CONCALIGNE1&CONCALIGNE2

Il faudrait même peut être mettre des $ devant les lettres A, B, C... et S si on désire pouvoir déplacer facilement la plage AH contenant les résultats. C'est fait dans le fichier RefLignsept.


Je corrige aussi dans le fichier avec MIN (post #14 , fichier RefLignquatre).

@ plus
 

Pièces jointes

Dernière édition:
Re : Recherche la reference de la ligne correspondant a une combinaison

Re Cisco

Pour info, la comparaison des formules avec Max et MIN donnent a priori le même résultat.
Par contre lorsque je colle ta formule dans une autre colonne, les résultats sont faussés.
Cela vient peut-être de tes formules nommées (peut-être manque-t-il des $ à certains endroits afin de fixer les plages).
A+
 
Re : Recherche la reference de la ligne correspondant a une combinaison

Bonsoir @ tous,
Oui David peut etre ca, car comme tu voies il a juste fige les lignes :

donc vers le bas pas de probleme je pense.
Amicalement
 
Re : Recherche la reference de la ligne correspondant a une combinaison

Rebonsoir

Il ni a pas de problème avec la version sept, les min sont différents des max (sauf si il ni a qu'une ligne contenant la combinaison (dans ce cas, MIN=MAX, normal, non !)), et on peut déplacer la plage de résultats à l'horizontale. Pour la déplacer à la verticale, il faut soit faire du copier-coller et modifier certains nombres dedans, soit faire avec couper-coller, soit insérer des cellules au dessus. Il ni a pas besoin d'aller modifier dans les définitions de CONCALIGNE1, CONCALIGNE2 et CONCALIGNE. Tout dépend ce qu'on veut faire avec ces formules, pas de déplacement, la version six suffit, des déplacements, il faut utiliser la version sept. Il faut bien que Bicker cherche un peu comment fonctionnent ces formules 🙂.

@ plus
 

Pièces jointes

Dernière édition:
Re : Recherche la reference de la ligne correspondant a une combinaison

Re

Ci-joint la dernière version améliorée de manière à confronter un nombre variable de données dans la combinaison à la plage de valeurs (2,3,4,5,...).
Pour choisir la ligne min ou max, voir les explications du message #19.
Code:
Function Tirage3(plage As Range, combinaison As Range, Optional sens As Boolean = True) As Long
Dim i As Byte, j As Long, k As Integer, Tabl(), Comb(), Nb As Byte
Tabl = plage.Value
Comb = combinaison.Value
If sens Then
    For j = UBound(Tabl) To 1 Step -1
        For k = 1 To UBound(Tabl, 2)
            For i = 1 To UBound(Comb, 2)
                If Tabl(j, k) = Comb(1, i) Then Nb = Nb + 1
                If Nb = UBound(Comb, 2) Then Tirage3 = j: Exit Function
            Next i
        Next k
        Nb = 0
    Next j
Else
    For j = 1 To UBound(Tabl)
        For k = 1 To UBound(Tabl, 2)
            For i = 1 To UBound(Comb, 2)
                If Tabl(j, k) = Comb(1, i) Then Nb = Nb + 1
                If Nb = UBound(Comb, 2) Then Tirage3 = j: Exit Function
            Next i
        Next k
        Nb = 0
    Next j
End If
End Function
A+

Edit : @Cisco : je regarde ton dernier fichier.
 
Dernière édition:
Re : Recherche la reference de la ligne correspondant a une combinaison

Re Cisco

Je crois que là c'est bon de ton côté.
Par contre, j'ai remarqué que lorsque la plage ne commence pas en ligne 1 ma proposition n'est plus bonne.
Pour y remédier, ci-joint ma dernière proposition modifiée :
Code:
Function Tirage3(plage As Range, combinaison As Range, Optional sens As Boolean = True) As Long
Dim i As Byte, j As Long, k As Integer, Tabl(), Comb(), Nb As Byte
Application.Volatile
Tabl = plage.Value
Comb = combinaison.Value
If sens Then
    For j = UBound(Tabl) To 1 Step -1
        For k = 1 To UBound(Tabl, 2)
            For i = 1 To UBound(Comb, 2)
                If Tabl(j, k) = Comb(1, i) Then Nb = Nb + 1
                If Nb = UBound(Comb, 2) Then Tirage3 = j + plage.Row - 1: Exit Function
            Next i
        Next k
        Nb = 0
    Next j
Else
    For j = 1 To UBound(Tabl)
        For k = 1 To UBound(Tabl, 2)
            For i = 1 To UBound(Comb, 2)
                If Tabl(j, k) = Comb(1, i) Then Nb = Nb + 1
                If Nb = UBound(Comb, 2) Then Tirage3 = j + plage.Row - 1: Exit Function
            Next i
        Next k
        Nb = 0
    Next j
End If
End Function
A+
 
- 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

Réponses
15
Affichages
525
Réponses
4
Affichages
226
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…