Erreur de syntaxe

Bonjour à tous,

Je viens vers vous car j'ai un problème de syntaxe dans le code qui suit!

j reprèsente un numéro de colonne.

J'ai deux problèmes :

- le premier je ne sais pas comment écrire la condition si la cellule (K,j) <> 0 . J'ai écrit cela mais j'obtiens erreur 1004 :

If Cells(LgTablo(K), j) <> "0" Then

- Lorsque la condition du dessus est respecté, je souhaiterai que dans la cellule situé en j+1 soit la multiplication de la valeur de la cellule (K,j) et de la cellule (K,C). Mais une fois de plus, j'ai une erreur de syntaxe.

.Formula = "=C" & LgTablo(K) & "*" & Cells(LgTablo(K), j)

je vous remercie par avance de votre aide =)

Voici le code entier. Je ne peux malheureusement pas partager le fichier, celui-ci est confidentiel.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim K As Integer
Dim LgTablo
Dim i As Long, j As Long

 LgTablo = Array(8, 90, 104, 162, 174, 181, 193, 197, 209, 263, 275, 321, 333, 357, 369, 378, 390, 396, 408, 463, 475, 490, 502, 514, 526, 527, 539, 542)

For K = 0 To UBound(LgTablo) Step 2
If Cells(LgTablo(K), j) <> " " Then
    For j = 28 To 238 Step 5
        'With Range(Cells(LgTablo(K), j + 1), Cells(LgTablo(K + 1), j + 1))
          '.Formula = "=C" & LgTablo(K) & "*" & Cells(LgTablo(K), j)
          '.Value = .Value
       'End With
        With Range(Cells(LgTablo(K), j + 2), Cells(LgTablo(K + 1), j + 2))
          .Formula = "=D" & LgTablo(K)
          .Value = .Value
        End With
        With Range(Cells(LgTablo(K), j + 3), Cells(LgTablo(K + 1), j + 3))
          .Formula = "=E" & LgTablo(K)
          .Value = .Value
        End With
        With Range(Cells(LgTablo(K), j + 4), Cells(LgTablo(K + 1), j + 4))
          .Formula = "=F" & LgTablo(K)
          .Value = .Value
        End With
        With Range(Cells(LgTablo(K), "II"), Cells(LgTablo(K + 1), "II"))
            .Formula = "=AB" & LgTablo(K) & "+ AG" & LgTablo(K) & "+ AL" & LgTablo(K) & "+ AQ" & LgTablo(K) & "+ AV" & LgTablo(K) & "+ BA" & LgTablo(K) & "+ BF" & LgTablo(K) & "+ BK" & LgTablo(K) & "+ BP" & LgTablo(K) & "+ BU" & LgTablo(K) & "+ BZ" & LgTablo(K) & "+ CE" & LgTablo(K) & "+ CJ" & LgTablo(K) & "+ CO" & LgTablo(K) & "+ CT" & LgTablo(K) & "+ CY" & LgTablo(K) & "+ DD" & LgTablo(K) & "+ DI" & LgTablo(K) & "+ DN" & LgTablo(K) & "+ DS" & LgTablo(K) & "+ DX" & LgTablo(K) & "+ EC" & LgTablo(K) & "+ EH" & LgTablo(K) & "+ EM" & LgTablo(K) & "+ ER" & LgTablo(K) & "+ EW" & LgTablo(K) & "+ FB" & LgTablo(K) & "+ FG" & LgTablo(K) & "+ FL" & LgTablo(K) & "+ FQ" & LgTablo(K) & "+ FV" & LgTablo(K) & "+ GA" & LgTablo(K) & "+ GF" & LgTablo(K) & "+ GK" & LgTablo(K) & "+ GP" & LgTablo(K) & "+ GU" & LgTablo(K) & "+ GZ" & LgTablo(K) & "+ HE" & LgTablo(K) & "+ HJ" & LgTablo(K) & "+ HO" & LgTablo(K) & "+ HT" & LgTablo(K) & "+ HY" & LgTablo(K) & "+ ID" & LgTablo(K)
            .Value = .Value
        End With
    Next j
