Des suggestions pour transposer ces données?

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
P
PireNobel
Jeune membre
Jeune membre
Messages : 11
Inscrit le : 26 janvier 2016
Version d'Excel : 2013 FR

Message par PireNobel » 16 décembre 2016, 19:35

Bonjour,

Je me suis retrouvé devant ce problème un peu démuni. Je pensais que ça serait facile mais je ne trouve pas vraiment de solution.
Je suis ouvert à tout, formules ou VBA.

Il y a dans la première colonne des numéros clients.
Pour chaque numéro client il peut y avoir plusieurs adresses mails.
L'objectif c'est d'arriver à ce qu'il n'y ait plus qu'une seule ligne par numéro client, avec les adresses mails en colonnes les unes à côté des autres.

:D
Mails Lignes.xlsx
(56.98 Kio) Téléchargé 27 fois
Avatar du membre
Steelson
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'997
Appréciations reçues : 884
Inscrit le : 13 octobre 2014
Version d'Excel : 2013 FR
Téléchargements : Mes applications

Message par Steelson » 16 décembre 2016, 20:24

J'ai un peu décortiqué les formules pour être compréhensible !

Pour avoir la liste unique des clients, tu peux partir d'un TCD.
Mails Lignes.xlsx
(12.31 Kio) Téléchargé 17 fois

O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸ O.o°• ♪♪♫ °º¤ø,¸¸,ø¤º°`°º¤ø,¸
PI = 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280

( ͡• ͜ʖ ͡• )
Avatar du membre
curulis57
Passionné d'Excel
Passionné d'Excel
Messages : 3'747
Appréciations reçues : 226
Inscrit le : 4 janvier 2016
Version d'Excel : 2016 FR / 2019 FR

Message par curulis57 » 16 décembre 2016, 20:37

Bonsoir le forum, Pire Nobel, Steelson,

pour ne pas changer, une solution VBA ;;) et un petit bouton pour lancer la fête!

A+
Mails Lignes.xlsm
(22.45 Kio) Téléchargé 15 fois
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 4'019
Appréciations reçues : 306
Inscrit le : 26 janvier 2011
Version d'Excel : 2007/2019

Message par Theze » 16 décembre 2016, 20:53

Bonsoir,

Une piste de plus avec un dictionnaire :
Sub Dico()

    Dim Fe As Worksheet
    Dim Plage As Range
    Dim Cel As Range
    Dim Dico As Object
    Dim Cle
    Dim I As Integer
    
    Set Fe = Worksheets("Sheet1")
    Set Dico = CreateObject("Scripting.Dictionary")
    
    With Fe: Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    For Each Cel In Plage: Dico(Cel.Value) = Dico(Cel.Value) & ";" & Cel.Offset(, 1).Value: Next Cel
    
    I = 2
    
    For Each Cle In Dico.keys
        
        Range(Cells(I, 4), Cells(I, 4 + UBound(Split(Dico(Cle), ";")))).Value = Split(Dico(Cle), ";")
        Cells(I, 4).Value = Cle
        
        I = I + 1

    Next Cle

End Sub
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
P
PireNobel
Jeune membre
Jeune membre
Messages : 11
Inscrit le : 26 janvier 2016
Version d'Excel : 2013 FR

Message par PireNobel » 16 décembre 2016, 20:56

Steelson a écrit :J'ai un peu décortiqué les formules pour être compréhensible !

Pour avoir la liste unique des clients, tu peux partir d'un TCD.

Je m'étais dit qu'utiliser INDEX et EQUIV serait une bonne solution, mais tout ça ne me vient pas naturellement du tout... :(

Merci beaucoup en tous cas c'est génial!

curulis57 a écrit :Bonsoir le forum, Pire Nobel, Steelson,

pour ne pas changer, une solution VBA ;;) et un petit bouton pour lancer la fête!

A+

Et quelle fête! Je suis toujours étonné de la facilité avec lesquelles certaines personnes sortent un code comme ça sur le pouce.
Merci infiniment! :D
P
PireNobel
Jeune membre
Jeune membre
Messages : 11
Inscrit le : 26 janvier 2016
Version d'Excel : 2013 FR

Message par PireNobel » 16 décembre 2016, 22:00

Theze a écrit :Bonsoir,

Une piste de plus avec un dictionnaire :
Ca marche parfaitement. Merci beaucoup.
Je suis un peu dégoûté de faire un métier qui ne me donne ni le temps d'apprendre VBA comme je voudrais, ni suffisamment d'opportunités. C'est juste génial.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message