Créer Feuil1 de la Feuil2

Bonjour à tous,

Voila cela fait quelque jours que je cherche une solution à mon problème, mais malheureusement mes connaissances en VBA sont trop mince et je n'y arrive pas.

Je voudrais créer une FeuilB à l'aide des données de la FeuilA.

J'ai tenté via l'enregistreur de macro, mais le nombre de ligne étant variable cela ne fonctionne pas correctement.

La feuilB doit avoir exactement cette architecture car elle sera importée dans un logiciel.

La feuilA alimente les colonnes E, H & I de la feuilB.

Les colonnes A,D,F,G & J contiennent des données fixes.

Les colonnes B & C une période qui change chaque mois (AAAA.MM).

Je joins mon exemple à mon message.

Peut être que quelqu'un a déjà fait cette demande mais je n'ai pas trouvé sur le forum,

je vous remercie d'avance pour votre aide,

Flavie

18exemple.xlsx (42.70 Ko)

Bonjour,

une proposition

Sub convertir()
    Set wsa = Sheets("feuila")
    Set wsb = Sheets("feuilb")
    dla = wsa.Cells(Rows.Count, 4).End(xlUp).Row
    dlb = wsb.Cells(Rows.Count, 1).End(xlUp).Row
    With wsb
        .Range(.Cells(2, 1), .Cells(dlb, 10)).ClearContents
        dlb = 1
        For i = 9 To dla
            If wsa.Cells(i, 4) <> "" Then
                dlb = dlb + 1
                .Cells(dlb, 1) = "ACTUAL"
                .Cells(dlb, 2) = "2015.7"
                .Cells(dlb, 3) = .Cells(dlb, 2)
                .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, 6)
                .Cells(dlb, 9) = wsa.Cells(i, 5)
                .Cells(dlb, 10) = "0LOC01"
            End If
        Next i
    End With
End Sub

Bonjour et un grand merci pour ta réponse,

Je viens de tester et cela fonctionne, seul bmol, les entêtes des colonnes de la feuilleb ont disparu, est il possible de les ajouter dans la macro? et le format de la date doit être AAAA.MM.

Petite question, quelque soit le nombre de lignes de la feuilA cela va fonctionner?

en tout cas merci déjà un grand pas !!

Flavie

re-bonjour,

macro adaptée, devrait fonctionner quel que soit le nombre de lignes en feuilA

faute de pouvoir déterminer la date qu'il faut mettre en colonne B et C, j'en ai fait une constante "2015.07"

Sub convertir()
    Set wsa = Sheets("feuila")
    Set wsb = Sheets("feuilb")
    dla = wsa.Cells(Rows.Count, 4).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 i = 9 To dla
            If wsa.Cells(i, 4) <> "" Then
                dlb = dlb + 1
                .Cells(dlb, 1) = "ACTUAL"
                .Cells(dlb, 2) = "2015.07"
                .Cells(dlb, 3) = .Cells(dlb, 2)
                .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, 6)
                .Cells(dlb, 9) = wsa.Cells(i, 5)
                .Cells(dlb, 10) = "0LOC01"
            End If
        Next i
    End With
End Sub

tu es génial !!

Encore un petit bmol, tu as figé 2015.07 mais lors du lancement de la macro il apparaît 2015,07 dans le tableau.

Quel caractère faut il mettre pour avoir le point "." au lieu de la virgule ","?

re-bonjour,

essaie ceci

Sub convertir()
    Set wsa = Sheets("feuila")
    Set wsb = Sheets("feuilb")
    dla = wsa.Cells(Rows.Count, 4).End(xlUp).Row
    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 i = 9 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, 6)
                .Cells(dlb, 9) = wsa.Cells(i, 5)
                .Cells(dlb, 10) = "0LOC01"
            End If
        Next i
    End With
End Sub

magnifique !!

c'est parfait.

Ma macro de départ fonctionnait mais créer depuis l'enregistreur elle avait trop de limites.

J'avais en amont, demandé à cette macro, avant de copier la feuila vers la feuille b, de mettre des formules dans la feuila pour obtenir les colonnes D F et G;

Peux ton dire à la macro d'écrire les formules dans les colonnes d à f quelque soit le nombre de ligne? Car la encore avec l'enregistreur si le nombre est différent cela ne fonctionne pas jusqu'au bout.

Si tu veux bien, j'ajoute les formules en question sur la feuilA, (elles sont assez longues et il y avait surement plus simple, mais elles fonctionnent) si tu veux bien et que tu sais comment dire à la macro qu'elle complète les colonnes d à F (entête compris) de la feuilA toute seule...

En tout cas tu es trop fort, qu'est ce que j'aimerai maîtriser excel comme toi !!

je te remercie énormément déjà pour ton code c'est exactement ce que je voulais.


Ouspt j'ai du faire quelque chose qu'il fallait pas, cela a fonctionné 1 fois et là à chaque lancement elle se bloque à ce niveau :

