Microsoft 365 Optimisation d'un code avec boucle

Louloulou4

XLDnaute Junior
Bonjour à tous,
J'ai un code qui est opérationnel actuellement.
Cependant, un sage à dit un jour, un code ça se crée et ça s'optimise !
C'est pour cette raison que je fais appel à vous car j'ai du mal à optimiser mon code et je me pose la question de savoir s'il y a possibilité de passer par des boucles afin de gagner plus de temps ! (j'ai déjà modifié les combobox en passant de CASE combobox1.value vers des conditionnels à base de IF, END IF, ce qui m'a fait gagner de précieuses lignes...)

Je vous envoie le doc ESSAI en P.J. pour plus d'infos !

D'avance merci à tous !
 

Pièces jointes

  • EXEMPLE.xlsm
    82 KB · Affichages: 4
Solution
Par contre une optimisation possible avec les IF ELSEIF. Au lieu de :
VB:
ComboBox2.RowSource = "C2:C5"
    ElseIf ComboBox1.Value = "ENTREE" Then
ComboBox2.RowSource = "D2:D5"
    ElseIf ComboBox1.Value = "VIANDES" Then
ComboBox2.RowSource = "E2:E6"
    ElseIf ComboBox1.Value = "CHARCUTERIE" Then
ComboBox2.RowSource = "F2:F3"
    ElseIf ComboBox1.Value = "FROMAGES" Then
ComboBox2.RowSource = "G2:G12"
    ElseIf ComboBox1.Value = "DESSERTS" Then
ComboBox2.RowSource = "H2:H5"
    ElseIf ComboBox1.Value = "EPICERIE FINE" Then
ComboBox2.RowSource = "N2:N24"
    ElseIf ComboBox1.Value = "FRUITS" Then
ComboBox2.RowSource = "I2:I6"
    ElseIf ComboBox1.Value = "LEGUMES" Then
ComboBox2.RowSource = "J2:J6"
    ElseIf ComboBox1.Value = "BOISSONS...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Louloulou,
Ca va être difficile de faire des boucles aucun indice ne se suit.
( comme B4, B5, B6 et Textbox2, Textbox3, Textbox4 où on pourrait passer par un indice de boucle )
Juste un détail pour simplifier l'écriture ( on ne gagne pas de temps )
VB:
With Sheets("Suivi commande interne")

Sheets("Suivi commande interne").Range("B4") = TextBox2.Value
Sheets("Suivi commande interne").Range("H8") = TextBox3.Value
Sheets("Suivi commande interne").Range("B8") = ComboBox1.Value
.....

End With
C'est redondant, le with évite justement la répétition des range :
Code:
With Sheets("Suivi commande interne")
    .Range("B4") = TextBox2.Value
    .Range("H8") = TextBox3.Value
    .Range("B8") = ComboBox1.Value
    .Range("A13") = TextBox3.Value
    .Range("B6") = ComboBox2.Value
    .Range("I4") = ComboBox3.Value
    .Range("D8") = ComboBox1.Value
    .Range("B13") = ComboBox4.Value
    .Range("C13") = TextBox12.Value & " résidents"
End With
NB : surtout ne pas oublier le point avant le range.
.Range("B4") signifie Sheets("Suivi commande interne").Range("B4")
alors que
Range("B4") signifie ActiveSheet.Range("B4")
Un petit point qui fait la différence.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Par contre une optimisation possible avec les IF ELSEIF. Au lieu de :
VB:
ComboBox2.RowSource = "C2:C5"
    ElseIf ComboBox1.Value = "ENTREE" Then
ComboBox2.RowSource = "D2:D5"
    ElseIf ComboBox1.Value = "VIANDES" Then
ComboBox2.RowSource = "E2:E6"
    ElseIf ComboBox1.Value = "CHARCUTERIE" Then
ComboBox2.RowSource = "F2:F3"
    ElseIf ComboBox1.Value = "FROMAGES" Then
ComboBox2.RowSource = "G2:G12"
    ElseIf ComboBox1.Value = "DESSERTS" Then
ComboBox2.RowSource = "H2:H5"
    ElseIf ComboBox1.Value = "EPICERIE FINE" Then
ComboBox2.RowSource = "N2:N24"
    ElseIf ComboBox1.Value = "FRUITS" Then
ComboBox2.RowSource = "I2:I6"
    ElseIf ComboBox1.Value = "LEGUMES" Then
ComboBox2.RowSource = "J2:J6"
    ElseIf ComboBox1.Value = "BOISSONS FRAICHES" Then
ComboBox2.RowSource = "K2:K15"
    ElseIf ComboBox1.Value = "BOISSONS CHAUDES" Then
ComboBox2.RowSource = "L2:L4"
    ElseIf ComboBox1.Value = "AUTRE" Then
ComboBox2.RowSource = "M2:M3"
End If
Il est peut être préférable d'utiliser un Case :
Code:
Select Case ComboBox1.Value
    Case "APERITIFS":           Plage = "C2:C5"
    Case "ENTREE":              Plage = "D2:D5"
    Case "VIANDES":             Plage = "E2:E6"
    Case "CHARCUTERIE":         Plage = "F2:F3"
    Case "FROMAGES":            Plage = "G2:G12"
    Case "DESSERTS":            Plage = "H2:H5"
    Case "EPICERIE FINE":       Plage = "N2:N24"
    Case "FRUITS":              Plage = "I2:I6"
    Case "LEGUMES":             Plage = "J2:J6"
    Case "BOISSONS FRAICHES":   Plage = "K2:K15"
    Case "BOISSONS CHAUDES":    Plage = "L2:L4"
    Case "AUTRE":               Plage = "M2:M3"
End Select
ComboBox2.RowSource = Plage
Ce sera probablement un peu plus rapide, mais surement moins "indigeste" et plus lisible, donc plus maintenable.
 

Discussions similaires

Réponses
2
Affichages
546

Statistiques des forums

Discussions
312 177
Messages
2 085 976
Membres
103 077
dernier inscrit
kamel26asus