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
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
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 à fusionnerla première ligne sera fusionnée de toute façon.
En pièce jointe un fichier exemple.
Encore merci,
Cécile
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.
Ok c'est tout bon, effectivement mon fichier démarre une ligne avant.
J'ai donc modifié cela.
Merci mille fois pour ton aide !
@++