Erreur de syntaxe
J'ai corrigé mais si je mets la première ligne à zéro tout se met à zéro!
Dans le Else, j'ai écrit le code suivant :
With Range(Cells(LgTablo(K), j + 1), Cells(LgTablo(K + 1), j + 1))
.Formula = 0
.Value = .Value
End With
With Range(Cells(LgTablo(K), j + 2), Cells(LgTablo(K + 1), j + 2))
.Formula = 0
.Value = .Value
End With
With Range(Cells(LgTablo(K), j + 3), Cells(LgTablo(K + 1), j + 3))
.Formula = 0
.Value = .Value
End With
With Range(Cells(LgTablo(K), j + 4), Cells(LgTablo(K + 1), j + 4))
.Formula = 0
.Value = .Value
End WithSi je comprend bien, dans ce code, je mets toutes les lignes égales à zéro quelques soit la valeur de AB modulo 5.
Sauf que je ne sais pas comment faire pour dissocier chaque ligne les unes des autres! Merci pour votre aide!
Bonjour
Soit tu vérifies si c'est un nombre
If Cells(LgTablo(K), j) <> 0 Then...Soit tu vérifies une chaine de caractères
If Cells(LgTablo(K), j) <> "" Then...Je ne sais pas ce qu'il faut que tu fasses
Pour la syntaxe du if je suis d'accord! Il faut vérifier que c'est bien un nombre!
Par contre ce sont les lignes de code en dessous qui mettent qui mettent les cases des quatre colonnes suivantes à zéro qui ne fonctionnent pas!
Si je mets la première ligne du bloc à zéro tout le bloc s'annule. Sauf que je veux tester ligne par ligne!
Bonjour
Donc dans le Else tu veux mettre les 4 colonnes à 0
Essayes
Range(Cells(LgTablo(K), j + 1), Cells(LgTablo(K + 1), j + 4)).Value = 0j'ai du mal m'exprimer! Je te fais un exemple :
AB AC AD AE AF
Ligne 8 : 1
Ligne 9 : 0
La colonne AB peut prendre des valeurs comprises entre 0 et 1 différentes pour chaque ligne.
Je veux que lorsque la cellule AB8 est nulle les cellules AC8, AD8, AE8 et AF8 soit égale à zéro.
Attention cela n'est un exemple simple! Concrètement je veux appliquer cela à toutes les colonnes AB modulo 5. Merci
Bonjour,
La condition qui provoque la mise à jour de toutes les lignes d’un bloc est établie avec la première cellule de ce bloc.
Exemple avec le bloc AB8 :AF90 qui est conditionnée par la valeur de AB8.
If Cells(8, 28) <> 0 Then
<Traitement 1 de toutes les lignes du bloc>
else
<Traitement 2 de toutes les lignes du bloc >
end ifSi tu souhaites effectuer un traitement différencié par ligne, il faut que tu établisses une condition par ligne.
A+
Je vois ce que tu veux dire!
Mais je ne sais pas trop comment l'appliquer, afin de tester chaque ligne du bloc c'est à dire chaque cellule de la colonne AB modulo 5 compris entre LgTablo(K) et LgTablo(K+1).
Voici mon code là où j'en suis :
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 = "=C" & LgTablo(K) & "*" & Cells(LgTablo(K), j).Address(rowabsolute:=False, columnabsolute:=False)
.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
Range(Cells(LgTablo(K), j + 1), Cells(LgTablo(K + 1), j + 4)).Value = 0
With Range(Cells(LgTablo(K), j + 1), Cells(LgTablo(K + 1), j + 1))
.Formula = 0
.Value = .Value
End With
With Range(Cells(LgTablo(K), j + 2), Cells(LgTablo(K + 1), j + 2))
.Formula = 0
.Value = .Value
End With
With Range(Cells(LgTablo(K), j + 3), Cells(LgTablo(K + 1), j + 3))
.Formula = 0
.Value = .Value
End With
With Range(Cells(LgTablo(K), j + 4), Cells(LgTablo(K + 1), j + 4))
.Formula = 0
.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
Cells(545, j + 1).Value = Application.Sum(Range(Cells(8, j + 1), Cells(543, j + 1)))
Next j
Next KDésolé pour le doucle poste :
je pensais à quelques choses du style :
If range (Cells(LgTablo(K),j),Cells(LgTablo(K+1),j))<> 0 then...Mais cela ne fonctionne pas
Ou encore du genre :
With range (Cells(LgTablo(K),j),Cells(LgTablo(K+1),j))
if . Value <>0 then
action 1
Else
action 2
end if
End WithMais cela aussi ne fonctionne pas!
Bonjour
Si je comprends
Modifies tes formules
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 = "=IF(" & Cells(LgTablo(K), J).Address(rowabsolute:=False) & "=0,0,C" & LgTablo(K) & " * " & Cells(LgTablo(K), J).Address(rowabsolute:=False, columnabsolute:=False) & ")"
.Value = .Value
End With
With Range(Cells(LgTablo(K), J + 2), Cells(LgTablo(K + 1), J + 2))
.Formula = "=IF(" & Cells(LgTablo(K), J).Address(rowabsolute:=False) & "=0,0,D" & LgTablo(K) & ")"
.Value = .Value
End With
With Range(Cells(LgTablo(K), J + 3), Cells(LgTablo(K + 1), J + 3))
.Formula = "=IF(" & Cells(LgTablo(K), J).Address(rowabsolute:=False) & "=0,0,E" & LgTablo(K) & ")"
.Value = .Value
End With
With Range(Cells(LgTablo(K), J + 4), Cells(LgTablo(K + 1), J + 4))
.Formula = "=IF(" & Cells(LgTablo(K), J).Address(rowabsolute:=False) & "=0,0,F" & LgTablo(K) & ")"
.Value = .Value
End With
End If
With Range(Cells(LgTablo(K), "II"), Cells(LgTablo(K + 1), "II"))Merci beaucoup pour ton aide.