Erreur syntaxe dans macro

Salut à tous,

J'ai une macro que j'aimerais effectuer à répétition seulement il y a un problème de syntaxe et je n'arrive pas à comprendre comment le résoudre :

Voici ma formule et en jaune ce qui ne colle pas :

Sub RECAPMARGE()

For i = 1 To 100

Sheets("TRAME1").Select

Range("C3:D3").Select

ActiveCell.FormulaR1C1 = "='RECAP ACHATS'!RC[1]"

Range("C7:D7").Select

ActiveCell.FormulaR1C1 = "='RECAP ACHATS'!R[-3]C[2]"

Range("F7").Select

ActiveCell.FormulaR1C1 = "='RECAP ACHATS'!R[-3]C"

Range("F8").Select

ActiveCell.FormulaR1C1 = "='RECAP ACHATS'!R[-4]C*(1+'RECAP ACHATS'!R[-7]C[2])"

Range("F9").Select

Sheets("RECAP ACHATS").Select

Range("G4").Select

ActiveCell.FormulaR1C1 = "=TRAME1!R[-1]C[1]"

Range("E4:G4").Select

Selection.Copy

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Next

End Sub

Je sais que si je mets le chiffre [1] à la place du ça marche mais alors le principe de la répétition s'annule.

Si quelqu'un a une idée ça pourrait m'être plus qu'utile.

Merci beaucoup d'avance

Cordialement

Bonjour,

Essai de cette façon :

Sub RECAPMARGE()

    Dim I As Integer

    For I = 1 To 100

        With Worksheets("TRAME1")

            .Range("C3:D3").FormulaR1C1 = "='RECAP ACHATS'!R[" & I & "]C[1]"
            .Range("C7:D7").FormulaR1C1 = "='RECAP ACHATS'!R[-3]C[2]"
            .Range("F7").FormulaR1C1 = "='RECAP ACHATS'!R[-3]C"
            .Range("F8").FormulaR1C1 = "='RECAP ACHATS'!R[-4]C*(1+'RECAP ACHATS'!R[-7]C[2])"

        End With

        With Worksheets("RECAP ACHATS")

            .Range("G4").FormulaR1C1 = "=TRAME1!R[-1]C[1]"
            .Range("E4:G4").Value = .Range("E4:G4").Value

        End With

    Next I

End Sub

Hervé.

Essaye ceci

Range("C3:D3").Select
ActiveCell.FormulaR1C1 = "='RECAP ACHATS'!R[" & i & "]C[1]"

Bonjour,

Merci d'éviter les doublons

eric

Salut,

Merci pour ta réponse j'ai essayé mais je n'arrive pas au résultat que j'avais espérer.

J'ai modifier la formule mais j'ai encore des erreurs de syntaxe...

Si tu pouvais encore me donner un coup de main je suis preneur :

Sub RECAPMARGE()

Dim I As Integer

For I = 1 To 10

Sheets("TRAME1").Select

Range("C3:D3").Select

ActiveCell.FormulaR1C1 = ActiveWorkbook.[RECAP ACHATS].Cells(4, I + 3).Values

Range("C7:D7").Select

ActiveCell.FormulaR1C1 = ActiveWorkbook.[RECAP ACHATS].Cells(5, I + 3).Values

Range("F7").Select

ActiveCell.FormulaR1C1 = ActiveWorkbook.[RECAP ACHATS].Cells(6, I + 3).Values

Range("F8").Select

ActiveCell.FormulaR1C1 = ActiveWorkbook.[RECAP ACHATS].Cells(7, I + 3).Values

Sheets("RECAP ACHATS").Select

Range("H4").Select

ActiveCell.FormulaR1C1 = ActiveWorkbook.TRAME1.Cells(9, 3).Values

Range("E4:H4").Select

Selection.Copy

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Next I

End Sub

Le problème c'est qu'il me recopie la formule mais pas la valeur que je souhaite.

Merci bien encore.

Cordialement

Bonjour,

Pas testé, juste nettoyé.

Option Explicit
Sub RECAPMARGE()
Dim ws As Worksheet, ws2 As Worksheet
Dim I As Long

    Application.ScreenUpdating = False
    Set ws = Worksheets("TRAME1")
    Set ws2 = Worksheets("RECAP ACHATS")
    For I = 1 To 10
        With ws
            .Range("C3:D3") = ws2.Cells(4, I + 3)
            .Range("C7:D7") = ws2.Cells(5, I + 3)
            .Range("F7") = ws2.Cells(6, I + 3)
            .Range("F8") = ws2.Cells(7, I + 3)
        End With
        With ws2
            .Range("H4") = ws.Cells(9, 3)
            .Range("E4:H4") = .Range("E4:H4").Value
        End With
    Next I

    Set ws = Nothing: Set ws2 = Nothing
End Sub

Merci pour ton nettoyage. Il est nickel. J'ai compris ce qui fait que m'a macro ne fonctionne pas comme je le voudrais. Il me faudrait

à la place de H4, la possibilité de faire HN avec N étant le numéro de ligne avec N=I+3

Option Explicit

Sub RECAPMARGE()

Dim ws As Worksheet, ws2 As Worksheet

Dim I As Long

Dim N as Integer

N = I + 3

Application.ScreenUpdating = False

Set ws = Worksheets("TRAME1")

Set ws2 = Worksheets("RECAP ACHATS")

For I = 1 To 10

With ws

.Range("C3:D3") = ws2.Cells(4, I + 3)

.Range("C7:D7") = ws2.Cells(5, I + 3)

.Range("F7") = ws2.Cells(6, I + 3)

.Range("F8") = ws2.Cells(7, I + 3)

End With

With ws2

