Macro de mise en forme - données brutes
Bonjour à tous,
J'exporte régulièrement en Excel des données d'une application, et chaque fois je dois re-faire une mise en forme spécifique.
À la ligne 1, j'insères une ligne pour mettre une formule en C1, D1 et E1.
En F1, je fait le rapport de E1/10280.
À la ligne 2, je mets le filtre automatique.
Je mets en forme la colonne B en nombre sans décimale.
Je convertis les données de la colonne B (B3:BX) en nombre.
Et, je trie la colonne B par date croissante.
Croyez vous qu'il est possible d'avoir une macro qui fasse systématiquement cette mise en forme?
Merci
Bonjour,
Vue que la manipulation a l'air d'être toujours la même, je vous préconise d'enregistrer vous même une macro en utilisant l'enregistreur. Vous pouvez regarder cette vidéo qui explique comment faire : https://www.youtube.com/watch?v=m-FvqmdKLeA
Cindy
Bonjour,
À tester si ça convient :
Sub Mise_en_forme_PEP()
Dim DerLig As Integer
With Worksheets("Sheet1") ' nom à adapter
DerLig = Cells(Rows.Count, "B").End(xlUp).Row ' trouve dernièr ligne
.Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ' insérer ligne
.Range("A2:H2").AutoFilter ' ajouter filtre
.Range("B3:B" & DerLig).NumberFormat = "0" ' formant nombre sans décimale
.Range("C1").FormulaR1C1 = "=SUBTOTAL(3,R[2]C[-1]:R[9999]C[-1])"
.Range("D1").FormulaR1C1 = "=SUBTOTAL(3,R[2]C[-1]:R[9999]C[-1])"
.Range("E1").FormulaR1C1 = "=SUBTOTAL(3,R[2]C[-1]:R[9999]C[-1])"
.Range("F1").FormulaR1C1 = "=RC[-1]/10280" ' ajouter formule en F1
.Range("B3:B" & DerLig).TextToColumns Destination:=Range("B3"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 1), TrailingMinusNumbers:=True
.Sort.SortFields.Clear
.Sort.SortFields.Add2 Key:=Range("C3:C" & DerLig), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange Range("A2:H" & DerLig)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub
ric
Bonjour ric,
merci pour ta proposition, mais il y a une erreur d'exécution 438 sur le
.Sort.SortFields.Clear
Avec la proposition de CyndiD, j'ai réussi à obtenir ceci, mais cela ne converti pas le contenu des cellules B3:Bx en nombre. Mon rapport export le contenu en texte, et ce n'est pas idéale pour trier des chiffre.
Sub MiseEnForme()
'
' MiseEnForme Macro
' Macro enregistrée le 2018-07-13 par ulangzx
'
'
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Rows("2:2").Select
Selection.AutoFilter
Columns("B:B").Select
Selection.NumberFormat = "0"
Range("B3").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveWindow.SmallScroll Down:=6
Range("B1").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(3,R[2]C:R[11999]C)"
Range("B2").Select
Columns("C:C").ColumnWidth = 11.14
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").ColumnWidth = 11.14
Columns("F:F").EntireColumn.AutoFit
Columns("G:G").EntireColumn.AutoFit
Columns("H:H").EntireColumn.AutoFit
Range("A3:H3").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Sort Key1:=Range("E3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:E1"), Type:=xlFillDefault
Range("B1:E1").Select
Selection.Font.Bold = True
Range("F1").Select
ActiveCell.FormulaR1C1 = "=RC[-1]/10280"
Range("F1").Select
Selection.Style = "Percent"
Selection.Font.Bold = True
End Sub
Bonjour,
Désolé, je n'avais remarqué que tu utilisais Excel 2003.
ric
Excel 2003, à mon grand désespoir...
Bonjour
Avec ce code j'arrive à obtenir à peu près à 100% ce que je souhaite. Tout ce qui me reste à intégrer c'est la conversion en nombre d'une colonne dont les nombres sont stockés en forma lettre.
Sub MiseEnForme()
'
' MiseEnForme Macro
' Macro enregistrée le 2018-07-13 par ulangzx
'
'
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Rows("2:2").Select
Selection.AutoFilter
Columns("B:B").Select
Selection.NumberFormat = "0"
Range("B1").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(3,R[2]C:R[11999]C)"
Columns("C:C").ColumnWidth = 11.14
Columns("D:D").EntireColumn.AutoFit
Columns("E:E").ColumnWidth = 11.14
Columns("F:F").EntireColumn.AutoFit
Columns("G:G").EntireColumn.AutoFit
Columns("H:H").EntireColumn.AutoFit
Range("A3:H3").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.Sort Key1:=Range("E3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:E1"), Type:=xlFillDefault
Range("B1:E1").Select
Selection.Font.Bold = True
Range("F1").Select
ActiveCell.FormulaR1C1 = "=RC[-1]/10280"
Range("F1").Select
Selection.Style = "Percent"
Selection.Font.Bold = True
End Sub
J'ai trouvé ce code sur le net, mais il fonction pour le classeur en entier. J'aimerais avoir l'équivalent seulement pour la colonne B de la feuille active.
Sub Test()
For Each ws In ActiveWorkbook.Worksheets
With ws.Range("B3:B15000")
.NumberFormat = "0"
.Value = .Value
End With
Next
End Sub
Mes tentative d'adaptation n'ont pas porté fruit.
Merci
Bonjour,
Pour la feuille en cours...
Sub Test()
With Range("B3:B15000")
.NumberFormat = "0"
.Value = .Value
End With
End Sub
ric
merci beaucoup, c'est grandement apprécié ric.
Je venais juste de trouver une piste semblable icihttps://answers.microsoft.com/fr-fr/office/forum/office_2013_release-excel/convertir-une-colonne-de-donn%C3%A9es-texte-en/d9792709-b98d-4017-a452-30090af29db5
Bon week end à tous.