If wsa.Cells(i, 4) <> "" Then

13exemple.xlsx (58.93 Ko)

Re-bonjour,

Peux-tu mettre une version de ton fichier avec la feuille 'test form' ?

le voici

14exemple2.xlsm (194.14 Ko)

Voici l'adaptation demandée

Sub convertir()
    Set wsa = Sheets("feuila")
    dla = wsa.Cells(Rows.Count, 1).End(xlUp).Row
    Set wsb = Sheets("feuilb")
    cheminmacro = "c:\users\quelquechose\macro"
    wsa.Range("D8:F8") = Array("D_CA", "P_AMOUNT", "D_PS")
    wsa.Range("D9:D" & dla).FormulaR1C1 = _
        "=IF(AND(RC[-3]=""as7100"",RC[-1]>0),RC[-3],IF(AND(RC[-3]=""as7140"",RC[-1]>0),RC[-3],IF(AND(RC[-3]=""PL1125""," & _
        "RC[-1]>0),RC[-3],IF(AND(RC[-3]=""PL1315"",RC[-1]>0),RC[-3],IF(AND(RC[-3]=""PL1320"",RC[-1]>0),RC[-3]," & _
        "IF(AND(RC[-3]=""PL1380"",RC[-1]>0),RC[-3],IF(AND(RC[-3]=""LI8100"",RC[-1]<0),RC[-3],IF(AND(RC[-3]=""LI8140"",RC[-1]<0)," & _
        "RC[-3],IF(AND(RC[-3]=""PL1120"",RC[-1]<0),RC[-3],IF(AND(RC[-3]=""PL1355"",RC[-1]<0),RC[-3],IF(AND(RC[-3]=""PL1385"",RC[-1]<0)," & _
        "RC[-3],VLOOKUP(RC[-3],'TAB CONV SIGNE VECTOR'!C[-3]:C[-1],3,FALSE))))))))))))"
    wsa.Range("E9:E" & dla).FormulaR1C1 = _
        "=IF(AND(RC[-1]=""as7100"",RC[-2]>0),ROUND(RC[-2]/1000,0),IF(AND(RC[-1]=""as7140"",RC[-2]>0),ROUND(RC[-2]/1000,0)," & _
        "IF(AND(RC[-1]=""pl1120"",RC[-2]<0),-ROUND(RC[-2]/1000,0),IF(AND(RC[-1]=""pl1125"",RC[-2]>0),-ROUND(RC[-2]/1000,0)," & _
        "IF(AND(RC[-1]=""pl1315"",RC[-2]<0),ROUND(RC[-2]/1000,0),IF((RC[-1]=""pl1340""),-ROUND(RC[-2]/1000,0)," & _
        "IF(AND(RC[-1]=""pl1355"",RC[-2]<0),-ROUND(RC[-2]/1000,0),IF(AND(RC[-1]=""pl1320"",RC[-2]>0),ROUND(RC[-2]/1000,0)," & _
        "IF(AND(RC[-1]=""pl1380"",RC[-2]>0),-ROUND(RC[-2]/1000,0),IF(AND(RC[-1]=""pl1385"",RC[-2]<0),-ROUND(RC[-2]/1000,0)," & _
        "IF(AND(RC[-1]=""li8100"",RC[-2]<0),-ROUND(RC[-2]/1000,0),IF(AND(RC[-1]=""li8140"",RC[-2]<0),-ROUND(RC[-2]/1000,0)," & _
        "IF(AND(RC[-1]=""pl1120"",RC[-2]<0),ROUND(RC[-2]/1000,0),IF(AND(RC[-1]=""pl1355"",RC[-2]<0),ROUND(RC[-2]/1000,0)," & _
        "IF(AND(RC[-1]=""pl1385"",RC[-2]<0),ROUND(RC[-2]/1000,0),IF((RC[-1]=""pl1340""),ROUND(RC[-2]/1000,0)," & _
        "IF((RC[-1]=""pl2275""),-ROUND(RC[-2]/1000,0),-ROUND(RC[-2]/1000,0))))))))))))))))))"
    wsa.Range("F9:F" & dla).FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(RC[-4],'TAB CONV SIGNE VECTOR'!C[4]:C[5],2,FALSE)),RC[-4],VLOOKUP(RC[-4],'TAB CONV SIGNE VECTOR'!C[4]:C[5],2,FALSE))"
    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 i = 9 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, 6)
                .Cells(dlb, 9) = wsa.Cells(i, 5)
                .Cells(dlb, 10) = "0LOC01"
            End If
        Next i
    End With
End Sub

Whoua !

Rapide et efficace,

Je viens de tester,

J'ai vidé les colonnes D à F de la feuilA et vidé la feuilB, j'ai lancé ton code et tout à fonctionné.

Tu es trop fort !!

Je te remercie beaucoup,

Bonne fin de journée à toi

et sincèrement encore merci

