Optimisation Macro remplissage feuille à partir d'autres feuilles

Optimisation Macro remplissage feuille à partir d'autres feuilles - VB/VBA/VBS - Programmation

Marsh Posté le 11-07-2018 à 15:49:47    

J'ai au point une macro qui permet remplir une feuille en fonction de certaines valeurs et paramètres dans une autre feuille. Elle fonctionne mais la manière dont elle est rédigée disons n'est pas très efficace (^_^)'   . En effet si j'ai disons des centaines de données à traiter je sens que ça se transformera en un programme interminable. Pouvez-vous m'aider à le rendre plus compact (optimiser) ? J'ai essayé de passer par des tableaux ou par la fonction "With" mais je me perds entre temps ou alors le programme ne fonctionne plus.
Je vous mets en annexe le code du programme en question.
PS: Le programme fonctionne, il fait le travail mais je souhaite l'optimiser car il ne fait pas très "normalisé"
Merci d'avance pour votre aide.  
 

Code :
  1. Sub PourOptimiser()
  2.     'BIA
  3.     Worksheets("Sortie" ).Range("B2:K4" ).Value = 9999
  4.     ligne = 2
  5.     For i = 1 To 2
  6.         For j = 1 To 4
  7.             Worksheets("D - BI" ).Range("X33" ).Value = i
  8.             Worksheets("D - BI" ).Range("X34" ).Value = j
  9.             If _
  10.             Worksheets("D - BI" ).Range("Y33" ).Value >= -0.5 And _
  11.             Worksheets("D - BI" ).Range("Y33" ).Value <= 0.5 And _
  12.             Worksheets("D - BI" ).Range("Y34" ).Value >= -1# And _
  13.             Worksheets("D - BI" ).Range("Y34" ).Value <= 1# _
  14.             Then
  15.                 'On ne fait rien
  16.             Else
  17.                 'BK
  18.                 If Worksheets("Resume" ).Range("E65" ).Value < Worksheets("Sortie" ).Cells(ligne, 2).Value Then
  19.                     Worksheets("Sortie" ).Cells(ligne, 2).Value = Worksheets("Resume" ).Range("E65" ).Value
  20.                     Worksheets("Sortie" ).Cells(ligne, 3).Value = Worksheets("Resume" ).Range("F65" ).Value
  21.                     Worksheets("Sortie" ).Cells(ligne, 4).Value = i
  22.                     Worksheets("Sortie" ).Cells(ligne, 5).Value = j
  23.                     Worksheets("Sortie" ).Cells(ligne, 6).Value = Worksheets("T_C" ).Range("D22" ).Value
  24.                     Worksheets("Sortie" ).Cells(ligne, 7).Value = Worksheets("T_C" ).Range("E22" ).Value
  25.                     Worksheets("Sortie" ).Cells(ligne, 8).Value = Worksheets("T_C" ).Range("F22" ).Value
  26.                     Worksheets("Sortie" ).Cells(ligne, 9).Value = Worksheets("T_C" ).Range("G22" ).Value
  27.                     Worksheets("Sortie" ).Cells(ligne, 10).Value = Worksheets("T_C" ).Range("H22" ).Value
  28.                     Worksheets("Sortie" ).Cells(ligne, 11).Value = Worksheets("T_C" ).Range("I22" ).Value
  29.                     Worksheets("Sortie" ).Cells(ligne, 12).Value = Worksheets("BIA - S" ).Range("B42" ).Value
  30.                     Worksheets("Sortie" ).Cells(ligne, 13).Value = Worksheets("BIA - S" ).Range("B44" ).Value
  31.                     Worksheets("Sortie" ).Cells(ligne, 14).Value = Worksheets("BIA - S" ).Range("B43" ).Value
  32.                     Worksheets("Sortie" ).Cells(ligne, 15).Value = Worksheets("BIA - S" ).Range("C42" ).Value
  33.                     Worksheets("Sortie" ).Cells(ligne, 16).Value = Worksheets("BIA - S" ).Range("C44" ).Value
  34.                     Worksheets("Sortie" ).Cells(ligne, 17).Value = Worksheets("BIA - S" ).Range("C43" ).Value
  35.                 End If
  36.                 'BL
  37.                 If Worksheets("Resume" ).Range("E66" ).Value < Worksheets("Sortie" ).Cells(ligne + 1, 2).Value Then
  38.                     Worksheets("Sortie" ).Cells(ligne + 1, 2).Value = Worksheets("Resume" ).Range("E66" ).Value
  39.                     Worksheets("Sortie" ).Cells(ligne + 1, 3).Value = Worksheets("Resume" ).Range("F66" ).Value
  40.                     Worksheets("Sortie" ).Cells(ligne + 1, 4).Value = i
  41.                     Worksheets("Sortie" ).Cells(ligne + 1, 5).Value = j
  42.                     Worksheets("Sortie" ).Cells(ligne + 1, 6).Value = Worksheets("T_C" ).Range("D23" ).Value
  43.                     Worksheets("Sortie" ).Cells(ligne + 1, 7).Value = Worksheets("T_C" ).Range("E23" ).Value
  44.                     Worksheets("Sortie" ).Cells(ligne + 1, 8).Value = Worksheets("T_C" ).Range("F23" ).Value
  45.                     Worksheets("Sortie" ).Cells(ligne + 1, 9).Value = Worksheets("T_C" ).Range("G23" ).Value
  46.                     Worksheets("Sortie" ).Cells(ligne + 1, 10).Value = Worksheets("T_C" ).Range("H23" ).Value
  47.                     Worksheets("Sortie" ).Cells(ligne + 1, 11).Value = Worksheets("T_C" ).Range("I23" ).Value
  48.                     Worksheets("Sortie" ).Cells(ligne + 1, 12).Value = Worksheets("BIA - S" ).Range("D42" ).Value
  49.                     Worksheets("Sortie" ).Cells(ligne + 1, 13).Value = Worksheets("BIA - S" ).Range("D44" ).Value
  50.                     Worksheets("Sortie" ).Cells(ligne + 1, 14).Value = Worksheets("BIA - S" ).Range("D43" ).Value
  51.                     Worksheets("Sortie" ).Cells(ligne + 1, 15).Value = Worksheets("BIA - S" ).Range("E42" ).Value
  52.                     Worksheets("Sortie" ).Cells(ligne + 1, 16).Value = Worksheets("BIA - S" ).Range("E44" ).Value
  53.                     Worksheets("Sortie" ).Cells(ligne + 1, 17).Value = Worksheets("BIA - S" ).Range("E43" ).Value
  54.                 End If
  55.                 'BM
  56.                 If Worksheets("Resume" ).Range("E67" ).Value < Worksheets("Sortie" ).Cells(ligne + 2, 2).Value Then
  57.                     Worksheets("Sortie" ).Cells(ligne + 2, 2).Value = Worksheets("Resume" ).Range("E67" ).Value
  58.                     Worksheets("Sortie" ).Cells(ligne + 2, 3).Value = Worksheets("Resume" ).Range("F67" ).Value
  59.                     Worksheets("Sortie" ).Cells(ligne + 2, 4).Value = i
  60.                     Worksheets("Sortie" ).Cells(ligne + 2, 5).Value = j
  61.                     Worksheets("Sortie" ).Cells(ligne + 2, 6).Value = Worksheets("T_C" ).Range("D24" ).Value
  62.                     Worksheets("Sortie" ).Cells(ligne + 2, 7).Value = Worksheets("T_C" ).Range("E24" ).Value
  63.                     Worksheets("Sortie" ).Cells(ligne + 2, 8).Value = Worksheets("T_C" ).Range("F24" ).Value
  64.                     Worksheets("Sortie" ).Cells(ligne + 2, 9).Value = Worksheets("T_C" ).Range("G24" ).Value
  65.                     Worksheets("Sortie" ).Cells(ligne + 2, 10).Value = Worksheets("T_C" ).Range("H24" ).Value
  66.                     Worksheets("Sortie" ).Cells(ligne + 2, 11).Value = Worksheets("T_C" ).Range("I24" ).Value
  67.                     Worksheets("Sortie" ).Cells(ligne + 2, 12).Value = Worksheets("BIA - S" ).Range("F42" ).Value
  68.                     Worksheets("Sortie" ).Cells(ligne + 2, 13).Value = Worksheets("BIA - S" ).Range("F44" ).Value
  69.                     Worksheets("Sortie" ).Cells(ligne + 2, 14).Value = Worksheets("BIA - S" ).Range("F43" ).Value
  70.                     Worksheets("Sortie" ).Cells(ligne + 2, 15).Value = Worksheets("BIA - S" ).Range("G42" ).Value
  71.                     Worksheets("Sortie" ).Cells(ligne + 2, 16).Value = Worksheets("BIA - S" ).Range("G44" ).Value
  72.                     Worksheets("Sortie" ).Cells(ligne + 2, 17).Value = Worksheets("BIA - S" ).Range("G43" ).Value
  73.                 End If
  74.             End If
  75.         Next
  76.     Next
  77. End Sub

