Optimisation Code VBA

Bonjour à tous,

Je me fais très présent ces temps-ci, et j'en suis désolé !

Je suis en train d'essayer d'optimiser mon code car je me rend bien compte qu'il est redondant. Et je pense qu'une possibilité notamment serait d'utiliser un tableau pour stocker (au moins) les variables suivantes: Account_Code, Account_Desc, valeurcc, C2_Desc.

La partie de mon code que je cherche à simplifier est la suivante:

If ICP = "Entities" Then
                            .Range("A" & i).EntireRow.Insert
                            .Cells(i, 1).Value = "Add ICP"
                            .Cells(i, 2).Value = Account_Code
                            .Range("B" & i).Font.Bold = True
                            .Cells(i, 2).Name = Account_Code & "_" & CC_Code
                            .Hyperlinks.Add Anchor:=.Range("A" & i), Address:="", SubAddress:= _
        Account_Code & "_" & CC_Code, TextToDisplay:="Add ICP"
                            .Cells(i, 3).Value = Account_Desc
                            .Range("C" & i).Font.Bold = True
                            .Cells(i, 4).Value = valeurcc
                            .Range("D" & i).Font.Bold = True
                            .Cells(i, 5).Value = C2_Desc
                            .Range("E" & i).Font.Bold = True
                            .Cells(i, 6).Value = "[ICP Entities]"
                            .Range("F" & i).Font.Bold = True
                            .Cells(i, 8).Value = "T"
                            .Cells(i, 9).Value = "Y"
                            .Cells(i, 10).NumberFormat = "#,##0;(#,##0);-"
                            .Range("J" & i).Interior.Color = RGB(160, 203, 183)
                            .Range("J" & i).Font.Bold = True

                            .Range("A" & i).EntireRow.Insert
                            .Cells(i, 2).Value = Account_Code
                            .Cells(i, 3).Value = Account_Desc
                            .Cells(i, 4).Value = valeurcc
                            .Cells(i, 5).Value = C2_Desc
                            .Cells(i, 6).Value = "'-"
                            .Cells(i, 8).Value = "BN"
                            .Cells(i, 9).Value = "Y"
                            .Range("J" & i).Interior.Color = RGB(217, 217, 217)
                            .Cells(i, 10).NumberFormat = "#,##0;(#,##0);-"
                            .Cells(i, 10).Value = "0"

                            .Range("A" & i).EntireRow.Insert
                            .Cells(i, 2).Value = Account_Code
                            .Cells(i, 3).Value = Account_Desc
                            .Cells(i, 4).Value = valeurcc
                            .Cells(i, 5).Value = C2_Desc
                            .Cells(i, 6).Value = "GD8120"
                            .Cells(i, 7).Value = "GD_ITALY RETAIL"
                            .Cells(i, 8).Value = "B"
                            .Cells(i, 9).Value = "Y"
                            .Range("J" & i).Interior.Color = RGB(255, 255, 196)
                            .Cells(i, 10).NumberFormat = "#,##0;(#,##0);-"
                            .Cells(i, 10).Value = "0"
                            .Range("M" & i - 1).AutoFill Destination:=.Range("M6:M" & i + 2)
                            .Range("O" & i - 1).AutoFill Destination:=.Range("O6:O" & i + 2)
                        i = i + 3
                        Else
                            .Range("A" & i).EntireRow.Insert
                            .Range("A" & i & ":" & "Z" & i).Font.Bold = False
                            .Cells(i, 2).Value = Account_Code
                            .Cells(i, 3).Value = Account_Desc
                            .Cells(i, 4).Value = valeurcc
                            .Cells(i, 5).Value = C2_Desc
                            .Cells(i, 6).Value = "[ICP None]"
                            .Cells(i, 8).Value = "B"
                            .Cells(i, 9).Value = "N"
                            .Range("J" & i).Interior.Color = RGB(255, 255, 196)
                            .Cells(i, 10).NumberFormat = "#,##0;(#,##0);-"
                            .Cells(i, 10).Value = "0"
                            .Range("M6").AutoFill Destination:=.Range("M6:M" & i)
                            .Range("O6").AutoFill Destination:=.Range("O6:O" & i)
                        i = i + 1
                        End If

Je parle donc de tableau dans le sens où si je stockais au moins les variables énoncées je pourrais à l'aide d'une boucle For, parcourir ce tableau pour attribuer les valeurs dans les cellules. Car je répète plusieurs fois les même opérations: je crée une ligne et remplie les cellules de cette nouvelle ligne. Et je répète cette opération 2 fois avant le Else.

Quelqu'un saurait-il me proposer qqchose ?

Merci beaucoup,

SkillzZ

Bon, mon sujet n'a pas fait fureur et je peux le comprendre, l'optimisation, c'est pas ce qu'il y a de plus attrayant !

Mais au cas où certains penseraient que j'essaye de faire faire ça par qqn d'autre pour ne pas m'embêter, je tiens à démontrer que j'ai essayé et que j'ai amélioré la chose mais pas suffisamment à mon goût (la macro tourne encore assez longtemps, j'ai un énorme fichier. De petites optimisations pourraient représenter de beaux gains de temps!). Voici ce à quoi je suis arrivé:

If ICP = "Entities" Then
                        .Range("A" & i & ":" & "A" & i + 2).EntireRow.Insert
                            For y = i To i + 2
                            .Cells(y, 2).Value = Account_Code
                            .Cells(y, 3).Value = Account_Desc
                            .Cells(y, 4).Value = valeurcc
                            .Cells(y, 5).Value = C2_Desc
                            .Cells(y, 9).Value = "Y"
                            .Cells(y, 10).NumberFormat = "#,##0;(#,##0);-"
                            Next y

                        .Range("B" & i + 2 & ":" & "F" & i + 2).Font.Bold = True
                        .Cells(i + 2, 2).Name = Account_Code & "_" & CC_Code
                        .Cells(i + 2, 1).Value = "Add ICP"
                        .Hyperlinks.Add Anchor:=.Range("A" & i + 2), Address:="", SubAddress:= _
    Account_Code & "_" & CC_Code, TextToDisplay:="Add ICP"
                        .Range("J" & i + 2).Font.Bold = True
                        .Cells(i + 2, 6).Value = "[ICP Entities]"
                        .Cells(i + 2, 8).Value = "T"
                        .Range("J" & i + 2).Interior.Color = RGB(160, 203, 183)

                        .Cells(i + 1, 6).Value = "'-"
                        .Cells(i + 1, 8).Value = "BN"
                        .Range("J" & i + 1).Interior.Color = RGB(217, 217, 217)
                        .Cells(i + 1, 10).Value = "0"

                        .Cells(i, 6).Value = "GD8120"
                        .Cells(i, 7).Value = "GD_ITALY RETAIL"
                        .Cells(i, 8).Value = "B"
                        .Range("J" & i).Interior.Color = RGB(255, 255, 196)
                        .Cells(i, 10).Value = "0"

                        .Range("M6").AutoFill Destination:=.Range("M6:M" & i + 2)
                        .Range("O6").AutoFill Destination:=.Range("O6:O" & i + 2)
                    i = i + 3
                    Else
                        .Range("A" & i).EntireRow.Insert
                        .Range("A" & i & ":" & "Z" & i).Font.Bold = False
                        .Cells(i, 2).Value = Account_Code
                        .Cells(i, 3).Value = Account_Desc
                        .Cells(i, 4).Value = valeurcc
                        .Cells(i, 5).Value = C2_Desc
                        .Cells(i, 6).Value = "[ICP None]"
                        .Cells(i, 8).Value = "B"
                        .Cells(i, 9).Value = "N"
                        .Range("J" & i).Interior.Color = RGB(255, 255, 196)
                        .Cells(i, 10).NumberFormat = "#,##0;(#,##0);-"
                        .Cells(i, 10).Value = "0"
                        .Range("M6").AutoFill Destination:=.Range("M6:M" & i)
                        .Range("O6").AutoFill Destination:=.Range("O6:O" & i)
                    i = i + 1
                    End If

C'est donc loin d'être top mais c'est un peu mieux.. Anyone for a proposition?

Bon week-end à tous!

SkillzZ

Salut SkillzZ,

avant d'user mes neurones dessus, je vais attendre un peu... parfois, tu jettes les solutions qu'on te donne, parfois tu trouves sans nous avertir...

Je t'aime bien, quand même!

A+

Salut Curulis !

Tu as malheureusement raison, j'ai pas toujours été aussi assidu que je l'aurais du, et je ne peux pas t'en vouloir !

En revanche, j'ai un autre post en parallèle, plus simple et direct sur lequel je ne refuserais pas un de tes conseils/idées/solutions.. Si jamais tu as 10min (je pense pas que tu auras besoin de plus que ça)

https://forum.excel-pratique.com/viewtopic.php?f=2&t=119620

Si jamais !

Bon week-end !

SkillzZ

Rechercher des sujets similaires à "optimisation code vba"