Transposer avec boucle

Oukapaka Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   -  
f894009 Messages postés 17277 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

Theo.R Messages postés 575 Date d'inscription   Statut Membre Dernière intervention   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
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 714
 
Bonjour,

Peut y avoir des lignes vides
entres chaque client ou n'importe ou ??
0
Theo.R Messages postés 575 Date d'inscription   Statut Membre Dernière intervention   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
Oukapaka Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   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
Theo.R Messages postés 575 Date d'inscription   Statut Membre Dernière intervention   31 > Oukapaka Messages postés 112 Date d'inscription   Statut Membre Dernière intervention  
 
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
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 714 > Oukapaka Messages postés 112 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

Dites simplement si les cellules vides font partie des infos clients manquantes?
0
Oukapaka Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   5
 
On rencontre le cas 1. Ce sont des lignes non renseignées simplement, et la boucle a toujours le même contact
0
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
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 714
 
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