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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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:
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
537
Réponses
10
Affichages
651
  • Question Question
Microsoft 365 Formules
Réponses
2
Affichages
663
Réponses
1
Affichages
1 K
Retour