Excel : Renvoyer une liste en fonction de valeurs identiques

Résolu
GTA5488 Messages postés 16 Statut Membre -  
GTA5488 Messages postés 16 Statut Membre -

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

1 réponse

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     

    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
    1. GTA5488 Messages postés 16 Statut Membre
       

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

      0
    2. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > GTA5488 Messages postés 16 Statut Membre
       

      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
    3. GTA5488 Messages postés 16 Statut Membre > cs_Le Pivert Messages postés 8437 Statut Contributeur
       

      Merci,

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

      0
    4. GTA5488 Messages postés 16 Statut Membre > cs_Le Pivert Messages postés 8437 Statut Contributeur
       

      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
    5. cs_Le Pivert Messages postés 8437 Statut Contributeur 730 > GTA5488 Messages postés 16 Statut Membre
       

      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