Mise en forme par macro (colonne à ligne)

Acturis

XLDnaute Nouveau
Bonjour le forum,

Je me permet de solliciter une nouvelle fois votre aide car j'aurais bien besoin d'un coup de pouce pour une action que j'aimera automatiser dans Excel. (Voir fichier Exemple).

Dans cet exemple, j'ai différentes entrées identifiées par un numéro en colonne A.
Pour chacune de ces entrées, il y a en colonne D, des classifications (300/332/314...) qui sont placées les une sous les autres (par ligne).
Savez vous comment faire pour que je n'ai plus qu'une seule ligne par entrée, avec les classifications les une à la suite des autres sur la même ligne (voir fichier résultat manuel).

C'est quelque chose d'assez long à faire à la main car il peut y avoir potentiellement des centaines de lignes dans ce fichier.

Merci d'avance pour votre aide
 

Pièces jointes

  • Exemple.xlsx
    16.5 KB · Affichages: 20
  • Resultat manuel.xlsx
    11.4 KB · Affichages: 21

vgendron

XLDnaute Barbatruc
Hello
avec ce code
VB:
Sub MiseEnForme()
Dim TabInit() As Variant
Dim TabFinal() As Variant

With Sheets("Test")
    TabInit = .UsedRange.Value
    NbLigneFinal = WorksheetFunction.CountA(.Range("A:A"))
End With
For i = LBound(TabInit, 1) To UBound(TabInit, 1)
    If TabInit(i, 1) <> "" Then
        nb = 1
    Else
        nb = nb + 1
        NbMax = WorksheetFunction.Max(NbMax, nb)
    End If
Next i

ReDim TabFinal(1 To NbLigneFinal, 1 To NbMax + 3)
indL = 0
indC = 1
For i = LBound(TabInit, 1) + 1 To UBound(TabInit, 1)
    If TabInit(i, 1) <> "" Then
        indL = indL + 1
        indC = 1
        For j = LBound(TabInit, 2) To UBound(TabInit, 2)
            TabFinal(indL, indC) = TabInit(i, j)
            indC = indC + 1
        Next j
    Else
        TabFinal(indL, indC) = TabInit(i, 4)
        indC = indC + 1
       
    End If
Next i
With Sheets("Resultat")
    .Range("A2").Resize(UBound(TabFinal, 1), UBound(TabFinal, 2)) = TabFinal
    .Range("A2").Resize(UBound(TabFinal, 1)).NumberFormat = "0"
End With

End Sub
 

Acturis

XLDnaute Nouveau
Bonjour,

Merci pour votre aide !

vgendron, un message apparaît lors de l’exécution de la macro "L'indice n'appartient pas à la sélection" à ce niveau là :
TabFinal(indL, indC) = TabInit(i, j)

Pierrejean, ça fonctionne nickel ! Merci beaucoup
 

Acturis

XLDnaute Nouveau
Bonjour Acturis
Salut vgendron

Un autre essai

Je me permet de solliciter une nouvelle fois votre aide pour le même travail, mais avec un filtre en plus qui me pose problème.
Dans le fichier exemple 2 j'ai une colonne en plus avec des noms de source...Or je n'aimerai conserver que les classifications "GHS_EU" our les mettre les une à la suite des autres sur la même ligne.
Pensez-vous qu'un tel filtre est possible ?

Merci encore pour votre aide
 

Pièces jointes

  • Exemple2.xlsx
    26.7 KB · Affichages: 15
  • Resultat manuel 2.xlsx
    10.8 KB · Affichages: 21

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof