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 subBonjour à 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) <> " " ThenA+
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 KDans 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").ValuePareil 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").ValueIl 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 --->
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
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 WithPar :
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 WithCela 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 WithA+
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!
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 WithMerci 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...