Boucle for/if pour appliquer un calcul dans une matrice
Hello hello
Déjà je ne sais pas si mon titre est parleur et expose vraiment bien mon problème
Alors, j'ai un problème technique que je n'arrive pas résoudre, et qui m'empêcher d'avancer dans mon projet.
Donc me voila, sur ce forum, vous demandant gentiment votre précieuse aide.
Je suis novice, soyez indulgent svp
J'ai joint le fichier pour que vous puissiez visualiser mon problème.
Mon problème est le suivant:
je voudrais appliquer le calcul suivant :
=ARRONDI(SI(transition2!B2<2;0;0,5804*transition2!B2*transition2!B2-0,3587*transition2!B2+29,29);0)
à toutes les cellules de ma matrice de ma feuille recap (comme je l'ai montré dans mon fichier)
Je peux résoudre mon problème avec cette fameuse commande:
.Range("B21").AutoFill Destination:=.Range("B21:Y21"), Type:=xlFillDefault
Mais c'est un peu, voir bcp répétitif et surtout manque de "polyvalence".
J'ai essayé de trouver une boucle qui puisse faciliter ce travail, mais en vain, la seule idée que j'ai trouvé et qui ne marche pas évidemment est la suivante (de plus je n'arrive pas à trouver un moyen d'arrondir):
Sub uno()
'boucle for
Dim i, j, k, l As Integer 'correspondant au position des cellules
'fonction if
'la formule de l'équation
'Q=0.5804h^2 - 0.3587h + 29.29
'cette equation est variable donc je déclare les 3 variables
Dim variable1, variable2, variable3 As Single
variable1 = 0.5804
variable2 = 0.3587
variable3 = 29.29
'boucle
'i et j correspondant aux cellules/valeurs de la matrice feuille transition2 qui vont être utilisé pour le calcul: cellule(i,j)
For i = 2 To Sheets("transition2").Range("B" & Rows.Count).End(xlUp).Row 'pour les lignes 2 à dernière ligne de colonne B (exemple fichier: B2:B32)
For j = 2 To 25 'pour les colonnes 2 à 25 (B:Y)
'k et l correspondant aux cellules de la matrice feuille recap qui vont correspondre à l'emplacement des résultats du calcul
For k = 21 To Worksheets("recap").Range("A" & Rows.Count).End(xlUp).Row 'nombre de ligne aussi variable
For l = 2 To 25 'colonnes
If Cells(i, j) < 2 Then 'si la valeur de la cellule de la matrice de la feuille transition2 est inférieur à 2
Worksheets("recap").Cells(k, l) = 0 'alors indiquer/appliquer 0 dans la cellule de la matrice de la feuille recap
' sinon appliquer la formule de l'équation (avec h = la valeur de la cellule feuille transition2), dans la cellule de la matrice de la feuille recap
'tel que :
Else: Num = (variable1 * Cells(i, j) * Cells(i, j)) - (variable2 * Cells(i, j)) + variable3
Worksheets("recap").Cells(k, l) = Num
End If
'et donc répéter ces étapes à toutes les cellules de la matrice de la feuille recap
'en utilisant les valeurs de celle de la feuille transition
Next
Next
Next
Next
End Sub
Voila, j'espère avoir bien exposé mon problème.
En espérant avoir une réponse positive de votre part
Bonne journée/soirée !!!!!!
Bonjour,
à tester:
Sub uno()
Dim i As Long, j As Integer 'correspondant au position des cellules
Dim LigR As Long, X As Single
Dim V1 As Single, V2 As Single, V3 As Single
Dim WT As Worksheet, WR As Worksheet
'la formule de l'équation
'Q=0.5804h^2 - 0.3587h + 29.29
'cette equation est variable donc je déclare les 3 variables
V1 = 0.5804
V2 = 0.3587
V3 = 29.29
LigR = 21 ' première ligne feuille Recap
Set WR = Worksheets("Recap")
Set WT = Worksheets("transition2")
'boucle
'i et j correspondant aux cellules/valeurs de la matrice feuille transition2 qui vont être utilisé pour le calcul: cellule(i,j)
For i = 2 To WT.Range("B" & Rows.Count).End(xlUp).Row 'pour les lignes 2 à dernière ligne de colonne B (exemple fichier: B2:B32)
For j = 2 To 25 'pour les colonnes 2 à 25 (B:Y)
If WT.Cells(i, j) < 2 Then 'si la valeur de la cellule de la matrice de la feuille transition2 est inférieur à 2
WR.Cells(LigR, j) = 0 'alors indiquer/appliquer 0 dans la cellule de la matrice de la feuille recap
' sinon appliquer la formule de l'équation (avec h = la valeur de la cellule feuille transition2), dans la cellule de la matrice de la feuille recap
'tel que :
Else
X = WT.Cells(i, j)
WR.Cells(LigR, j) = Round((V1 * X * X) - (V2 * X) + V3, 0)
End If
Next
LigR = LigR + 1
Next
End Sub
A+
Bonjour
Pourquoi voulez vous faire cela par code VBA ??
Cordialement
Bonjour,
à tester:
Sub uno() Dim i As Long, j As Integer 'correspondant au position des cellules Dim LigR As Long, X As Single Dim V1 As Single, V2 As Single, V3 As Single Dim WT As Worksheet, WR As Worksheet 'la formule de l'équation 'Q=0.5804h^2 - 0.3587h + 29.29 'cette equation est variable donc je déclare les 3 variables V1 = 0.5804 V2 = 0.3587 V3 = 29.29 LigR = 21 ' première ligne feuille Recap Set WR = Worksheets("Recap") Set WT = Worksheets("transition2") 'boucle 'i et j correspondant aux cellules/valeurs de la matrice feuille transition2 qui vont être utilisé pour le calcul: cellule(i,j) For i = 2 To WT.Range("B" & Rows.Count).End(xlUp).Row 'pour les lignes 2 à dernière ligne de colonne B (exemple fichier: B2:B32) For j = 2 To 25 'pour les colonnes 2 à 25 (B:Y) If WT.Cells(i, j) < 2 Then 'si la valeur de la cellule de la matrice de la feuille transition2 est inférieur à 2 WR.Cells(LigR, j) = 0 'alors indiquer/appliquer 0 dans la cellule de la matrice de la feuille recap ' sinon appliquer la formule de l'équation (avec h = la valeur de la cellule feuille transition2), dans la cellule de la matrice de la feuille recap 'tel que : Else X = WT.Cells(i, j) WR.Cells(LigR, j) = Round((V1 * X * X) - (V2 * X) + V3, 0) End If Next LigR = LigR + 1 Next End Sub
A+
GENIAL, ca marche super bien et j'ai tout compris !
Merciiiiii énormément, tu me facilites bcp l'avancement de mon projet