Création liste selon critère

Bonjour à tous

Je viens vous solliciter pour la création d'une macro qui permettrait de créer une liste en fonction d'un critère.

Dans l'exemple joint, je cherche à obtenir le résultat indiqué en G1.

le critère correspond à l'équipe "A" et je souhaite avoir la liste des "Ouvreurs" séparer par " ; ".

En espérant avoir été la plus claire possible

Bien cordialement

Isabelle

12test.xlsx (8.28 Ko)

Bonjour Isabelle.

N'oublie pas que pour fonctionner ton fichier doit être compatible avec les macros.

Le code suivant fonctionne :

Option Explicit

Sub ouvreur()
Dim d As Object
Dim i&

With Sheets(1)
    Set d = CreateObject("scripting.dictionary")
    i = 1
    Do While .Cells(i, "B").Value <> ""
        If Not d.exists(.Cells(i, "B").Value) Then
            d(.Cells(i, "B").Value) = .Cells(i, "A").Value
            Else: d(.Cells(i, "B").Value) = d(.Cells(i, "B").Value) & "; " & .Cells(i, "A").Value
        End If
        i = i + 1
    Loop
    .[F1].CurrentRegion.ClearContents
    .[F1].Resize(d.Count).Value = Application.Transpose(d.keys)
    .[G1].Resize(d.Count).Value = Application.Transpose(d.items)
End With
End Sub

Bonjour et merci pour cette proposition.

C'est ce que je cherchais, néanmoins est-il possible d'éviter de réécrire les intitulés des colonnes ainsi que laisser les valeurs de la colonne "F" dans l'ordre déterminé au départ et non dans l'ordre de la colonne B ?

Isabelle

bonjour

avec une fonction perso

20isabelle.xlsm (13.73 Ko)

cordialement

Les intitulés des colonnes ne sont pas écris dans le fichier donné.

A toi de modifier le code si le fichier est réalisé différemment.

Il faut modifier le i = 1 par le numéro de ligne que tu souhaites à la base.

Je ne comprends pas ce que tu souhaites quand tu dis :

laisser les valeurs de la colonne "F" dans l'ordre déterminé au départ et non dans l'ordre de la colonne B ?

Bonjour,

Salut Benoit !

Une solution sous forme de fonction personnalisée :

Function LISTERSI(Plg As Range, Crit As String)
    Dim Lst(), i%, j%
    Application.Volatile
    If Plg.Columns.Count <> 2 Then listesi = CVErr(xlErrName): Exit Function
    With Plg
        ReDim Lst(.Rows.Count)
        For i = 1 To .Rows.Count
            If .Cells(i, 2) = Crit Then
                Lst(j) = .Cells(i, 1): j = j + 1
            End If
        Next i
    End With
    ReDim Preserve Lst(IIf(j > 0, j - 1, 0))
    Select Case j - 1
        Case 0: LISTERSI = Lst(0)
        Case Else: LISTERSI = Join(Lst, " ; ")
    End Select
End Function

S'utilise comme une fonction Excel : voir fichier.

Cordialement.

edit : et Salut à Tulipe ! Tu te lances !!! Bravo !

NB- je viens de voir une faute de frappe : listesi au lieu de LISTERSI à la 3e ligne. Rectifié dans le fichier que j'ai remis.

Cette ligne est destinée à afficher une erreur #NOM! si la plage mise en argument ne comporte pas 2 colonnes..

Re,

J'ai 2 contraintes, je ne veux pas utiliser de formules pour des raisons complexes

et les cellules F1 et F2 ne doivent pas être modifiés.

Mais dans l'ensemble c'est ce que je voulais

Isabelle

Rechercher des sujets similaires à "creation liste critere"