Créer Feuil1 de la Feuil2
Sub convertirv2()
Set wsa = Sheets("TCD EN VALEUR 62311")
Set wsb = Sheets("import")
dla = wsa.Cells(Rows.Count, 4).End(xlUp).Row
wsa.Range("D1:K1") = Array("D_PS", "", "", "", "D_AC ", "P_AMOUNT", "D_AC", "P_AMOUNT")
wsa.Range("C3:M3") = Array("RUB Vector", "Code SL vector", "Mt 62311 SAP", "Mt dans liasse", "Mt sans RFA", "D_AC", "PL1355", "D_AC", "PL1355", "Total nette", " écart SI SF")
wsa.Range("C5:C" & dla) = "PL1355"
wsa.Range("D5:D" & dla).FormulaR1C1 = _
"=VLOOKUP(RC[-3],'liste stes groupe 29102014'!C[-1]:C[2],4,FALSE)"
wsa.Range("E5:E" & dla).FormulaR1C1 = _
"=RC[-3]/1000"
wsa.Range("F5:F" & dla).FormulaR1C1 = _
"=(SUMIFS('LIASSE SI'!C[-3],'LIASSE SI'!C[-4],RC[-2],'LIASSE SI'!C[-5],RC[-3]))/1000"
wsa.Range("G5:G" & dla).FormulaR1C1 = _
"=RC[-1]-RC[-2]"
wsa.Range("H5:H" & dla) = _
"PL1355"
wsa.Range("I5:I" & dla).FormulaR1C1 = _
"=IF(RC[-3]=0,RC[-4],IF(RC[-3]<RC[-4],RC[-4],RC[-3]))"
wsa.Range("J5:J" & dla) = _
"=PL1315"
wsa.Range("K5:K" & dla).FormulaR1C1 = _
"=IF(RC[-5]=0,-RC[-6],IF(RC[-5]<RC[-6],RC[-4],0)) "
wsa.Range("L5:L" & dla).FormulaR1C1 = _
"=RC[-3]+RC[-1]"
wsa.Range("M5:M" & dla).FormulaR1C1 = _
"=RC[-7]+RC[-1]"
With wsb
.Cells.ClearContents
.Range("A1:J1") = Array("D_CA", "D_DP", "D_PE", "D_RU", "D_AC", "D_FL", "D_CU", "D_PS", "P_AMOUNT", "D_AU")
dlb = 1
For j = 0 To 1
For i = 5 To dla
If wsa.Cells(i, 4) <> "" Then
dlb = dlb + 1
.Cells(dlb, 1) = "ACTUAL"
.Cells(dlb, 2) = DateValue("01/07/2015")
.Cells(dlb, 2).NumberFormat = "yyyy.mm"
.Cells(dlb, 2).Copy .Cells(dlb, 3)
.Cells(dlb, 4) = "S2000"
.Cells(dlb, 5) = wsa.Cells(i, 4)
.Cells(dlb, 6) = "F99"
.Cells(dlb, 7) = "EURO"
.Cells(dlb, 8) = wsa.Cells(i, 8 + j * 2)
.Cells(dlb, 9) = wsa.Cells(i, 9 + j * 2)
.Cells(dlb, 10) = "0LOC01"
End If
Next i
Next j
End With
End Sub
Voici le code avec les formules corrigées.
Il reste le problème du chargement à partir de la ligne 1 au lieu de la ligne 5, et la macro met les formules sur la ligne 5 uniquement.
Là, je sèche.
Flavie
re bonjour
Je m'excuse pour tout ces messages, j'ai trouvé c'est : dla = wsa.Cells(Rows.Count, 1).End(xlUp).Row qu'il fallait modifier.
Initialement il y a avait 4...
Cela à l'air de fonctionner,
Il met les entêtes de colonnes Ligne 1 et Ligne 5, puis écrit les formules, puis créer l'import.
C'est top...
voici le code final :
Sub convertirv2()
Set wsa = Sheets("TCD EN VALEUR 62311")
dla = wsa.Cells(Rows.Count, 1).End(xlUp).Row
Set wsb = Sheets("import")
wsa.Range("D1:K1") = Array("D_PS", "", "", "", "D_AC ", "P_AMOUNT", "D_AC", "P_AMOUNT")
wsa.Range("C3:M3") = Array("RUB Vector", "Code SL vector", "Mt 62311 SAP", "Mt dans liasse", "Mt sans RFA", "D_AC", "PL1355", "D_AC", "PL1355", "Total nette", " écart SI SF")
wsa.Range("C5:C" & dla) = "PL1355"
wsa.Range("D5:D" & dla).FormulaR1C1 = _
"=VLOOKUP(RC[-3],'liste stes groupe 29102014'!C[-1]:C[2],4,FALSE)"
wsa.Range("E5:E" & dla).FormulaR1C1 = _
"=RC[-3]/1000"
wsa.Range("F5:F" & dla).FormulaR1C1 = _
"=(SUMIFS('LIASSE SI'!C[-3],'LIASSE SI'!C[-4],RC[-2],'LIASSE SI'!C[-5],RC[-3]))/1000"
wsa.Range("G5:G" & dla).FormulaR1C1 = _
"=RC[-1]-RC[-2]"
wsa.Range("H5:H" & dla) = _
"PL1355"
wsa.Range("I5:I" & dla).FormulaR1C1 = _
"=IF(RC[-3]=0,RC[-4],IF(RC[-3]<RC[-4],RC[-4],RC[-3]))"
wsa.Range("J5:J" & dla) = _
"PL1315"
wsa.Range("K5:K" & dla).FormulaR1C1 = _
"=IF(RC[-5]=0,-RC[-6],IF(RC[-5]<RC[-6],RC[-4],0))"
wsa.Range("L5:L" & dla).FormulaR1C1 = _
"=RC[-3]+RC[-1]"
wsa.Range("M5:M" & dla).FormulaR1C1 = _
"=RC[-7]-RC[-1]"
dlb = wsb.Cells(Rows.Count, 1).End(xlUp).Row
With wsb
.Cells.ClearContents
.Range("A1:J1") = Array("D_CA", "D_DP", "D_PE", "D_RU", "D_AC", "D_FL", "D_CU", "D_PS", "P_AMOUNT", "D_AU")
dlb = 1
For j = 0 To 1
For i = 5 To dla
If Not Application.WorksheetFunction.IsNA(wsa.Cells(i, 4)) Then
dlb = dlb + 1
.Cells(dlb, 1) = "ACTUAL"
.Cells(dlb, 2) = DateValue("01/07/2015")
.Cells(dlb, 2).NumberFormat = "yyyy.mm"
.Cells(dlb, 2).Copy .Cells(dlb, 3)
.Cells(dlb, 4) = "S2000"
.Cells(dlb, 5) = wsa.Cells(i, 4)
.Cells(dlb, 6) = "F99"
.Cells(dlb, 7) = "EURO"
.Cells(dlb, 8) = wsa.Cells(i, 8 + j * 2)
.Cells(dlb, 9) = wsa.Cells(i, 9 + j * 2)
.Cells(dlb, 10) = "0LOC01"
End If
Next i
Next j
End With
End Sub
Un regard avisé ne serait pas du luxe...
Merci beaucoup...
Flavie
Bonjour H2s04,
Je me permet de te recontacter pour la macro que tu as gentillement construit pour moi.
Je fais des test (en direct live) en ce moment et je rencontre une difficulté.
Lorsque mes formules des colonnes D à F retraitent les données des colonnes A à C, le résultat provoque parfois des doublons (logique). Je peux avoir deux lignes avec la même donné en colonne A et B mais avec un montant différent en colonne C.
Ce que je souhaiterais c'est que le fichier d'import crée une ligne et fasse la somme(et non 2 lignes identiques avec des montant différents).
Car dans le logiciel dans lequel j'importe ces données, il ne prend que la première ligne (et du coup le montant est erroné).
Je joins un exemple de ce que génère mes formules et du résultat que je souhaite dans le fichier d'import.
Est ce que c'est possible d'ajouter dans la macro qui fait le fichier d'import cette "formule"?
Bien à toi
Flavie
NB : la macro est la première que tu as fait du fichier "exemple" avec ajout des formules en automatique.
Bonjour,
voici une macro qui fait la somme des lignes ayant le même D_AC, pour faciliter la sommation les données sont d'abord triées sur le champ D_AC, ce qui donne un résultat légèrement différent du résultat attendu.
Sub somme_DAC()
With Sheets("feuil2")
dl = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("A1:J" & dl).Sort key1:=.Range("E1"), order1:=xlAscending, Header:=xlYes
olddac = .Cells(dl, "E")
dl = dl - 1
While dl > 1
If olddac <> .Cells(dl, "E") Then
olddac = .Cells(dl, "E")
Else
.Cells(dl, "i") = .Cells(dl, "i") + .Cells(dl + 1, "i")
.Rows(dl + 1).Delete shift:=xlUp
End If
dl = dl - 1
Wend
End With
End Sub
J'ai 2 petites questions :
la macro fait la somme si D_AC et D_Ps sont identiques?
je lance la seconde macro après avoir obtenu le résultat de la macro "convertir"?
FLAVIE a écrit :J'ai 2 petites questions :
la macro fait la somme si D_AC et D_Ps sont identiques?
macro faisant la somme pour un même D_AC et même D_PS
Sub somme_DAC()
With Sheets("feuil2")
dl = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("A1:J" & dl).Sort key1:=.Range("E1"), order1:=xlAscending, key2:=.Range("H1"), order2:=xlAscending, Header:=xlYes
olddac = .Cells(dl, "E") & .Cells(dl, "H")
dl = dl - 1
While dl > 1
If olddac <> .Cells(dl, "E") & .Cells(dl, "H") Then
olddac = .Cells(dl, "E") & .Cells(dl, "H")
Else
.Cells(dl, "i") = .Cells(dl, "i") + .Cells(dl + 1, "i")
.Rows(dl + 1).Delete shift:=xlUp
End If
dl = dl - 1
Wend
End With
End Sub
je lance la seconde macro après avoir obtenu le résultat de la macro "convertir"?
oui
Encore une fois c'est parfait !! magnifique !!
merci beaucoup...
tu donnes pas des cours des fois? lol
Je te remercie beaucoup