Automatisation de changement de mise en forme de tableau

Bonjour à tous!

Je reviens vers vous pour m'aider à trouver une macro d'automatisation de mise en forme de tableau.

je sais à quoi va ressembler mon tableau de départ et je sais à quoi il doit ressembler à la fin pour que je puisse l'exploiter ensuite avec une autre macro.

Le truc c'est que ce tableau va se composer de plusieurs centaines de lignes, du coup si je pouvais avoir une macro pour automatiser le processus de changement de mise en forme, je gagnerais beaucoup de temps et éviterais un boulot monstre de répétition.

J'arrête là les blablabla...... et vous joins un fichier avec en feuil1 mon tableau de départ et en feuil2 à quoi il doit ressembler après passage de la macro!!

UN GRAND MERCI d'avance pour le(s) coups de main(s)

Bonjour,

A tester.

Cdlt.

Option Explicit
Public Sub Decroisertableau()
Dim wss As Worksheet, wsd As Worksheet
Dim lastRow As Long, LastCol As Integer
Dim Lig As Long, i As Long, Col As Integer

    Application.ScreenUpdating = False

    Set wss = Worksheets("Feuil1")
    Set wsd = Worksheets("Feuil2")

    wsd.Cells.Clear

    With wss

        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        LastCol = .Cells(1, Columns.Count).End(xlToLeft).Column

        .Range(.Cells(1, 1), .Cells(1, LastCol)).Copy Destination:=wsd.Cells(1, 1)

        Lig = 1
        Col = wsd.Cells(1, Columns.Count).End(xlToLeft).Column + 1

        For i = 2 To lastRow
            If .Cells(i, 1) = .Cells(i - 1, 1) Then
                .Range(.Cells(i, 2), .Cells(i, LastCol)).Copy Destination:=wsd.Cells(Lig, Col)
            Else
                Lig = Lig + 1
                .Range(.Cells(i, 1), .Cells(i, LastCol)).Copy Destination:=wsd.Cells(Lig, 1)
            End If
            Col = wsd.Cells(Lig, Columns.Count).End(xlToLeft).Column + 1
        Next

    End With

    Set wss = Nothing: Set wsd = Nothing

End Sub

Bonjour Jean Eric

Après test de votre code, tout est parfait

La macro réalise la modification de mise en forme du tableau, j'ai essayé de faire quelques modifications sur le tableau initial et pas de bug en vue!!

Donc un GRAND MERCI à vous pour votre temps passé sur mon problème, de bonne heure en plus^^

2 sujets postés en 2jours et 2 réponses efficaces de votre part, que demandé de plus??!!

Continuez ainsi et longue vie au forum excel-pratique

Si vous avez encore un peu de temps à me consacrer je veux bien que vous m'expliquiez votre macro et surtout sa logique, je suis novice en vba mais j'aimerais bien progresser..... Merci

Bonne journée à vous

Re,

A te relire, si ce n'est pas suffisant.

Cdlt.

Option Explicit
Public Sub Decroisertableau()
' déclaration de toutes les variables (obligatoire avec Option explicit)
Dim wss As Worksheet, wsd As Worksheet
Dim lastRow As Long, LastCol As Integer
Dim Lig As Long, i As Long, Col As Integer

    Application.ScreenUpdating = False
    ' initialisation des variables objets.
    Set wss = Worksheets("Feuil1")  ' Source.
    Set wsd = Worksheets("Feuil2")  ' Destination.
    ' suppression des données
    wsd.Cells.Clear

    With wss    ' Source

        ' dernière ligne non vide de la colonne 1 de la feuille source.
        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        ' dernière colonne de la ligne 1 de la feuille source.
        LastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
        ' copie la première ligne de la feuille source dans la feuille destination
        ' (A1 ou Cells(1,1)).
        .Range(.Cells(1, 1), .Cells(1, LastCol)).Copy Destination:=wsd.Cells(1, 1)

        Lig = 1
        ' dernière colonne de la ligne 1  de la feuille destination.
        Col = wsd.Cells(1, Columns.Count).End(xlToLeft).Column

        For i = 2 To lastRow    ' source
            ' Nota : dans l'exemple les données sont triées par nom de villes.
            ' Si A2 = A1 de la feuille source
            If .Cells(i, 1) = .Cells(i - 1, 1) Then
                ' on copie la ligne 2 de la feuille source dans la dernière colonne + 1
                ' de la feuille destination (sans le nom de ville).
                .Range(.Cells(i, 2), .Cells(i, LastCol)).Copy Destination:=wsd.Cells(Lig, Col + 1)
            Else
                ' Sinon, on copie les données de la feuille source dans une nouvelle ligne de
                ' la feuille destination.
                Lig = Lig + 1
                .Range(.Cells(i, 1), .Cells(i, LastCol)).Copy Destination:=wsd.Cells(Lig, 1)
            End If
            ' dernière colonne de la ligne 1 de la feuille destination pour les prochaines copies.
            Col = wsd.Cells(Lig, Columns.Count).End(xlToLeft).Column
        ' prochaine ligne de la feuille source
        Next

    End With
    'RAZ des variables objets.
    Set wss = Nothing: Set wsd = Nothing

End Sub

Re,

Merci pour les explications, je vais pouvoir progresser et comprendre comment vous avez abordé le problème et le résoudre surtout!

Merci encore.

Et je reviendrais vers vous si besoin

Cordialement

Bonjour,

Je cherche a faire à peu pres le chemin inverse que le tableau expliqué ici, Auriez vous un coup de main à prêter?

J'explique dans le fichier joint le chemin rechercher....

Mettre en forme des données mensuelle sur colonne en données mensuel par ligne....

Merci d'avance...

Bonjour à tous

Je veux travailler sur le même principe mais sans prendre les 2 colonnes ( fonction et niveau )

mercii

8exemple-11.xlsx (10.55 Ko)

Bonsoir supzak!

Tout d'abord, il est conseillé d'éviter de poster à la suite d'un sujet existant, un nouveau sujet..... il faut mieux ouvrir ton propre, tu auras plus de chance d'avoir des réponses!! (d'après ce que j'ai pu comprendre^^ )

De plus, mieux vaut privilégier les fichiers au format (.xls) pour que le maximum de personnes puisse ouvrir et consulter ton fichier

En ce qui concerne, ta question je ne suis pas sûr de tout comprendre?? Que cherches tu exactement?

Si tu veux obtenir la même chose que pour moi mais avec les colonnes B et C en moins pas de soucis de code, celui-ci ne tient pas compte des références de colonnes mais juste celles qui sont remplies ou pas... du coup pour ton fichier, il suffit de supprimer les colonnes qui ne t'intéressent pas et lancer la macro de mon fichier!!

En espérant ayant répondu à ta problématique!!

Bonne soirée

Bonjour samsam

Merci pour les informations et merci beaucoup pour ta réponse

je veux la meme resultats quoi toi mais sans suprimer les colonnes qui m'interesse pas

c'est a dire je veux preciser les colonnes ou je veux travailler dans le code

merci ^_^

Bonjour,

Salut samsam07

@ Supzak,

Tu crées un nouveau sujet avec une question pertinente et tu joins un fichier pertinent.

Avec le résultat escompté

Cdlt.

Rechercher des sujets similaires à "automatisation changement mise forme tableau"