Bonjour
dans le cadre de mon travail je dois établir des refacturations. pour cela je dois établir une fiche de détail et j aimerai automatiser la création de celle ci.
J ai crée une macro par rapport au résultat de mon tableau croisé dynamique mais j aimerai en faite qu'elle se crée toute à partir de ce tableau.
en résumé je dois cliqué sur toute les cellules de mon tcd puis lancé ma macro après l'obtention de mon résultat. Hors j'aimerai que cette partie soit aussi automatiser. Donc si 100 ligne dans mon tcd je dois répéter l'action 100 fois...
exemple de mon tcd pour vous donner un avis dans la colonne total j ai le détail de ce qui doit être refacturé à chaque entité il peut y en avoir une centaine:
DM Total
pierre 904,64
paul 55,58
jacque 1000,98
pedro 3641,02
fabien 924,39
voici le détail de ma macro pour transformer le détail de mon resultat tcd en feuille de détail pour la refacturation:
Sub detailfacture()
'
' detailfacture Macro
' Macro enregistrée le 31/05/2012 par ucta012
'
' Touche de raccourci du clavier: Ctrl+l
Cells.Select
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(9), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("F1").Select
ActiveCell.FormulaR1C1 = "Détail facture "
Range("G1").Select
ActiveCell.FormulaR1C1 = "=+R[4]C[-2]"
Range("H1").Select
ActiveCell.FormulaR1C1 = " "
Range("I1").Select
ActiveCell.FormulaR1C1 = "=+R[4]C[-8]"
Range("K1").Select
ActiveCell.FormulaR1C1 = "=+CONCATENATE(RC[-5],RC[-4],RC[-3],RC[-2])"
Selection.Copy
Range("F1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("G1:K1").Select
Application.CutCopyMode = False
Selection.ClearContents
Columns("A:E").Select
Range("E1").Activate
Selection.Delete Shift:=xlToLeft
Range("A1").Select
Selection.Font.Bold = True
Selection.Font.Italic = True
Selection.Font.Underline = xlUnderlineStyleSingle
Range("F1").Select
ActiveCell.FormulaR1C1 = "Total:"
Range("F1").Select
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("F4").Select
Selection.Copy
Range("F1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
End Sub
Donc j'aimerai juste rajouter en ligne de code a ma macro qu'elle sélectionne la première cellule de mon tcd puis qu'elle effectue la macro détailler ci-dessus puis qu'elle passe a la ligne suivante jusqu’à ce qu'il n y ai plus de facture a détailler.
j’espère que cela est possible
cordiallement
je travaille sur excel 2003 pour l'instant
dans le cadre de mon travail je dois établir des refacturations. pour cela je dois établir une fiche de détail et j aimerai automatiser la création de celle ci.
J ai crée une macro par rapport au résultat de mon tableau croisé dynamique mais j aimerai en faite qu'elle se crée toute à partir de ce tableau.
en résumé je dois cliqué sur toute les cellules de mon tcd puis lancé ma macro après l'obtention de mon résultat. Hors j'aimerai que cette partie soit aussi automatiser. Donc si 100 ligne dans mon tcd je dois répéter l'action 100 fois...
exemple de mon tcd pour vous donner un avis dans la colonne total j ai le détail de ce qui doit être refacturé à chaque entité il peut y en avoir une centaine:
DM Total
pierre 904,64
paul 55,58
jacque 1000,98
pedro 3641,02
fabien 924,39
voici le détail de ma macro pour transformer le détail de mon resultat tcd en feuille de détail pour la refacturation:
Sub detailfacture()
'
' detailfacture Macro
' Macro enregistrée le 31/05/2012 par ucta012
'
' Touche de raccourci du clavier: Ctrl+l
Cells.Select
Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(9), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("F1").Select
ActiveCell.FormulaR1C1 = "Détail facture "
Range("G1").Select
ActiveCell.FormulaR1C1 = "=+R[4]C[-2]"
Range("H1").Select
ActiveCell.FormulaR1C1 = " "
Range("I1").Select
ActiveCell.FormulaR1C1 = "=+R[4]C[-8]"
Range("K1").Select
ActiveCell.FormulaR1C1 = "=+CONCATENATE(RC[-5],RC[-4],RC[-3],RC[-2])"
Selection.Copy
Range("F1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("G1:K1").Select
Application.CutCopyMode = False
Selection.ClearContents
Columns("A:E").Select
Range("E1").Activate
Selection.Delete Shift:=xlToLeft
Range("A1").Select
Selection.Font.Bold = True
Selection.Font.Italic = True
Selection.Font.Underline = xlUnderlineStyleSingle
Range("F1").Select
ActiveCell.FormulaR1C1 = "Total:"
Range("F1").Select
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("F4").Select
Selection.Copy
Range("F1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Cells.Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
End Sub
Donc j'aimerai juste rajouter en ligne de code a ma macro qu'elle sélectionne la première cellule de mon tcd puis qu'elle effectue la macro détailler ci-dessus puis qu'elle passe a la ligne suivante jusqu’à ce qu'il n y ai plus de facture a détailler.
j’espère que cela est possible
cordiallement
je travaille sur excel 2003 pour l'instant