Boucle if sur VBA
PurplePoulpe
-
mikanadien2 Messages postés 108 Date d'inscription Statut Membre Dernière intervention -
mikanadien2 Messages postés 108 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je commence sur VBA et, évidemment, je galère.
Le but est relativement simple: je voudrais conjuguer une fonction "IF" et une fonction "VALEUR CIBLE" dans une macro, afin qu'elle se fasse automatiquement et plusieurs fois de suite (afin de remplir un tableau);
L'idée est:
j'ai une donnée en ligne 22
De la valeur de cette donnée dépend la formule qui me permettra de calculer la ligne 29
Dans un cas (si la donnée ligne 22 est supérieure à 3000), la seule manière de calculer la donnée ligne 29 est d'utiliser une fonction "valeur-cible", portant sur les valeurs de la ligne 28, et ayant pour but de les ramener à 0.
J'ai donc:
For i = 5 To 26
If Cells(22, i) = 0 Then
Cells(28, i) = 0
ElseIf Cells(22, i) > 3000 Then
Cells(28, i).Select
ActiveSheet.Cells(28, i).GoalSeek Goal:=0, ChangingCell:=ActiveSheet.Cells(29, i)
Else
Cells(29, i) = 16 / Cells(22, i)
End If
Next
End Sub
Or, VBA n'apprécie pas du tout ma ligne ElseIf (et apparemment, pas trop non plus ma ligne ActiveSheet..., même si je ne suis pas encore allé jusque là); quelqu'un aurait il une idée ??
Merci d'avance !!
je commence sur VBA et, évidemment, je galère.
Le but est relativement simple: je voudrais conjuguer une fonction "IF" et une fonction "VALEUR CIBLE" dans une macro, afin qu'elle se fasse automatiquement et plusieurs fois de suite (afin de remplir un tableau);
L'idée est:
j'ai une donnée en ligne 22
De la valeur de cette donnée dépend la formule qui me permettra de calculer la ligne 29
Dans un cas (si la donnée ligne 22 est supérieure à 3000), la seule manière de calculer la donnée ligne 29 est d'utiliser une fonction "valeur-cible", portant sur les valeurs de la ligne 28, et ayant pour but de les ramener à 0.
J'ai donc:
For i = 5 To 26
If Cells(22, i) = 0 Then
Cells(28, i) = 0
ElseIf Cells(22, i) > 3000 Then
Cells(28, i).Select
ActiveSheet.Cells(28, i).GoalSeek Goal:=0, ChangingCell:=ActiveSheet.Cells(29, i)
Else
Cells(29, i) = 16 / Cells(22, i)
End If
Next
End Sub
Or, VBA n'apprécie pas du tout ma ligne ElseIf (et apparemment, pas trop non plus ma ligne ActiveSheet..., même si je ne suis pas encore allé jusque là); quelqu'un aurait il une idée ??
Merci d'avance !!
Mon tableau va uniquement de la colonne E à Z, donc oui, il s'agit de traiter ces colonnes seulement...
Ensuite.... bah c'est un peu tordu mais, en gros, en appelant A, B et C mes 3 variables (resp. ligne 22, 28 et 29):
si A =0, B et C =0 (premier if)
si A<=3000, C=16/A (else de fin)
si A>3000, C est calculé de manière à ce que B soit nul....
Voilà, j'espère que c'est plus clair comme ça !!
T embete pas, fait le en 3 if differents...
For i = 5 To 26
If A = 0 Then
B = ""
C = 0
End If
If (A < 3000 or A = 3000) and A > 0 Then
B = ""
C = 16/A
End If
If A > 3000 Then
B = 0 'Ou alors ton calcul en question ici
C = ""
End If
Cells(22, i).text = A
Cells(28, i).text = B
Cells(29, i).text = C
Next
Ca suffit comme ca non ?
Merci en tout cas pour le coup de main !!
essaie plutot un ElseIf Cells(22, i).value
Quant au ActiveSheet.Cells(28, i).GoalSeek
Tu peux supprimer le activesheet...
Les macros aiment pas quant y a deux methodes sur la meme ligne,,,
Cdt
Bref, je crois que je vais me contenter d'enchaîner les If, ca a l'air achment plus simple hehe
Encore une fois, merci pour l'aide