Mise en page automatique avec macro

Bonjour à tous,

Je souhaite mettre en forme un tableau à l'aide d'une macro.

Je dois : fusionner/centrer des cellules et ajouter des bordures.

Ci-joint un fichier exemple plus explicite.

D'avance merci pour votre aide.

Cécile

201exemple.xlsm (11.44 Ko)

Bonsoir,

une proposition intégrée dans le fichier joint, à lancer via alt-F8 après avoir sélectionné la feuil2 ou après avoir supprimé le tableau résultat attendu sur la feuiL1

Sub mef()
    dl = Cells(Rows.Count, 1).End(xlUp).Row + 1 'dernière ligne
    pc = 2 'première ligne du tableau à mettre en forme
    dc = pc 'dernière ligne du tableau à mettre en forme
    pcm = 0 ' pcm= première ligne de cellule à fusionner
    For i = pc To dl 'on parcourt  les lignes de la feuille jusqu'à la ligne dl
        If Cells(i, 1) = "" Then 'si cellule en colonne A est vide
            If pc <> 0 Then ' s'il y a un tableau à mettre en forme
                Range("A" & pc & ":L" & dc).Borders.Weight = xlThin ' on dessine les lignes
                pc = 0 ' le tableau a été mis en forme, on remet première ligne du tableau à 0
            End If
        ElseIf i <> 2 Then ' si cellule en colonne A n'est pas vide
            If pc = 0 Then pc = i ' si premiere ligne = 0 , la première ligne est la ligne en cours
            dc = i ' dernière ligne du tableau est la ligne en cours
            If Cells(i, "M") = "" Then ' si pas de valeur en colonne M
                If pcm = 0 Then pcm = i ' si première ligne =0 , la première ligne à fusionner est la ligne en cours
            Else  ' si valeur en colonne
                If pcm <> 0 Then 'si cellule à fusionner
                    With Range(Cells(pcm, "M"), Cells(i, "M"))
                        .Merge
                        .VerticalAlignment = xlCenter
                    End With
                Else 'si pas de fusion
                    pcm = i
                End If
                ' on dessine les bords de la cellule en colonne M
                Range(Cells(pcm, "M"), Cells(i, "M")).Borders(xlEdgeTop).Weight = xlThin
                Range(Cells(pcm, "M"), Cells(i, "M")).Borders(xlEdgeBottom).Weight = xlThin
                Range(Cells(pcm, "M"), Cells(i, "M")).Borders(xlEdgeLeft).Weight = xlThin
                Range(Cells(pcm, "M"), Cells(i, "M")).Borders(xlEdgeRight).Weight = xlThin
                pcm = 0 ' les bords ont été déssinés
            End If
        End If
    Next i

End Sub
145cecile42.xlsm (19.46 Ko)

Bonjour,

Merci pour ta réponse.

Tout est ok sauf un détail.

Lorsque je lance ma macro, je ne sais pas quelle première ligne devra être fusionner.

Donc avec ce code :

   pcm = 0 ' pcm= première ligne de cellule à fusionner

la première ligne sera fusionnée de toute façon.

En pièce jointe un fichier exemple.

Encore merci,

Cécile

37ex-erreur.xlsx (10.23 Ko)

Bonjour,

je ne parviens pas à reproduire l'erreur que tu as indiquée. tu as mis le résultat mais pas la feuille avant l'exécution de la macro.

Les différences que j'ai vues sont :

dans ton fichier initial, la ligne de titre est en ligne 2 et il n'y a pas de titre de colonne pour la colonne M, mais ces différences, qui empêchent le bon fonctionnement, n'expliquent pas le résultat que tu as obtenu.

la macro de mise en forme est basée sur le fichier que tu as envoyé initialement et gère un nombre variable de lignes par groupe et par cellule à fusionner.

en modifiant ton dernier fichier, la macro s'exécute correctement.

par rapport à cette instruction :

pcm=0 

'pcm sert à gérer le numéro de première ligne à fusionner, initialement il est à 0, indiquant pas de fusion trouvée. cette variable est gérée par la macro pour son fonctionnement et cette valeur 0 ne doit pas être modifiée.

le code fourni fonctionne tel quel sur le format de feuille que tu as donné initialement.

61ex-erreur.xlsx (12.23 Ko)

Ok c'est tout bon, effectivement mon fichier démarre une ligne avant.

J'ai donc modifié cela.

Merci mille fois pour ton aide !

@++

Rechercher des sujets similaires à "mise page automatique macro"