Flavie

Bonjour,

Toujours dans le même esprit, j'ai des retraitements à faire après le 1er import de la Feuilb du premier fichier.

Je souhaite donc créer (dans un autre classeur) une nouvelle feuilb (Import) qui à l'intégration aura pour but de remplacer les valeurs initiales.

La trame du tableau d'import est identique, mais la source est un peu différente.

Serais tu faire le code pour obtenir le même résultat avec une source différente?

Toujours avec la problématique des données qui peuvent contenir plus ou moins de ligne selon les périodes.

Je joins le fichier.

Source : onglet [tcd en valeur] (les colonnes en bleu sont les données à importer qui vont alimenter l'onglet import),

Merci pour l'aide précieuse.


bonsoir,

pas de fichier

Bonjour,

Voici le fichier.

1362311000-v2.xlsx (52.89 Ko)

Bonjour,

si j'ai bien compris

Sub convertir()
    Set wsa = Sheets("TCD EN VALEUR 62311")
    Set wsb = Sheets("import")
    dla = wsa.Cells(Rows.Count, 4).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 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

C'est tout à fait cela, merci beaucoup !!

Re Bonjour h2s04,

Encore une petite requête, je suppose qu'il est également possible (mais peut être la retranscription en VBA est fastidieuse) pour celle ci d'ajouter les formules en automatique sur la feuille "TCD en valeur" dans les colonnes C à M?

Sur le fichier que j'ai posté, j'ai volontairement supprimé la formule de la colonne D, car elle fait référence à une table et le fichier était trop gros (>300), la formule est celle ci : =RECHERCHEV(A5;'liste stes groupe 29102014'!C:F;4;FAUX).

Comme pour le précédent les valeurs des colonnes A et B peuvent contenir plus ou moins de lignes.

Je te remercie d'avance pour ton aide précieuse.

Flavie

J'ai essayé de faire le code grâce à celui que tu avais fait pour le précédent fichier, mais cela ne fonctionne pas.

message "erreur de compilation".

Voici le code :

Sub convertirv2()
    Set wsa = Sheets("TCD EN VALEUR 62311")
    Set wsb = Sheets("import")
    dla = wsa.Cells(Rows.Count, 4).End(xlUp).Row
[b]cheminmacro = "c:\users\quelquechose\macro"
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[-4],'liste stes groupe 29102014'!C[3] :C[6],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[2],RC[-2],'LIASSE SI'!C[1],RC5-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]"[/b]
    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

qu'est ce que j'ai bien pu oublier?


Sub convertirv2()
    Set wsa = Sheets("TCD EN VALEUR 62311")
    Set wsb = Sheets("import")
    dla = wsa.Cells(Rows.Count, 4).End(xlUp).Row
cheminmacro = "c:\users\quelquechose\macro"
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[-4],'liste stes groupe 29102014'!C[3] :C[6],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[2],RC[-2],'LIASSE SI'!C[1],RC5-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

Pardon c'est celui la, dans l'autre j'ai voulu matérialiser ce que j'ai ajouté "en gra"s et cela s'est écrit dans le code.

Bonsoir,

essaie ceci

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[-4],'liste stes groupe 29102014'!C[3] :C[6],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[2],RC[-2],'LIASSE SI'!C[1],RC5-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

bonjour,

J'ai testé et ajouté les "=" au début des formules,

Autres problèmes: il écrit toutes les formules à partir de la ligne 1 au lieu de la ligne 5

- en colonne D

"=VLOOKUP(RC[-4],'liste stes groupe 29102014'!C[1]:C[3],4,FALSE)" est traduit ainsi : =RECHERCHEV(XFD4;'liste stes groupe 29102014'!E:G;4;FAUX), au lieu de

=RECHERCHEV(A5;'liste stes groupe 29102014'!C:F;4;FAUX)

- en F elle traduit

=(SUMIFS('LIASSE SI'!C[3],'LIASSE SI'!C[2],RC[-2],'LIASSE SI'!C[1],RC[-3]))/1000" par =(SOMME.SI.ENS('LIASSE SI'!I:I;'LIASSE SI'!H:H;D5;'LIASSE SI'!G:G;C5))/1000, au lieu de =(SOMME.SI.ENS('LIASSE SI'!C:C;'LIASSE SI'!B:B;D5;'LIASSE SI'!A:A;C5))/1000

- en I la macro bloque sur :

wsa.Range("I5:I" & dla).FormulaR1C1 = _

"=IF(RC[-3]=0;RC[-4];IF(RC[-3]<RC[-4];RC[-4];RC[-3]))"

la formule était "=SI(F5=0;E5;SI(F5<E5;E5;F5))"

Voici le code en l'état actuel :

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[-4],'liste stes groupe 29102014'!C[1] :C[3],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[2],RC[-2],'LIASSE SI'!C[1],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
Rechercher des sujets similaires à "creer feuil1 feuil2"