Simplification macro
Bonjour à tous
Je cherche à simplifier la macro qui suit ET à déboguer la ligne surlignée ("mise en forme L").
Un grand merci d'avance.
Sub MiseEnForme()
'Mise en forme des données
With Sheets(2)
drl = .Range("H" & .Rows.Count).End(xlUp).Row 'Dernière ligne non vide en colonne M, utilisée comme référence
' Début boucle
For ligne = 10 To drl
'mise en forme (J, K, M, O, P)
.Range("H" & ligne).Copy
.Range("J" & ligne).Select
Selection.PasteSpecial Paste:=xlPasteFormats 'Collage format des cellules
.Range("H" & ligne).Copy
.Range("K" & ligne).Select
Selection.PasteSpecial Paste:=xlPasteFormats 'Collage format des cellules
.Range("H" & ligne).Copy
.Range("M" & ligne).Select
Selection.PasteSpecial Paste:=xlPasteFormats 'Collage format des cellules
.Range("H" & ligne).Copy
.Range("O" & ligne).Select
Selection.PasteSpecial Paste:=xlPasteFormats 'Collage format des cellules
.Range("H" & ligne).Copy
.Range("P" & ligne).Select
Selection.PasteSpecial Paste:=xlPasteFormats 'Collage format des cellules
[b][Surligner]'Mise en forme (L)
.Range("L", ligne).Select
Selection.NumberFormat = "0%"[/Surligner] [/b]
Next ligne
End With
End Sub
Pour le débogage de la macro, j'ai fait ceci (et ça marche).
.Range("L" & ligne).Selection.NumberFormat = "0%
Comment simplifier tout ça?
Salut Merhune,
Si tu veux conserver une boucle, tu peux résumer tout le début de ton code par :
Sub MiseEnForme()
With Sheets(2)
For ligne = 10 To .Range("H" & .Rows.Count).End(xlUp).Row
.Range("H" & ligne).Copy
.Range("J" & ligne & ",K" & ligne & ",M" & ligne & ",O" & ligne & ",P" & ligne).PasteSpecial Paste:=xlPasteFormats
Next ligne
End With
End Sub
Mais si sa n'a pas d'importance de conserver la boucle, alors tu peux aussi changer par :
x = Range("H" & Rows.Count).End(xlUp).Row
Range("H10:H" & x).Copy
Range("J10:J" & x & ",K10:K" & x & ",M10:M" & x & ",O10:O" & x & ",P10:P" & x).PasteSpecial Paste:=xlPasteFormats
Concernant ton erreur :
[b][Surligner]'Mise en forme (L)
.Range("L", ligne).Select
Selection.NumberFormat = "0%"[/Surligner] [/b]
C'est des balises HTML que tu viens d'utiliser (et encore la balise 'surligner' n'existe pas en HTML)
En VBA pour mettre en gras :
.Font.Bold = True
En VBA pour surligner :
.Interior.Color= k
'k étant le code couleur
A dispo!
Bonjour,
Mets tes données sous forme de tableau (structuré).
Ceux-ci sont dynamiques, reconduisent les formules, le format des cellules et les MFCs., lors de l'insertion de lignes.
Plus besoin de VBA pour ce faire.
Cdlt.
Merci pour vos réponses.
La boucle étant importante pour moi, j'ai finalement suivi la première méthode proposée que j’avais essayé de faire. Mais mes " " étaient disposés différemment (d'où le fait que ça ne fonctionnait pas).
Je me suis servi du code pour simplifier la seconde partie.
With Sheets(2)
drl = .Range("H" & .Rows.Count).End(xlUp).Row 'Dernière ligne non vide en colonne M, utilisée comme référence
' Début boucle
For ligne = 10 To drl
'mise en forme (J, K, L, M, O, P)
.Range("H" & ligne).Copy
.Range("J" & ligne & ",K" & ligne & ",M" & ligne & ",O" & ligne & ",P" & ligne & ",L" & ligne).PasteSpecial Paste:=xlPasteFormats
'Mise en forme (L)
.Range("L" & ligne).NumberFormat = "0%"
'mise en forme (N, Q, R)
.Range("H" & ligne).Copy
.Range("N" & ligne & ",Q" & ligne & ",R" & ligne).PasteSpecial Paste:=xlPasteFormats
Next ligne
End With
Columns("L:L").Select
With Selection
.HorizontalAlignment = xlCenter
End With
End Sub
PS: pour le surligné/en gras, c'était pas une fonction mais juste le fait que je voulais surligner/mettre en gras dans le forum