Else
    For j = 28 To 238
        Cells(LgTablo(K), j + 1) = "0"
        Cells(LgTablo(K), j + 2) = "0"
        Cells(LgTablo(K), j + 3) = "0"
        Cells(LgTablo(K), j + 4) = "0"
        With Range(Cells(LgTablo(K), "II"), Cells(LgTablo(K + 1), "II"))
            .Formula = "=AB" & LgTablo(K) & "+ AG" & LgTablo(K) & "+ AL" & LgTablo(K) & "+ AQ" & LgTablo(K) & "+ AV" & LgTablo(K) & "+ BA" & LgTablo(K) & "+ BF" & LgTablo(K) & "+ BK" & LgTablo(K) & "+ BP" & LgTablo(K) & "+ BU" & LgTablo(K) & "+ BZ" & LgTablo(K) & "+ CE" & LgTablo(K) & "+ CJ" & LgTablo(K) & "+ CO" & LgTablo(K) & "+ CT" & LgTablo(K) & "+ CY" & LgTablo(K) & "+ DD" & LgTablo(K) & "+ DI" & LgTablo(K) & "+ DN" & LgTablo(K) & "+ DS" & LgTablo(K) & "+ DX" & LgTablo(K) & "+ EC" & LgTablo(K) & "+ EH" & LgTablo(K) & "+ EM" & LgTablo(K) & "+ ER" & LgTablo(K) & "+ EW" & LgTablo(K) & "+ FB" & LgTablo(K) & "+ FG" & LgTablo(K) & "+ FL" & LgTablo(K) & "+ FQ" & LgTablo(K) & "+ FV" & LgTablo(K) & "+ GA" & LgTablo(K) & "+ GF" & LgTablo(K) & "+ GK" & LgTablo(K) & "+ GP" & LgTablo(K) & "+ GU" & LgTablo(K) & "+ GZ" & LgTablo(K) & "+ HE" & LgTablo(K) & "+ HJ" & LgTablo(K) & "+ HO" & LgTablo(K) & "+ HT" & LgTablo(K) & "+ HY" & LgTablo(K) & "+ ID" & LgTablo(K)
            .Value = .Value
        End With
    Next j
End If
Next K

End sub

Bonjour à tous,

Je viens vers vous car j'ai un problème de syntaxe dans le code qui suit!

j reprèsente un numéro de colonne.

J'ai deux problèmes :

- le premier je ne sais pas comment écrire la condition si la cellule (K,j) <> 0 . J'ai écrit cela mais j'obtiens erreur 1004 :

If Cells(LgTablo(K), j) <> "0" Then

si c'est réellement ce que tu veux faire

If Cells(K, j) <> "0" Then

- Lorsque la condition du dessus est respecté, je souhaiterai que dans la cellule situé en j+1 soit la multiplication de la valeur de la cellule (K,j) et de la cellule (K,C). Mais une fois de plus, j'ai une erreur de syntaxe.

si c'est réellemet ce que tu veux faire. car si j'essaie de comprendre ce que ton code voudrait faire, ce serait plutôt d'essayer de mettre des formules dans les cellules, plutôt que le résultat d'un calcul.

cells(k,j+1)=cells(K,j)*cells(K,C)

Cela ne fonctionne pas! Merci quand même. J'arriveà erreur 1004.

Le K étant la composante d'un tableau la présence du "LgTablo" est obligatoire d'après ce que j'ai lu.

Bonjour,

Si tu exécutes ta procédure en mode pas à pas, tu peux constater qu’en entrée de boucle, K=0 , LgTablo(K)=8 et j=0

If Cells(8,0) ... produit naturellement une erreur 1004.

A+

Ok j'ai vu ca!

Mais je ne comprend pas pourquoi!

j est bien initialisé à 28.

Non, dans ton code j prend la valeur 28 après l'instruction

If Cells(LgTablo(K), j) <> " " Then

A+

Oups désolé j'avais pas mis la bonne version du code :

La voici :

For K = 0 To UBound(LgTablo) Step 2
    For j = 28 To 238 Step 5
        If Cells(LgTablo(K), j) <> "0" Then
            With Range(Cells(LgTablo(K), j + 1), Cells(LgTablo(K + 1), j + 1))
                .Formula = Cells(LgTablo(K), j).Value * Cells(LgTablo(K), "C").Value
                .Value = .Value
            End With
            With Range(Cells(LgTablo(K), j + 2), Cells(LgTablo(K + 1), j + 2))
                .Formula = "=D" & LgTablo(K)
                .Value = .Value
            End With
            With Range(Cells(LgTablo(K), j + 3), Cells(LgTablo(K + 1), j + 3))
                .Formula = "=E" & LgTablo(K)
                .Value = .Value
            End With
            With Range(Cells(LgTablo(K), j + 4), Cells(LgTablo(K + 1), j + 4))
                .Formula = "=F" & LgTablo(K)
                .Value = .Value
            End With
        Else
            Cells(LgTablo(K), j + 1) = "0"
            Cells(LgTablo(K), j + 2) = "0"
            Cells(LgTablo(K), j + 3) = "0"
            Cells(LgTablo(K), j + 4) = "0"
            End With
        End If
    Next j
Next K

Dans ce cas, en entrée de boucle K=0, LgTablo(K)=8 et j=28

Cells(LgTablo(K), j) est équivalent à Cells(8,28)

Je ne comprends pas l’erreur avec l’instruction

If Cells(LgTablo(K), j) <> "0" Then

À moins que tu sois en Option Base 1 auquel cas le premier indice du tableau est 1.

Il faudrait voir ton fichier.

A+

Je en sais pas pourquoi mais en effet l'erreur à disparue. Par contre, il y en a une nouvelle sur la ligne suivante :

.Formula = Cells(LgTablo(K), j).Value * Cells(LgTablo(K), "C").Value

Pareil erreur d'exécution 1004

Je ne sais pas pourquoi mais en effet l'erreur à disparue.

Il est peut-être urgent de faire exorciser ton PC. Les erreurs fantômes sont sans pitié.

Par contre, il y en a une nouvelle sur la ligne suivante :

.Formula = Cells(LgTablo(K), j).Value * Cells(LgTablo(K), "C").Value

J’ai beau lire et relire le code que tu as joint à ton post et je ne vois pas cette ligne. S’agit-il encore d’une farce d’esprit frappeur ?

A l’instinct, je dirais que si tu multiplies une valeur par une autre valeur, tu devrais obtenir une valeur et non pas une formule.

Alors pourquoi .Formula ?

A+

.Formula = Cells(LgTablo(K), j).Value * Cells(LgTablo(K), "C").Value

Il s'agit de la cinquième ligne du code.

J'ai déjà essayé ton idée mais ca ne fonctionne pas!

Il s'agit de la cinquième ligne du code.

Ça y est, j’ai vu (désolé, c’est lundi) !

J'ai déjà essayé ton idée mais ca ne fonctionne pas.

En exécutant ton code en pas à pas, tu devrais voir quel est l’élément qui est à l’origine de l’erreur (en supposant qu’il y ait une erreur).

Sans fichier pour effectuer le test, je ne peux pas faire grand chose.

A+

Merci quand même pour ton aide!

Ca y est il n'y a plus d'erreur! Vas savoir pourquoi!

Maintenant j'ai un autre soucis. je vous ai mis en pièce jointe une version light et non confidentiel du fichier sur le quel je travaille.

Le but de la macro que je suis entrain de réaliser travaille sur les colonnes AB à II.

Lorsque les cellules des colonnes AB modulo 5 sont égales :

  • à zéro les 4 colonnes suivantes deviennent nulles.
  • 0<=AB modulo 5<=1 --->
