Transposer avec boucle

Oukapaka Messages postés 120 Statut Membre -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un petit code qu'on a tenté de développer avec mon responsable (on est pas informaticien du tout) et en fait on a une base client sur une seule colonne et pour uploader ça dans notre CRM on veut transformer ça en lignes par client.

En gros :

Nom client 1
Adresse 1
CP 1
Téléphone 1
Nom client 2
Adresse 2
CP 2
Téléphone 2

doit devenir

Nom client 1 / Adresse 1 / CP 1 / Téléphone 1
Nom client 2 / Adresse 2 / CP 2 / Téléphone 2

Mon code ressemble à ça mais je n'arrive pas à initier la boucle de base pour que ça calcule tout facilement

Sub test()
'
' test Macro
'

'
For i = 0 To 1000
Cells(2, i * 4 + 4).Select
WorksheetFunction.Transpose (i)
Next i = i + 4

End Sub

Je sais que c'est simpliste comme écriture, mais j'ai une seule fois réussi ce foutu comptage qui est horripilant je vous l'avoue et j'aurais bien besoin d'un coup de main :) (50XX lignes à la main, c'est pas possible haha)

PS : Peut y avoir des lignes vides, donc faudrait pas que le comptage soit décaler au fur et à mesure... Je sais je suis très embêtant ^^)

Merci à vous la compagnie !

Bonne soirée et en espérant vous lire rapidement

3 réponses

  1. Theo.R Messages postés 585 Statut Membre 31
     
    Code à essayer pour la colonne BDD en B, il remplace la BDD initiale donc veillez à essayer sur une copie ;) :

    Sub test()
    Dim DernLigne As Long
    DernLigne = Sheets(1).Range("B" & Rows.Count).End(xlUp).Row

    For i = 1 To DernLigne

    Cells(i, 3).Value = Cells(i + 1, 2).Value 'on met en C l'adresse
    Cells(i, 4).Value = Cells(i + 2, 2).Value 'on met en D le CP
    Cells(i, 5).Value = Cells(i + 3, 2).Value 'on met en E le tél

    Rows(i + 1 & ":" & i + 3).Select
    Selection.Delete Shift:=xlUp

    Next i
    End Sub
    0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Peut y avoir des lignes vides
    entres chaque client ou n'importe ou ??
    0
    1. Theo.R Messages postés 585 Statut Membre 31
       
      En effet ma solution ne marche pas avec des lignes vides.. mais un simple tri préalable de la BDD source reste rapide
      0
    2. Oukapaka Messages postés 120 Statut Membre 5
       
      Bonjour Messieurs,

      Alors le souci c'est que parfois il nous manque des données clients, et je ne connais ni la régularité ni quoi que ce soit. Je peux garantir la redondance du fichier sur les lignes, mais pas le fait que les lignes soient toutes remplies.

      Je me suis dit que je pouvais faire un remplacement des cellules vides rien que par un espace pour faire de faux caractères, mais après je ne sais pas si c'est valable.

      La deuxième solution à laquelle j'ai pensé c'est dans un premier temps de faire une sélection de toutes les lignes et de mettre un caractère dans chaque cellule vide, mais ça c'est complètement hors de nos compétences.

      Merci beaucoup !
      0
    3. Theo.R Messages postés 585 Statut Membre 31 > Oukapaka Messages postés 120 Statut Membre
       
      La question des cellules vides n'est pas exactement celle à laquelle vous répondez.

      Je m'explique :
      Cas n°1 : une ligne n'est pas renseignée à juste titre car l'information n'existe pas
      Imaginon que le client 2 n'a pas d'adresse renseignée, on aurait :
      Nom client 1
      Adresse 1
      CP 1
      Téléphone 1
      Nom client 2

      CP 2
      Téléphone 2

      Cas n°2 : une ligne vide est insérée sans raison entre 2 clients :
      Nom client 1
      Adresse 1
      CP 1
      Téléphone 1

      Nom client 2
      Adresse 2
      CP 2
      Téléphone 2


      => Le cas n°1 ne pose pas pb avec mon code ; le cas n°2 lui est problématique !

      Quel cas rencontrez-vous dans votre doc source ? (il se peut que ce soit les deux!)
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Oukapaka Messages postés 120 Statut Membre
       
      Bonjour,

      Dites simplement si les cellules vides font partie des infos clients manquantes?
      0
    5. Oukapaka Messages postés 120 Statut Membre 5
       
      On rencontre le cas 1. Ce sont des lignes non renseignées simplement, et la boucle a toujours le même contact
      0
  3. Maurice
     
    Bonjour
    si tes Nom client se trouve toutes les 4 Ligne
    Sub Macro1()
    Nlig = Range("B" & Rows.Count).End(xlUp).Row
    Vlig = 4
       For L = 2 To Nlig Step 4
           Range("B" & L & ":B" & L + 3).Copy
           ' Copy dans la colonne G
           Range("G" & Vlig).PasteSpecial xlPasteValues, , , True
          Vlig = Vlig + 1
       Next
    Application.CutCopyMode = False
    End Sub
    

    A+
    Maurice
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      un autre code, mais meme principe:

      Sub test()
          Dim derlig, PB, x
          
          Application.ScreenUpdating = False                               ' Fige ecran
          With Worksheets("feuil1")                                              ' Nom de feuille a adapter
              derlig = .Range("A" & Rows.Count).End(xlUp).Row     ' Derniere cellule non vide colonne A
              PB = 2                                                                        ' Pointeur de ligne pour colonne B
              For x = 2 To derlig Step 4                                           ' Boucle de ligne 2 a la fin par pas de 4
                  .Range("B" & PB).Resize(, 4) = Application.Transpose(.Range("A" & x).Resize(4))
                  PB = PB + 1                                                            ' Incremente pointeur
              Next x
          End With
          Application.ScreenUpdating = True                                  ' Defige ecran
      
      End Sub
      
      0