Transformer tableau de produits de colonne en ligne

Bonjour à tous,

Je suis chargé de gérer un dispatch. Pour cela, j'ai reçu un fichier .csv dont j'ai converti les données (séparateur ";"). Jusque là tout va bien.

Mes données sont au format suivant (exemple court)

n° Nom et Prénom NomProduit1 NomProduit2 NomProduit3 Adresse etc.

1 DUS Bob QttéProduit1 QttéProduit2 QttéProduit3 36 avenue ...

Cependant, mon dispatcher me demande des données sous ce format là :

n°1 Nom1 Prénom1 Produit1 QttéProduit1 Adresse1

n°1 Nom1 Prénom1 Produit3 QttéProduit3 Adresse1

n°2 Nom2 Prénom2 Produit1 QttéProduit1 Adresse2

n°2 Nom2 Prénom2 Produit2 QttéProduit2 Adresse2

etc.

J'ai su il y a longtemps convertir cela en VBA, je n'ai actuellement plus les compétences. J'ai recherché sur le forum sans trop savoir quel mots-clés utiliser.

Si un fichier Excel d'exemple est nécessaire, je vous le mettrai à disposition. Si de plus amples informations sont nécessaires, je ferai au mieux.

Je vous remercie par avance de toutes aides apportées

(Mise à Jour) : Ajout d'un fichier d'exemple

Bonjour,

as-tu essayé avec l'enregistreur de macro de faire un copier/coller avec transposition?

ça donnerait quelque chose comme ça :

Sub Macro1()
'
' Macro1 Macro
'
    Rows("1:8").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil2").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True

End Sub

Merci Ednoork,

Le problème est que je n'ai plus touché à VBA depuis longtemps, donc j'avouerai que je ne comprends pas grand chose à ce que tu m'as donné comme macro, ni à son fonctionnement.

Si je comprends un peu ton code, celui-ci me donnera un résultat du type :

n°1 Nom1 Prénom1 Produit1 QttéProduit1 Adresse1

n°1 Nom1 Prénom1 Produit2 QttéProduit2 Adresse1

n°1 Nom1 Prénom1 Produit3 QttéProduit3 Adresse1

Le peu que je comprends pose un problème, car une des difficultés est que, suivant mon exemple, le client 1 a uniquement les produits 1 et 3 en certaines quantités, donc la ligne produit 2 n'existera pas et ne doit pas apparaître. Du coup, je devrais obtenir :

n°1 Nom1 Prénom1 Produit1 QttéProduit1 Adresse1

n°1 Nom1 Prénom1 Produit2 QttéProduit2 Adresse1 => ne doit pas apparaitre.

n°1 Nom1 Prénom1 Produit3 QttéProduit3 Adresse1

Avec une pièce jointe ça sera plus clair.

à te relire

17transposition.xlsm (16.62 Ko)

Merci de l'aide,

J'ai ajouté un fichier d'exemple avec ce que j'ai (dans le principe) et ce que je voudrais obtenir.

Merci d'avance.

Bonjour à tous,

A tester :

Option Explicit
Sub test()
Dim a, b, i As Long, j As Long, n As Long
    With Sheets("Actuel").Range("a1").CurrentRegion
        a = .Value
        ReDim b(1 To UBound(a, 1) * UBound(a, 2), 1 To 5)
        For i = 2 To UBound(a, 1)
            For j = 4 To UBound(a, 2)
                If a(i, j) <> 0 Then
                    n = n + 1
                    b(n, 1) = a(i, 1)
                    b(n, 2) = a(i, 2)
                    b(n, 3) = a(i, 3)
                    b(n, 4) = a(1, j)
                    b(n, 5) = a(i, j)
                End If
            Next
        Next
    End With
    'Restitution dans la 2ème feuille
    With Sheets(2).Cells(1).Resize(1, UBound(b, 2))
        .CurrentRegion.Clear
        .Value = [{"n°commande","Nom et Prénom","Adresse","Description produit","Quantité"}]
        .Offset(1).Resize(n, UBound(b, 2)).Value = b
        With .CurrentRegion
            With .Rows(1)
                .BorderAround Weight:=xlThin
                .Interior.ColorIndex = 44
            End With
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            .VerticalAlignment = xlCenter
            .Columns.AutoFit
        End With
    End With
End Sub

klin89

Merci ! Peux-tu juste expliciter les différentes variables ? Merci d'avance, j'ai l'impression de beaucoup plus avancer que par moi-même

Rechercher des sujets similaires à "transformer tableau produits colonne ligne"