Boucle for/if pour appliquer un calcul dans une matrice Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
s
saphya
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 4 mai 2019
Version d'Excel : 2010

Message par saphya » 10 mai 2019, 11:46

Hello hello :D

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 :lole:

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 :oops:

Bonne journée/soirée !!!!!!
Classeur2.xlsx
(24.15 Kio) Téléchargé 4 fois
A
AlgoPlus
Membre fidèle
Membre fidèle
Messages : 468
Appréciations reçues : 36
Inscrit le : 27 février 2019
Version d'Excel : 2003

Message par AlgoPlus » 10 mai 2019, 12:58

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+
1 membre du forum aime ce message.
Avatar du membre
Dan
Modérateur
Modérateur
Messages : 5'872
Appréciations reçues : 76
Inscrit le : 27 avril 2007
Version d'Excel : 2010, 2000, Mac 2004, 2011

Message par Dan » 10 mai 2019, 13:00

Bonjour

Pourquoi voulez vous faire cela par code VBA ??

Cordialement
1 membre du forum aime ce message.
@+ Dan ;)
s
saphya
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 4 mai 2019
Version d'Excel : 2010

Message par saphya » 10 mai 2019, 14:31

AlgoPlus a écrit :
10 mai 2019, 12:58
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 ::D
s
saphya
Jeune membre
Jeune membre
Messages : 13
Inscrit le : 4 mai 2019
Version d'Excel : 2010

Message par saphya » 10 mai 2019, 14:33

Dan a écrit :
10 mai 2019, 13:00
Bonjour

Pourquoi voulez vous faire cela par code VBA ??

Cordialement
Salut :)
Je le fais par code Vba car je dois faire ce traitement de plusieurs fichiers :lole:
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message