Reply

Marsh Posté le 11-07-2018 à 15:49:47   

Reply

Marsh Posté le 12-07-2018 à 15:22:28    

 
            Désactiver déjà l'affichage en début de procédure, voir ScreenUpdating dans l'aide VBA interne …
 
            Simplifier aussi avec un With Worksheets("Sortie" ) évitant ainsi les multiples répétitions envers cette référence
            et, là aussi, juste en lisant l'aide VBA interne …
 
            Possibilité d'utiliser une matrice pour les cellules adjacentes du résultat mais si ce n'est pas maitrisé, à éviter car
            le meilleur code n'est pas celui du voisin "pro" mais celui que vous êtes déjà à même de comprendre et surtout de maintenir !
 
            Et bien souvent en utilisant le B-A-BA d'Excel le code s'en trouve simplifié, bien moins de lignes et rendant même parfois une boucle inutile …
 

Reply

Marsh Posté le 12-07-2018 à 16:10:16    

Merci pour les conseils j'ai déjà résolu mon problème. Je savais déjà que je devais utiliser With, c'était notifié dans mon introduction d'ailleurs, il s'agissait juste d'avoir un départ pour cela, mais bon la nuit et quelques conseils portent conseils. Sur ce, je notifie le poste comme résolu.
Bonne soirée.

Reply

Marsh Posté le 13-07-2018 à 20:26:25    

 
            Ensuite il faudrait revoir la logique car j'aperçois plein de choses pas à leur place …
 
            Il est inutile de boucler sur l'intégralité pour ne garder que les valeurs de la dernière itération !
            Vaudrait mieux alors boucler en sens inverse et si la condition est remplie,
            ce n'est pas la peine de continuer, juste sortir de la boucle …
 
            A toi de voir et de mettre cela à plat.    Déjà en suivant la progression du code en mode pas à pas …
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed