Bonjour tout le monde,
Voila, j'ai une grande liste de relevé de mesures pour des habitations (R2000C30) macros constitué de boucles for qui déterminerons un paramètre en fonction d'un tableau de critère et mettrons en forme les divers résultats.
L'ensemble marche bien pour le moment mais est très long à l’exécution (5min)
Ma question étant de savoir s'il n'existe pas une méthode plus rapide pour ce genre de code :
J'ai pensé à séparer complètement les étapes de calculs et de rechercheV/copier mais je ne sais pas si cela sera utile...
Merci de votre attention
Bonne soirée à vous
Voila, j'ai une grande liste de relevé de mesures pour des habitations (R2000C30) macros constitué de boucles for qui déterminerons un paramètre en fonction d'un tableau de critère et mettrons en forme les divers résultats.
L'ensemble marche bien pour le moment mais est très long à l’exécution (5min)
Ma question étant de savoir s'il n'existe pas une méthode plus rapide pour ce genre de code :
Code:
End If
Next
End If
Next
End If
Next
End If
Next
x = n + 9
With Sheets("Résultat")
.Range("a" & n) = Sheets("Données").Range("e" & x) & "| " & Sheets("Données").Range("d" & x) & "| " & Sheets("Données").Range("c" & x) 'Adresse
.Range("b" & n) = Sheets("Données").Range("e" & x)
.Range("c" & n) = Sheets("Données").Range("d" & x)
.Range("d" & n) = Sheets("Données").Range("c" & x) 'N°
.Range("e" & n) = Sheets("Données").Range("b" & x) 'SG_id
.Range("f" & n) = "=VLOOKUP(RC1,'coord et surf corrigées'!R4C1:R787C13,3,FALSE)" 'X
.Range("g" & n) = "=VLOOKUP(RC1,'coord et surf corrigées'!R4C1:R787C13,4,FALSE)" 'Y
.Range("h" & n) = CDec(tot) '% simple
.Range("i" & n) = result 'Conso théorique estimé par le relevé
.Range("j" & n) = "=IF(RC[-2]=0,""Classe 0"",IF(RC[-1]<=45,""Classe A"",IF(RC[-1]<=75,""Classe B"",IF(RC[-1]<=85,""Classe C"",IF(RC[-1]<=100,""Classe D"",IF(RC[-1]<=155,""Classe E"",IF(RC[-1]<=225,""Classe F"",IF(RC[-1]<=280,""Classe G"",IF(RC[-1]<=355,""Classe H"",""Classe I"")))))))))" 'Classe
.Range("k" & n) = CDec(pourcMax) '% Max
.Range("l" & n) = resultMax 'Conso théorique maxi
.Range("m" & n) = "=IF(RC[-2]=0,""Classe 0"",IF(RC[-1]<=45,""Classe A"",IF(RC[-1]<=75,""Classe B"",IF(RC[-1]<=85,""Classe C"",IF(RC[-1]<=100,""Classe D"",IF(RC[-1]<=155,""Classe E"",IF(RC[-1]<=225,""Classe F"",IF(RC[-1]<=280,""Classe G"",IF(RC[-1]<=355,""Classe H"",""Classe I"")))))))))" 'Classe Max
.Range("n" & n) = CDec(pourcMax - tot) 'Ecart max
.Range("o" & n) = "=(VLOOKUP(RC1,'coord et surf corrigées'!R3C1:R787C13,13,FALSE))" 'Surface Sol
.Range("p" & n) = "=IFERROR(VLOOKUP(RC1,CadastreSolair!R1C1:R997C16,16,FALSE),0)" 'Surface 3D
.Range("q" & n) = CByte(Sheets("Données").Range("i" & x)) 'Nb de logements
.Range("r" & n) = CInt(Sheets("Données").Range("j" & x)) 'Nb de niveau chauffé
.Range("s" & n) = 1 - CSng(Sheets("Données").Range("am" & x)) 'Volume chauffé
.Range("t" & n) = "=IFERROR(VLOOKUP(RC1,Population!R2C1:R583C2,2,FALSE),1)" 'Nb d'habitant(s)
.Range("u" & n) = "=RC[-6]*RC[-3]*RC[-2]"
.Range("v" & n) = "=RC[-7]*RC[-4]*(1-RC[-3])"
.Range("w" & n) = "=RC[-2]*RC[-14]"
.Range("x" & n) = "=RC[-3]*RC[-12]"
.Range("y" & n) = "=IFERROR(1-(RC[-1]/RC[-2]),0)"
.Range("z" & n) = "=(RC[-4]+RC[-5])*RC[-17]"
.Range("aa" & n) = "=(RC[-5]+RC[-6])*RC[-15]"
.Range("ac" & n) = "=VLOOKUP(RC1,RelevéInstall!R1C1:R786C5,2,FALSE)"
.Range("ad" & n) = "=RC[-1]*Critère!R13C22"
.Range("ae" & n) = "=RC[-3]*RC[-1]"
.Range("af" & n) = "=IFERROR(VLOOKUP(RC5,Cad!R1C1:R749C8,7,FALSE),0)"
' .Range("ag" & n) = "=RC[-1]/5.22*Critère!R15C22"
.Range("ah" & n) = "=VLOOKUP(RC1,RelevéInstall!R1C1:R786C5,4,FALSE)"
.Range("ai" & n) = "=RC[-1]*Critère!R12C22"
.Range("aj" & n) = "=RC[-1]*RC[1]"
.Range("ak" & n) = "=RC[1]*RC[-2]"
.Range("al" & n) = "=IFERROR(VLOOKUP(RC5,Cad!R1C1:R749C8,4,FALSE),0)"
' .Range("ac" & n) = "=IF(RC[-24]<(RC[-10]+RC[-5]),0,RC[-24]-(RC[-10]+RC[-5]))"
End With
tot = 0
Next
J'ai pensé à séparer complètement les étapes de calculs et de rechercheV/copier mais je ne sais pas si cela sera utile...
Merci de votre attention
Bonne soirée à vous
Dernière édition: