Excel : Renvoyer une liste en fonction de valeurs identiques

Résolu
GTA5488 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -  
GTA5488 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   -

Hello à toutes et tous, 

Voilà j'ai un tableau très basique avec 2 colonnes. 

Colonne A, les valeurs peuvent être identiques. 

Colonne B, les valeurs sont toutes différentes. 

J'aimerais ressortir un tableau avec une formule de ce genre : 

Lorsque les valeurs de la colonne A sont identiques, prendre toutes les valeurs de la colonne B (avec le même index que les valeurs identique de colonne A) et les afficher dans une cellule avec un " ; " entre chaque valeur. 

Exemple :

Colonne A    Colonne B

1                   Jean 

1                   Baptiste

2                   Wolfgang

1                   Poquelin

2                   Amadeus

2                   Mozart

J'aimerai ressortir dans un autre tableau  : 

Colonne A                Colonne B

Résultat pour 1          Jean ; Baptiste ; Poquelin

Résultat pour 2          Wolfgang ; Amadeus ; Mozart

Je ne sais pas si c'est très clair, en tout cas n'hésitez pas à me poser des questions ! :) 

Merci et à très vite ! 

GT

A voir également:

1 réponse

cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 

Bonjour,

une approche:

Option Explicit
Dim DerniereLigneUtilisee As Long
Sub test()
Dim nombre As Integer
Dim i As Integer
 nombre = Application.Max(Columns(1)) 'plus grand numéro
For i = 1 To nombre
DerniereLigneUtilisee = Cells(Rows.Count, 3).End(xlUp).Row + 1 '1ère ligne vide
Call boucle(i) 'on boucle sur tous les numéros
Range("C" & DerniereLigneUtilisee) = Left(Range("C" & DerniereLigneUtilisee), Len(Range("C" & DerniereLigneUtilisee)) - 1) 'supprime dernier caractère
Next i
End Sub
Sub boucle(ByVal num As String)
Dim FL1 As Worksheet, NoCol As Integer
Dim NoLig As Long, Var As Variant
    Set FL1 = Worksheets("Feuil1")'adapter nom de la feuille
    NoCol = 1 'lecture de la colonne A
    For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
        Var = FL1.Cells(NoLig, NoCol)
        If Var = num Then
        FL1.Cells(DerniereLigneUtilisee, NoCol + 2) = FL1.Cells(DerniereLigneUtilisee, NoCol + 2) & FL1.Cells(NoLig, NoCol + 1) & ";" 'colonne C
        End If
        Next
    Set FL1 = Nothing
End Sub

voilà


0
GTA5488 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 

Wouw ... Merci pour le retour, par contre je suis vraiment nul en VBA et là clairement je ne m'y retrouve pas ... :(

0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729 > GTA5488 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 

Se mettre sur la feuille concernée et faire Alt F11 pour accéder au module et y coller ce code;

Mettre le curseur sur test et faire F5

Voilà 

@+

0
GTA5488 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   > cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention  
 

Merci,

J'ai ce message d'erreur : "L'indice n'appartient pas à la sélection". 

0
GTA5488 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   > cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention  
 

Ce sera peut-être plus simple avec un fichier Excel d'exemple : https://wetransfer.com/downloads/c18e28055f315d39e96665d7c54b477720220902063543/248ce6

En gros j'ai la page "Datas" et je souhaiterais que l'onglet résultat se mette à jour en fonction de l'onglet Datas. Je ne sais pas si c'est très clair. 

0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729 > GTA5488 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 

une autre approche qui se déclenche au double clic dans la colonne A sur un numéro

a mettre dans le module de la feuille Datas Alt F11

Option Explicit
Dim DerniereLigneUtilisee As Long
Dim FL1 As Worksheet
Dim FL2 As Worksheet
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Set FL2 = Worksheets("Résultat") 'adapter nom de la feuille
DerniereLigneUtilisee = FL2.Cells(Rows.Count, 2).End(xlUp).Row + 1 '1ère ligne vide
Call boucle(Target.Value) 'on boucle sur le mëme numéro
FL2.Range("B" & DerniereLigneUtilisee) = Left(FL2.Range("B" & DerniereLigneUtilisee), Len(FL2.Range("B" & DerniereLigneUtilisee)) - 1) 'supprime dernier caractère
End Sub
Sub boucle(ByVal num As String)
Dim NoCol As Integer
Dim NoLig As Long, Var As Variant
    Set FL1 = Worksheets("Datas") 'adapter nom de la feuille
    Set FL2 = Worksheets("Résultat")
    NoCol = 1 'lecture de la colonne A
    For NoLig = 1 To Split(FL1.UsedRange.Address, "$")(4)
        Var = FL1.Cells(NoLig, NoCol)
        If Var = num Then
        FL2.Cells(DerniereLigneUtilisee, 2) = FL2.Cells(DerniereLigneUtilisee, 2) & FL1.Cells(NoLig, NoCol + 1) & ";" 'colonne B
        End If
        Next
    Set FL1 = Nothing
End Sub

Voilà

@+

1