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

6classeur3.xlsx (11.66 Ko)

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

Rechercher des sujets similaires à "creer feuil1 feuil2"