Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1437 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Optimisation Macro remplissage feuille à partir d'autres feuilles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation Macro remplissage feuille à partir d'autres feuilles

n°2317916
yanns09
Posté le 11-07-2018 à 15:49:47  profilanswer
 

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

mood
Publicité
Posté le 11-07-2018 à 15:49:47  profilanswer
 

n°2317947
Marc L
Posté le 12-07-2018 à 15:22:28  profilanswer
 

 
            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 …
 

n°2317950
yanns09
Posté le 12-07-2018 à 16:10:16  profilanswer
 

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.

n°2317973
Marc L
Posté le 13-07-2018 à 20:26:25  profilanswer
 

 
            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 …
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Optimisation Macro remplissage feuille à partir d'autres feuilles

 

Sujets relatifs
[Perl] Optimisation code perl CGI - Problème de performanceCopier coller valeur sur deux feuille avec conditions
Comparer 4 colonnes entre 2 feuilles ExcelProgrammer les Macro Excel sur Visual studio
Macro conditions ligne par ligneinjection donnée xls à partir d'une colone précise ?
Actualiser un organigramme PPT à partir d'un tableau excelecrire chaine utf8 json à partir d'un dictionnaire
Transformer Formule en MacroCréer fiche magasin à partir d'un fichier csv
Plus de sujets relatifs à : Optimisation Macro remplissage feuille à partir d'autres feuilles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR