[En Pause] Diminution du temps d'éxecution d'une macro

Enerjp

XLDnaute Junior
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 :

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:

Yohan

XLDnaute Occasionnel
Re : Diminution du temps d'éxecution d'une macro

salut je sais pas si cela est utile de mettre autant de code à mon avis le plus simple c'est soit de passer le fichier pour que l'on puisse tester la macro et voir comment elle fonction car voir un code comme cela à mon avis personne aura le courage de lire te chercher à comprendre ce qu'elle fait. On ne sait pas à quoi sert la macro donc comment réduire sans faire de vrai bêtise
 

Statistiques des forums

Discussions
312 304
Messages
2 087 050
Membres
103 441
dernier inscrit
MarioC