Mise en forme de données vers un tableau

0

Bonjour à tous,
Je recherche de l'aide sur excel concernant un export de données à retraiter.

Je souhaite transformer l'onglet Data (données brut de l'export) en format tel que l'onglet "Mise en page" visible dans le fichier excel joint à mon message.

Je suppose qu'il y a une manière simple et rapide pour tranformer ces fiches clients (fictif) vers la mise en page désirée. Une macro ? une fonction excel ?

Voici le lien cjoint.com ou vous trouverez le fichier à modifier : https://www.cjoint.com/c/MJlnQ1Ks3zT


Votre aide est vraiment la bienvenue, n'hésitez pas si vous avez besoin de plus d'information.

Je vous remercie grandement d'avance pour l'aide apportée.

Anthony

Posté le 11 octobre 2023, 15:44
par Maikales
Répondre
0

Bonjour Anthony,

ton fichier en retour : https://www.cjoint.com/c/MJlsMKuppD0

la feuille active est "Mise en page" ; fais Ctrl e ➯ travail effectué.  :)

à toi de vérifier tous les résultats.  ;)

tu aurais pu faire Ctrl e à partir de la feuille "Data" ; les résultats
auraient été identiques.

dans les 2 cas : c'est inutile d'effacer les anciens résultats car
c'est fait automatiquement par la macro.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

code VBA de Module1 (32 lignes) :

Option Explicit

Sub CpyData()
  Const na As String * 5 = "<N/A>"
  Dim sh As Worksheet, s$, m&, r&, d&, i&, j&, k&
  Set sh = Worksheets("Mise en page"): m = Rows.Count: r = 2
  d = sh.Cells(m, 1).End(3).Row: Application.ScreenUpdating = 0
  If d > 1 Then sh.Range("A2:V" & d) = Empty
  Worksheets("Data").Select
  d = Cells(m, 7).End(3).Row: If d = 1 And IsEmpty([G1]) Then Exit Sub
  Do: i = i + 1: Loop Until Cells(i, 7) <> ""
  Do
    With sh.Cells(r, 1)
      .Value = Cells(i, 2)                                          'NumeroClient
      .Offset(, 1) = Cells(i, 7)                                    'Intitule
      .Offset(, 2) = Cells(i + 1, 2)                                'Raccourci
      j = i + 2: .Offset(, 3) = Cells(j, 2)                         'Adresse1
      For k = 1 To 3
        s = Cells(j + k, 2): .Offset(, 3 + k) = IIf(s = "", na, s)  'Adresse2 à Complément
      Next k
      s = Cells(i + 4, 5): .Offset(, 7) = IIf(s = "", na, s)        'Ville
      j = i + 5: .Offset(, 15).Resize(, 3).NumberFormat = "@"
      For k = 1 To 14
        s = Cells(j + k, 3): .Offset(, 7 + k) = IIf(s = "", na, s)  'Country à Sales Person
      Next k
      If i = d Then Exit Do
    End With
    i = Cells(i, 7).End(4).Row: r = r + 1
  Loop
  sh.Select
End Sub

rhodo

rhodo Posté le 11 octobre 2023, 20:50
par rhodo
0

crossposting ICI.

rhodo Posté le 11 octobre 2023, 22:49
par rhodo
0

@Maikales (Anthony)

la solution de mromain est une solution avec PowerQuery, qui utilise 2 fichiers
"Data.xlsx" et "Traitement.xlsx" ; ma solution est sans PowerQuery, avec ton
seul fichier de départ "Fichier à travailler".

si tu regardes ma solution, tu verras peut-être que j'ai fait aussi quelque chose
de spécial pour ces 3 données : "Telephone" ; "Mobile" ; "Fax" (sur la feuille
de résultats "Mise en page")
.

remarque : je n'ai rien modifié sur la feuille "Data".

rhodo

rhodo Posté le 12 octobre 2023, 01:58
par rhodo
0

je pense que Maikales ne reviendra plus sur ce sujet :
il a eu une autre solution sur Excel Downloads.  ;)

voir ce lien ; ma solution marche bien aussi.  :)

rhodo Posté le 12 octobre 2023, 18:42
par rhodo
0

voilà pourquoi la plupart des contributeurs n'aiment pas le crossposting :
quand un demandeur a trouvé une solution sur un site, il ne revient plus
sur ses mêmes sujets postés sur d'autres sites ; ni pour prévenir qu'il a
eu une solution ailleurs, ni pour essayer une autre solution proposée et
donner son avis dessus ➯ on a travaillé pour rien !  :(

rhodo Posté le 13 octobre 2023, 22:10
par rhodo

Si vous n'êtes pas inscrit sur le site, vous pouvez poster librement (en tant qu'invité).
Pour cela, indiquez un pseudonyme (nom d'utilisateur) et une adresse email :