Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Transpose

2 réponses
Avatar
pb
Bonjour,
J'ai une feuille de 1950 lignes sur laquelle un utilisateur à inclut des
données en Lignes ( Nb Produit, % et quantité) alors qu'elles devraient être
en Colonnes
J'ai tenté cette macro qui ne fonctionne pas

Sub Recup()
Range("D2:D1940").Select
For Each cell In Selection
If cell.Value = ("Total Réclamations") Then
Selection.Copy
ActiveCell.Offset(-1, -1).PasteSpecial Paste:=xlPasteAll,
Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Next
End If
End Sub

Je joins un classeur exemple
http://www.cijoint.fr/cjlink.php?file=cj200905/cij4hUELts.xls
Merci
Pascal

2 réponses

Avatar
DesseJ
Bonjour,

Vous pouvez récupérer les données en colonnes par un tableau croisé
dynamique : champs de ligne (Produit, Gamme, Usine, Période), champ de
colonne (Critere Details), données (Stat)

ou par la macro suivante (à adapter), si pour chaque couple Produit/
Gamme, vous avez 4 lignes de détail :

Sub Recup()
Dim DerLig#, i#, j#
With ActiveSheet
DerLig = [A65536].End(3).Row
For i = 2 To DerLig
'si changement de produit (col A) ou de gamme (col B), et
que la ligne (col D) est typée "Détail"
If (.Cells(i, 1) <> .Cells(i - 1, 1) Or .Cells(i, 2)
<> .Cells(i - 1, 2)) And Left(.Cells(i, 4), 6) = "Détail" Then
'on parcours les 3 lignes suivantes
For j = 1 To 3
Select Case .Cells(i + j, 4)
Case "Total Réclamations"
.Cells(i, 9) = .Cells(i + j, 7)
Case "Ventes UC"
.Cells(i, 10) = .Cells(i + j, 7)
Case "% PPM"
.Cells(i, 11) = .Cells(i + j, 7)
End Select
Next j
End If
Next i
End With
End Sub

Cordialement
StephD
Avatar
pb
Un grand merci c'est exactement cela.

a écrit dans le message de news:

Bonjour,

Vous pouvez récupérer les données en colonnes par un tableau croisé
dynamique : champs de ligne (Produit, Gamme, Usine, Période), champ de
colonne (Critere Details), données (Stat)

ou par la macro suivante (à adapter), si pour chaque couple Produit/
Gamme, vous avez 4 lignes de détail :

Sub Recup()
Dim DerLig#, i#, j#
With ActiveSheet
DerLig = [A65536].End(3).Row
For i = 2 To DerLig
'si changement de produit (col A) ou de gamme (col B), et
que la ligne (col D) est typée "Détail"
If (.Cells(i, 1) <> .Cells(i - 1, 1) Or .Cells(i, 2)
<> .Cells(i - 1, 2)) And Left(.Cells(i, 4), 6) = "Détail" Then
'on parcours les 3 lignes suivantes
For j = 1 To 3
Select Case .Cells(i + j, 4)
Case "Total Réclamations"
.Cells(i, 9) = .Cells(i + j, 7)
Case "Ventes UC"
.Cells(i, 10) = .Cells(i + j, 7)
Case "% PPM"
.Cells(i, 11) = .Cells(i + j, 7)
End Select
Next j
End If
Next i
End With
End Sub

Cordialement
StephD