.Range("HN") = ws.Cells(9, 3)

.Range("E4:H4") = .Range("E4:H4").Value

End With

Next I

Set ws = Nothing: Set ws2 = Nothing

End Sub

J'ai cherché sur plusieurs forums mais je n'arrive pas à trouver la solution.

Merci encore.

Cordialement

Bonjour,

essaie :

.Cells(N,"H") = ws.Cells(9, 3)

eric

PS: appelle ta variable lig, ça aide à la clarté quand tu te repencheras dessus dans 6 mois.

Sub RECAPMARGE()

Dim ws As Worksheet, ws2 As Worksheet

Dim I As Long

Dim lig As Integer, x As Integer, y As Integer

Application.ScreenUpdating = False

Set ws = Worksheets("TRAME1")

Set ws2 = Worksheets("RECAPACHATS")

For I = 1 To 10

lig = I + 3

x = I - 4

y = I - 5

With ws

.Range("C3:D3") = ws2.Cells(I, 1)

.Range("C7:D7") = ws2.Cells(x, 2)

.Range("F7") = ws2.Cells(x, 0)

.Range("F8") = ws2.Cells(y, 1)

End With

With ws2

.Cells(lig, "H") = ws.Cells(3, 9)

.Range("E4:H4") = .Range("E4:H4").Value

End With

Next I

Set ws = Nothing: Set ws2 = Nothing

End Sub

En fait ma formule est la suivante, je coince encore avec la partie en couleur.

Merci encore

Cordialement

de rien...

Pardon, mais c'est vrai merci beaucoup pour le temps que vous y avez consacré.

Je remercie à chaque réponse eric.

Si je n'abuse pas de votre temps et de votre patience, j'ai juste une dernière requête qui fait que ma macro ne fonctionne pas.

With ws

.Range("C3:D3") = ws2.Cells(I, 1)

.Range("C7:D7") = ws2.Cells(x, 2)

C'est à ce niveau là. Je voudrais qu'il me sélectionne la ligne à la valeur de x = I - 4 et 2 colonnes plus loin.

Et merci encore.

Cordialement

Re,

La première cellule de la feuille correspond à Cells(1) ou Cells(1,1), soit A1.

Les valeurs de x et y doivent être >=1.

Pour l=1, x va prendre la valeur -3 et Cells(-3,2) génère une erreur.

Cdlt.

Merci bien pour ta réponse. J'ai compris ce que tu essaies de me dire, alors j'ai modifié mon code en partie mais voilà, je retombe sur erreur d'exécution 1004.

voici mon code modifié :

Sub RECAPMARGE()

Dim ws As Worksheet, ws2 As Worksheet

Dim I As Long

Dim lig As Long, I1 As Long, I2 As Long

Application.ScreenUpdating = False

Set ws = Worksheets("TRAME1")

Set ws2 = Worksheets("RECAPACHATS")

For I = 4 To 10

lig = I + 3

With ws

.Range("C3:D3") = ws2.Cells(I, 4)

.Cells("C7") = ws2.Cells(I + 1, 5)

.Range("F7") = ws2.Cells(I + 2, 0)

.Range("F8") = ws2.Cells(I + 2, 1)

End With

With ws2

.Cells(lig, "H") = ws.Cells(3, 8)

.Range("E4:H4") = .Range("E4:H4").Value

End With

Next I

Set ws = Nothing: Set ws2 = Nothing

End Sub

Le problème survient du I + 1 ou I + une valeur. Je voudrais mettre en place une récurrence pour qu'il aille à chaque fois à une case précise mais que cette case change en fonction de la valeur de I.

Cependant je n'arrive pas à en trouver le moyen. (La valeur de la colonne est fixe mais la valeur de la ligne est amenée à changer selon I).

Merci beaucoup et merci d'avance pour l'aide apportée

Cordialement

Re,

Voir code modifié et les commentaires.

Rappel : Cells(I+2,0) n'existe pas

Sub RECAPMARGE()
Dim ws As Worksheet, ws2 As Worksheet
Dim I As Long, lig As Long

    Application.ScreenUpdating = False
    Set ws = Worksheets("TRAME1")
    Set ws2 = Worksheets("RECAPACHATS")

    For I = 4 To 10
        lig = I + 3
        With ws
            .Range("C3:D3") = ws2.Cells(I, 4)
            .Range("C7") = ws2.Cells(I + 1, 5)  ' ou .Cells(7,3) ou .Cells(7,"C")
            .Range("F7") = ws2.Cells(I + 2, 0) ' Impossible
            .Range("F8") = ws2.Cells(I + 2, 1)
        End With
        With ws2
            .Cells(lig, "H") = ws.Cells(3, 8)
            .Range("E4:H4") = .Range("E4:H4").Value
        End With
    Next I

    Set ws = Nothing: Set ws2 = Nothing

End Sub

Merci pour ta réponse.

Donc ce n'est pas possible mais cela me gêne, il me faut cette récurrence pour raisons professionnelles.

Je mets en pièce jointe un fichier excel expliquant en détail l'action que j'essaie d'effectuer, avec de grosses difficultés je l'avoue.

Après, je m'excuse de vous demander autant d'aide mais je vous suis reconnaissant pour ce que vous avez fait pour moi déjà jusque là.

Merci encore

Cordialement

18merci-davance.xlsm (63.52 Ko)

Après 1 journée de recherche dessus, j'ai finalement eu la brillante idée de simplifier et de contourner le problème.

Merci encore à tous ceux qui ont contribué à m'aider.

Cordialement

Ta réponse répond exactement à mes attentes.

Merci beaucoup

Cordialement

Rechercher des sujets similaires à "erreur syntaxe macro"