Microsoft 365 Liste de cellules avec condition

Ananke

XLDnaute Nouveau
Bonjour à tous,

Je cherche à générer des listes comme suit :

Résultat souhaité.png



A partir de ce tableau...


Tableau des valeurs.png



J'ai besoin que ces listes soient dynamiques (et ordonnées en faisant apparaître en priorité les résultats de chaque ligne) et je ne sais pas bien comment m'y prendre...

Si quelqu'un a une idée... Je joins mon fichier.

Merci et bonne journée :)
 

Pièces jointes

  • Pb Excel - Bataille navale.xlsm
    19.3 KB · Affichages: 13
Dernière édition:
Solution
Voici une nouvelle version, sans tableau intermédiaire (voir en bas de la feuille).
La fonction personnalisée est assez courte :
VB:
Public Function Gen_Liste(rngTab As Range, clé As Variant)
    Dim lig As Long, col As Long
    Dim i As Long                 'Indice dans le tableau result
    Dim result() As Variant
    ReDim result(1 To (rngTab.Rows.Count - 1) * (rngTab.Columns.Count - 1))
    For i = 1 To UBound(result): result(i) = "": Next i
    i = 0
    For lig = 2 To rngTab.Rows.Count
        For col = 2 To rngTab.Columns.Count
            If rngTab.Cells(lig, col).Value = clé Then
                i = i + 1
                result(i) = rngTab(1, col) & rngTab(lig, 1)
            End If
        Next col
    Next lig
    Gen_Liste =...

laurent3372

XLDnaute Impliqué
Supporter XLD
Bonjour,
J'ai créé une fonction personnalisée qui renvoie une matrice.
Il faut la rentrer comme fonction matricielle (validée par Ctrl+Maj+Entrée) dans une matrice verticale de 56 lignes (comme le nombre total de cellules du tableau analysé).
Cordialement,
--
LR
 

Pièces jointes

  • Pb Excel - Bataille navale (1).xlsm
    23.8 KB · Affichages: 6

laurent3372

XLDnaute Impliqué
Supporter XLD
Voici une nouvelle version, sans tableau intermédiaire (voir en bas de la feuille).
La fonction personnalisée est assez courte :
VB:
Public Function Gen_Liste(rngTab As Range, clé As Variant)
    Dim lig As Long, col As Long
    Dim i As Long                 'Indice dans le tableau result
    Dim result() As Variant
    ReDim result(1 To (rngTab.Rows.Count - 1) * (rngTab.Columns.Count - 1))
    For i = 1 To UBound(result): result(i) = "": Next i
    i = 0
    For lig = 2 To rngTab.Rows.Count
        For col = 2 To rngTab.Columns.Count
            If rngTab.Cells(lig, col).Value = clé Then
                i = i + 1
                result(i) = rngTab(1, col) & rngTab(lig, 1)
            End If
        Next col
    Next lig
    Gen_Liste = Application.Transpose(result)
End Function
 

Pièces jointes

  • Pb Excel - Bataille navale (2).xlsm
    25.5 KB · Affichages: 8

Ananke

XLDnaute Nouveau
Merci Laurent, tes 2 solutions fonctionnent parfaitement.

Je laisse la conversation ouverte le temps de finir de les adapter à mon tableau entier.

As-tu une idée de comment j'aurais pu m'y prendre sans VBA ?

Bonne journée,

Edit : Ca marche nickel tel quel, merci encore
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
313 046
Messages
2 094 759
Membres
106 081
dernier inscrit
CHRIS-5461