1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
Sub bouclesumif()
Dim z, f, crit As Integer
Dim qa, qb, qt, qs, solution, niveau, prix As Range
'initialisation sur la range A2 des niveaux à chercher
f = 2
z = f + 1
Set qa = Cells(f, 1)
Set qb = Cells(z, 1)
'Critère de recherche pour le niveau 1
crit = 1
'Boucle sur le premier niveau 1 à trouver pour la première adresse du SUMIF
While qa <> ""
If qa.Value = crit Then
'Boucle sur le deuxième niveau 1 à trouver pour la deuxième adresse du SUMIF
While qb.Value <> crit Or qb.Value = ""
If qb.Value = crit Then
Else: z = z + 1
Set qb = Cells(z, 1)
End If
Wend
' fin de la deuxième boucle
'Redéfinition de l'adresse des Range qa,qb,qt,qs
Set qa = Cells(f, 1)
Set qb = Cells(z, 1)
Set qt = Cells(f, 9)
Set qs = Cells(z, 9)
'Compilation de l'adressage Niveau et Prix
Set niveau = Range(qa, qb)
Set prix = Range(qt, qs)
'Définition de la cellule où sera écrit la formule SUMIF
Set solution = Cells(f, 15)
solution.Select
'Réécriture de la formule complexe suivant méthodologie de Philippe Tulliez - www.developpez.net
Const myformula As String = "=SUMIF(niveau,crit2,prix)"
Dim crit2 As String
crit2 = 2
Dim newformula As String
newformula = Replace(myformula, "niveau", niveau.Address)
newformula = Replace(newformula, "crit2", crit2)
newformula = Replace(newformula, "prix", prix.Address)
solution.Formula = newformula
'Boucle pour chercher les niveau 1 suivant
z = z + 1
Set qb = Cells(z, 1)
End If
f = f + 1
Set qa = Cells(f, 1)
Wend
'fin de la première boucle
End Sub |
Partager