AC modulo 5 (i) = C (i)*AB modulo 5 (i) ;

AD modulo 5 (i)= D(i);

AE modulo 5 (i)= E(i)

AF modulo 5(i) = F(i)

La colonne II est la somme de tout les colonnes AB module 5

Les trois dernières colonnes se remplissent parfaitement mais pour AC modulo 5 rien ne marche, je ne comprens pas pourquoi.

Voici le code :

For K = 0 To UBound(LgTablo) Step 2
    For j = 28 To 238 Step 5
        If Cells(LgTablo(K), j) <> " " Then
            With Range(Cells(LgTablo(K), j + 1), Cells(LgTablo(K + 1), j + 1))
                .Formula = "=C" & LgTablo(K) * Cells(LgTablo(K), j)
                .Value = .Value
            End With
            With Range(Cells(LgTablo(K), j + 2), Cells(LgTablo(K + 1), j + 2))
                .Formula = "=D" & LgTablo(K)
                .Value = .Value
            End With
            With Range(Cells(LgTablo(K), j + 3), Cells(LgTablo(K + 1), j + 3))
                .Formula = "=E" & LgTablo(K)
                .Value = .Value
            End With
            With Range(Cells(LgTablo(K), j + 4), Cells(LgTablo(K + 1), j + 4))
                .Formula = "=F" & LgTablo(K)
                .Value = .Value
            End With
        Else
            Cells(LgTablo(K), j + 1) = 0
            Cells(LgTablo(K), j + 2) = "0.000"
            Cells(LgTablo(K), j + 3) = "0.000"
            Cells(LgTablo(K), j + 4) = "0.000"
            With Range(Cells(LgTablo(K), "II"), Cells(LgTablo(K + 1), "II"))
                .Formula = "=AB" & LgTablo(K) & "+ AG" & LgTablo(K) & "+ AL" & LgTablo(K) & "+ AQ" & LgTablo(K) & "+ AV" & LgTablo(K) & "+ BA" & LgTablo(K) & "+ BF" & LgTablo(K) & "+ BK" & LgTablo(K) & "+ BP" & LgTablo(K) & "+ BU" & LgTablo(K) & "+ BZ" & LgTablo(K) & "+ CE" & LgTablo(K) & "+ CJ" & LgTablo(K) & "+ CO" & LgTablo(K) & "+ CT" & LgTablo(K) & "+ CY" & LgTablo(K) & "+ DD" & LgTablo(K) & "+ DI" & LgTablo(K) & "+ DN" & LgTablo(K) & "+ DS" & LgTablo(K) & "+ DX" & LgTablo(K) & "+ EC" & LgTablo(K) & "+ EH" & LgTablo(K) & "+ EM" & LgTablo(K) & "+ ER" & LgTablo(K) & "+ EW" & LgTablo(K) & "+ FB" & LgTablo(K) & "+ FG" & LgTablo(K) & "+ FL" & LgTablo(K) & "+ FQ" & LgTablo(K) & "+ FV" & LgTablo(K) & "+ GA" & LgTablo(K) & "+ GF" & LgTablo(K) & "+ GK" & LgTablo(K) & "+ GP" & LgTablo(K) & "+ GU" & LgTablo(K) & "+ GZ" & LgTablo(K) & "+ HE" & LgTablo(K) & "+ HJ" & LgTablo(K) & "+ HO" & LgTablo(K) & "+ HT" & LgTablo(K) & "+ HY" & LgTablo(K) & "+ ID" & LgTablo(K)
                .Value = .Value
            End With
        End If
        With Range(Cells(LgTablo(K), "II"), Cells(LgTablo(K + 1), "II"))
            .Formula = "=AB" & LgTablo(K) & "+ AG" & LgTablo(K) & "+ AL" & LgTablo(K) & _
            "+ AQ" & LgTablo(K) & "+ AV" & LgTablo(K) & "+ BA" & LgTablo(K) & "+ BF" & LgTablo(K) & _
            "+ BK" & LgTablo(K) & "+ BP" & LgTablo(K) & "+ BU" & LgTablo(K) & "+ BZ" & LgTablo(K) & _
            "+ CE" & LgTablo(K) & "+ CJ" & LgTablo(K) & "+ CO" & LgTablo(K) & "+ CT" & LgTablo(K) & _
            "+ CY" & LgTablo(K) & "+ DD" & LgTablo(K) & "+ DI" & LgTablo(K) & "+ DN" & LgTablo(K) & _
            "+ DS" & LgTablo(K) & "+ DX" & LgTablo(K) & "+ EC" & LgTablo(K) & "+ EH" & LgTablo(K) & _
            "+ EM" & LgTablo(K) & "+ ER" & LgTablo(K) & "+ EW" & LgTablo(K) & "+ FB" & LgTablo(K) & _
            "+ FG" & LgTablo(K) & "+ FL" & LgTablo(K) & "+ FQ" & LgTablo(K) & "+ FV" & LgTablo(K) & _
            "+ GA" & LgTablo(K) & "+ GF" & LgTablo(K) & "+ GK" & LgTablo(K) & "+ GP" & LgTablo(K) & _
            "+ GU" & LgTablo(K) & "+ GZ" & LgTablo(K) & "+ HE" & LgTablo(K) & "+ HJ" & LgTablo(K) & _
            "+ HO" & LgTablo(K) & "+ HT" & LgTablo(K) & "+ HY" & LgTablo(K) & "+ ID" & LgTablo(K)
            .Value = .Value
        End With
    Next j
