Procédure trop grande
Bonjour,
J'ai un problème de procédure trop grande quand je veux importer des données stockées sous Excel via une combobox.
Voici le code:
Me.Nom_Fichier = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 1), "0.00")
Me.E1 = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 2), "0.00")
Me.E2 = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 3), "0.00")
Me.OUVERTURE = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 4), "0.00")
Me.TensionT0 = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 5), "0.00")
Me.PressionETE = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 6), "0.00")
Me.PressionHIVER = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 7), "0.00")
Me.Gravite = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 8), "0.00")
Me.LPMini = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 9), "0.00")
Me.RefSG = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 10), "0.00")
Me.RefSD = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 11), "0.00")
Me.ChoixCP = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 12), "0.00")
Me.MLPorteur = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 13), "0.00")
Me.TRPorteur = Format(Worksheets("Enregistrement_resultats").Cells(Me.ChargementCalcul.ListIndex + 2, 14), "0.00")
Je ne colle pas tout mais cette procédure contient 500 lignes et VBA n'aime pas trop :/
Est-ce que quelqu'un pourrait me dire comment alléger mon code histoire que ça passe ?
Merci d'avance
Morgan
Bonjour,
Ya pas de petites économies : donc tu pourrais commencer par...
- mettre des noms courts.
- supprimer les Me
Chez moi ça donnerait
With Worksheets("Res")
FileN = Format(Cells(CbC.ListIndex + 2, 1), "0.00")
Eg1 = Format(.Cells(CbC.ListIndex + 2, 2), "0.00")
Eg2 = Format(.Cells(CbC.ListIndex + 2, 3), "0.00")
Opn = Format(.Cells(CbC.ListIndex + 2, 4), "0.00")
...
End Withça c'est le minimum syndical.
Ensuite on peut faire nettement mieux (en 3 lignes) à condition d'être très rigoureux dans la construction du USF :
Nommer tous les contrôles dans l'ordre :
Tb1, Tb2, Tb3... Tb500...
Ensuite :
Sub InitTb()
Dim i As Integer
With Worksheets("Res")
For i = 1 To 500
Me.Controls("TextBox" & i) = Format(.Cells(CbC.ListIndex + 2, i), "0.00")
Next i
End With
End SubA+
Bonjour Morgan, bonjour le forum,
Je ne comprends pas où se situe ton problème dans le bout de code que tu proposes. On peut certes le simplifier comme ça :
Dim ER As Worksheet
Dim LI As Integer
Set ER = Sheets("Enregistrement_resultats")
LI = Me.ChargementCalcul.ListIndex + 2
Me.Nom_Fichier = Format(ER.Cells(LI, 1), "0.00")
Me.E1 = Format(ER.Cells(LI, 2), "0.00")
Me.E2 = Format(ER.Cells(LI, 3), "0.00")
Me.OUVERTURE = Format(ER.Cells(LI, 4), "0.00")
Me.TensionT0 = Format(ER.Cells(LI, 5), "0.00")
Me.PressionETE = Format(ER.Cells(LI, 6), "0.00")
Me.PressionHIVER = Format(ER.Cells(LI, 7), "0.00")
Me.Gravite = Format(ER.Cells(LI, 8), "0.00")
Me.LPMini = Format(ER.Cells(LI, 9), "0.00")
Me.RefSG = Format(ER.Cells(LI, 10), "0.00")
Me.RefSD = Format(ER.Cells(LI, 11), "0.00")
Me.ChoixCP = Format(ER.Cells(LI, 12), "0.00")
Me.MLPorteur = Format(ER.Cells(LI, 13), "0.00")
Me.TRPorteur = Format(ER.Cells(LI, 14), "0.00")Cela ne fait que simplifier l'écriture, l'exécution du code reste la même... Pourrais-tu nous dire où et quand ça plante ?
[Édition]
Bonjour Galopin on s'est croisé...
C'est nickel ! merci ThauThème et galopin01 pour votre aide. Mon code avait juste besoin d'être simplifié afin que le message d'erreur "procédure trop grande" n'apparaisse pas.
Bonne soirée
Morgan