Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Mise en forme par macro (colonne à ligne)

  • Initiateur de la discussion Initiateur de la discussion Acturis
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
133
Réponses
6
Affichages
535
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…