Next K
15exp.xlsm (239.19 Ko)

J'ai remplacé :

 With Range(Cells(LgTablo(K), j + 1), Cells(LgTablo(K + 1), j + 1))
.Formula = "=C" & LgTablo(K) * Cells(LgTablo(K), j)
.Value = .Value
End With

Par :

With Range(Cells(LgTablo(K), j + 1), Cells(LgTablo(K + 1), j + 1))
.Formula = Cells(LgTablo(K), "C") * Cells(LgTablo(K), j)
.Value = .Value
End With

Cela marche un peu mieux, sauf que toute la colonne AC modulo 5 prend la valeur de la première ligne. Et la condition if ne fonctionne plus.

Si quelqu'un a la solution, je le remercie par avance.

Essaie avec

For K = 0 To UBound(LgTablo) Step 2
    For j = 28 To 238 Step 5
        If Cells(LgTablo(K), j) <> "" Then
            With Range(Cells(LgTablo(K), j + 1), Cells(LgTablo(K + 1), j + 1))
                .Formula = "=C" & LgTablo(K) & "*" & Replace(Cells(LgTablo(K), j), ",", ".")
                .Value = .Value
            End With

A+

Ca marche bien pour les première colonne mais ca bloque au bout d'un moment. Err 1004. J'ai beau regardé, je ne vois pas d'où ca peu provenir!

J'ai essayé sur le fichier exp que j'ai posté et la même erreur apparait!

Je viens de faire le test avec ton fichier et je n'ai pas d'erreur 1004

13exp-1.xlsm (221.48 Ko)

A+

Bonjour

Juste une idée comme ça en passant

Remplaces la partie correspondante

            With Range(Cells(LgTablo(K), j + 1), Cells(LgTablo(K + 1), j + 1))
                '.Formula = "=C" & LgTablo(K) * Cells(LgTablo(K), j)
                .Formula = "=C" & LgTablo(K) & "*" & Cells(LgTablo(K), j).Address(rowabsolute:=False, columnabsolute:=False)
                .Value = .Value
            End With

Merci c'est exactement ce que je voulais!

Par contre ma fonction if ne fonctionne pas. Pourrais tu me dire pourquoi ?

If Cells(LgTablo(K), j) <> "0" Then...
Rechercher des sujets similaires à "erreur syntaxe"