Sub Modifier()
Dim P As Range, i&
Set P = [A1].CurrentRegion
Application.ScreenUpdating = False
P.Rows(P.Rows.Count + 1).Resize(Rows.Count - P.Rows.Count - P.Row + 1).Delete xlUp 'RAZ
P.Copy P(P.Rows.Count + 2, 1)
Set P = P(P.Rows.Count + 2, 1).Resize(P.Rows.Count, P.Columns.Count)
P.Sort P.Columns(1), xlAscending, Header:=xlYes 'tri
For i = P.Rows.Count To 2 Step -1
If P.Cells(i, 1) <> P.Cells(i - 1, 1) Then
P.Rows(i).Insert xlDown
P.Rows(1).Copy P.Rows(i)
P.Cells(i, 1) = P.Cells(i + 1, 1)
P.Cells(i + 1, 1) = ""
Else
P.Cells(i, 1) = ""
End If
Next
P.Rows(1).Delete xlUp
End Sub
Bonjour Axel! Merci pour cette nouvelle approche qui en soit fait le travail et regroupe bien selon le critère voulu. Mais au niveau de la mise en forme du tableau powerquery , je ne trouve pas bcp d'option, notament pour éviter les répétitions "catégorie" et réinsérer les entêtes de colonnes.Bonjour à tous,
une tentative par Power Query - à actualiser Données => Actualiser.
Bonne journée.
Sub Modifier()
Dim P As Range, i&
Set P = [A1].CurrentRegion
Application.ScreenUpdating = False
P.Rows(P.Rows.Count + 1).Resize(Rows.Count - P.Rows.Count - P.Row + 1).Delete xlUp 'RAZ
P.Copy P(P.Rows.Count + 2, 1)
Set P = P(P.Rows.Count + 2, 1).Resize(P.Rows.Count, P.Columns.Count)
For i = P.Rows.Count To 2 Step -1
P.Rows(i).Insert xlDown
P.Rows(1).Copy P.Rows(i)
P.Cells(i, 1) = P.Cells(i + 1, 1)
P.Cells(i + 1, 1) = ""
Next
P.Rows(1).Delete xlUp
End Sub
Bonjour Job35 merci à toi pour ce programme, à chaud après test, je dirais que ça ne convient pas tout à fait mais presque (voir photo ci dessous)Bonjour Nico2978, JHA, alexga78,
Il y a aussi le VBA, c'est assez simple :
Voici ci-dessous le résultat attenduMa macro fait ce qui a été demandé au post #1.
S'il faut autre chose montrez-le sur un exemple.
Sub Modifier()
Dim P As Range, i&
Set P = [A1].CurrentRegion
Application.ScreenUpdating = False
P.Rows(P.Rows.Count + 1).Resize(Rows.Count - P.Rows.Count - P.Row + 1).Delete xlUp 'RAZ
P.Copy P(P.Rows.Count + 2, 1)
Set P = P(P.Rows.Count + 2, 1).Resize(P.Rows.Count, P.Columns.Count)
P.Sort P.Columns(1), xlAscending, Header:=xlYes 'tri
For i = P.Rows.Count To 2 Step -1
If P.Cells(i, 1) <> P.Cells(i - 1, 1) Then
P.Rows(i).Insert xlDown
P.Rows(1).Copy P.Rows(i)
P.Cells(i, 1) = P.Cells(i + 1, 1)
P.Cells(i + 1, 1) = ""
Else
P.Cells(i, 1) = ""
End If
Next
P.Rows(1).Delete xlUp
End Sub
On peut aussi empêcher la largeur auto dans les propriétés du TS issu de la requêteRe,
pour la largueur des colonnes il "suffit" de jouer sur le nom des colonnes de la dernière étape de la requête,