[VBA - Excel 2010] boucle de boucle
Résolu
Pyvoudelet
Messages postés
169
Date d'inscription
Statut
Membre
Dernière intervention
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Pour m eviter une longue formule dans une cellule je voulais faire une boucle. Mais meme avec ça, j'ai du mal a simplifier la formule.
Ci dessous vous trouverez la première partie de la boucle. Quelqu'un a t il une idee pour me simplifier cela???
Le problème c est que même décomposer ainsi cela ne marche pas. En effet, supposons que la cellule Sheets("COMP DB").Cells(comp_ligne, 13) (ligne 16) soit vide, sa valeur mat4_name est considérer comme "vide", ce qui me fait alors bugger la somme finale (ligne 29). Il faudrait donc qu'a chaque fois qu une cellule recherchée en début de bloc est vide, cela me renvoi une valeur = 0 pour pouvoir etre "pris en compte" dans ma somme.
Si qqn arrive a me faire une boucle pour m eviter les 7 bloc, ca serait magique! j ai essayer, mais la somme finale me gène......
<1> For i = 5 To 24
<2> comp_name = Sheets("imp_prod").Cells(i, 1).Value
<3> comp_ligne = Sheets("COMP DB").Columns("A").Find(comp_name).Row
<4> mat1_name = Sheets("COMP DB").Cells(comp_ligne, 7).Value
mat1_ligne = Sheets("MATERIALS").Columns("A").Find(mat1_name).Row
imp_mat1 = Sheets("MATERIALS").Cells(mat1_ligne, 4).Value
mat1_prop = Sheets("COMP DB").Cells(comp_ligne, 8).Value
<8> mat2_name = Sheets("COMP DB").Cells(comp_ligne, 9).Value
mat2_ligne = Sheets("MATERIALS").Columns("A").Find(mat2_name).Row
imp_mat2 = Sheets("MATERIALS").Cells(mat2_ligne, 4).Value
mat2_prop = Sheets("COMP DB").Cells(comp_ligne, 10).Value
<12> mat3_name = Sheets("COMP DB").Cells(comp_ligne, 11).Value
mat3_ligne = Sheets("MATERIALS").Columns("A").Find(mat3_name).Row
imp_mat3 = Sheets("MATERIALS").Cells(mat3_ligne, 4).Value
mat3_prop = Sheets("COMP DB").Cells(comp_ligne, 12).Value
<16> mat4_name = Sheets("COMP DB").Cells(comp_ligne, 13).Value
mat4_ligne = Sheets("MATERIALS").Columns("A").Find(mat4_name).Row
imp_mat4 = Sheets("MATERIALS").Cells(mat4_ligne, 4).Value
mat4_prop = Sheets("COMP DB").Cells(comp_ligne, 14).Value
<20>mat5_name = Sheets("COMP DB").Cells(comp_ligne, 15).Value
mat5_ligne = Sheets("MATERIALS").Columns("A").Find(mat5_name).Row
imp_mat5 = Sheets("MATERIALS").Cells(mat1_ligne, 4).Value
mat5_prop = Sheets("COMP DB").Cells(comp_ligne, 16).Value
<24> mat6_name = Sheets("COMP DB").Cells(comp_ligne, 17).Value
mat6_ligne = Sheets("MATERIALS").Columns("A").Find(mat6_name).Row
imp_mat6 = Sheets("MATERIALS").Cells(mat6_ligne, 4).Value
mat6_prop = Sheets("COMP DB").Cells(comp_ligne, 18).Value
<25> mat7_name = Sheets("COMP DB").Cells(comp_ligne, 19).Value
mat7_ligne = Sheets("MATERIALS").Columns("A").Find(mat7_name).Row
imp_mat7 = Sheets("MATERIALS").Cells(mat7_ligne, 4).Value
mat7_prop = Sheets("COMP DB").Cells(comp_ligne, 20).Value
<29> imp_comp = imp_mat1 * mat1_prop + imp_mat2 * mat2_prop + imp_mat3 * mat3_prop + imp_mat4 * mat4_prop + imp_mat5 * mat5_prop + imp_mat6 * mat6_prop + imp_mat7 * mat7_prop
<30> Next i
Merci d avance
NB: dsl de ne pas vous mettre le fichier source mais ca serait trop compliquÉ
Pour m eviter une longue formule dans une cellule je voulais faire une boucle. Mais meme avec ça, j'ai du mal a simplifier la formule.
Ci dessous vous trouverez la première partie de la boucle. Quelqu'un a t il une idee pour me simplifier cela???
Le problème c est que même décomposer ainsi cela ne marche pas. En effet, supposons que la cellule Sheets("COMP DB").Cells(comp_ligne, 13) (ligne 16) soit vide, sa valeur mat4_name est considérer comme "vide", ce qui me fait alors bugger la somme finale (ligne 29). Il faudrait donc qu'a chaque fois qu une cellule recherchée en début de bloc est vide, cela me renvoi une valeur = 0 pour pouvoir etre "pris en compte" dans ma somme.
Si qqn arrive a me faire une boucle pour m eviter les 7 bloc, ca serait magique! j ai essayer, mais la somme finale me gène......
<1> For i = 5 To 24
<2> comp_name = Sheets("imp_prod").Cells(i, 1).Value
<3> comp_ligne = Sheets("COMP DB").Columns("A").Find(comp_name).Row
<4> mat1_name = Sheets("COMP DB").Cells(comp_ligne, 7).Value
mat1_ligne = Sheets("MATERIALS").Columns("A").Find(mat1_name).Row
imp_mat1 = Sheets("MATERIALS").Cells(mat1_ligne, 4).Value
mat1_prop = Sheets("COMP DB").Cells(comp_ligne, 8).Value
<8> mat2_name = Sheets("COMP DB").Cells(comp_ligne, 9).Value
mat2_ligne = Sheets("MATERIALS").Columns("A").Find(mat2_name).Row
imp_mat2 = Sheets("MATERIALS").Cells(mat2_ligne, 4).Value
mat2_prop = Sheets("COMP DB").Cells(comp_ligne, 10).Value
<12> mat3_name = Sheets("COMP DB").Cells(comp_ligne, 11).Value
mat3_ligne = Sheets("MATERIALS").Columns("A").Find(mat3_name).Row
imp_mat3 = Sheets("MATERIALS").Cells(mat3_ligne, 4).Value
mat3_prop = Sheets("COMP DB").Cells(comp_ligne, 12).Value
<16> mat4_name = Sheets("COMP DB").Cells(comp_ligne, 13).Value
mat4_ligne = Sheets("MATERIALS").Columns("A").Find(mat4_name).Row
imp_mat4 = Sheets("MATERIALS").Cells(mat4_ligne, 4).Value
mat4_prop = Sheets("COMP DB").Cells(comp_ligne, 14).Value
<20>mat5_name = Sheets("COMP DB").Cells(comp_ligne, 15).Value
mat5_ligne = Sheets("MATERIALS").Columns("A").Find(mat5_name).Row
imp_mat5 = Sheets("MATERIALS").Cells(mat1_ligne, 4).Value
mat5_prop = Sheets("COMP DB").Cells(comp_ligne, 16).Value
<24> mat6_name = Sheets("COMP DB").Cells(comp_ligne, 17).Value
mat6_ligne = Sheets("MATERIALS").Columns("A").Find(mat6_name).Row
imp_mat6 = Sheets("MATERIALS").Cells(mat6_ligne, 4).Value
mat6_prop = Sheets("COMP DB").Cells(comp_ligne, 18).Value
<25> mat7_name = Sheets("COMP DB").Cells(comp_ligne, 19).Value
mat7_ligne = Sheets("MATERIALS").Columns("A").Find(mat7_name).Row
imp_mat7 = Sheets("MATERIALS").Cells(mat7_ligne, 4).Value
mat7_prop = Sheets("COMP DB").Cells(comp_ligne, 20).Value
<29> imp_comp = imp_mat1 * mat1_prop + imp_mat2 * mat2_prop + imp_mat3 * mat3_prop + imp_mat4 * mat4_prop + imp_mat5 * mat5_prop + imp_mat6 * mat6_prop + imp_mat7 * mat7_prop
<30> Next i
Merci d avance
NB: dsl de ne pas vous mettre le fichier source mais ca serait trop compliquÉ
A voir également:
- [VBA - Excel 2010] boucle de boucle
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Clé activation office 2010 gratuit - Télécharger - Sécurité
- Si ou excel - Guide
2 réponses
Essaie :
For i = 5 To 24 comp_name = Sheets("imp_prod").Cells(i, 1).Value comp_ligne = Sheets("COMP DB").Columns("A").Find(comp_name).Row For j = 7 To 19 Step 2 mat_name = Sheets("COMP DB").Cells(comp_ligne, j).Value mat_ligne = Sheets("MATERIALS").Columns("A").Find(mat_name).Row imp_mat = Sheets("MATERIALS").Cells(mat_ligne, 4).Value mat_prop = Sheets("COMP DB").Cells(comp_ligne, j + 1).Value imp_comp = imp_comp + imp_mat * mat_prop Next j Next i
Patrice