optimiser macro lente

simple

XLDnaute Nouveau
Bonjour à tous,
suite a un précédent post ou je demandais comment placer un point sur une image, j'ai aujourd'hui terminé une programmation stable mais à mon gout un peu lente.

Explication de la macro.
Sur une première feuille excel j'ai environ 600 lignes à traiter (soit 600 futures points placés)
je fais actuellement une boucle "for" dans laquelle en fonction d'un valeur de cellule je choisi la couleur du point à placer.
Pour se faire je n'ai pas réussi à faire plus simple que cela:

à chaque points (répété 600 fois)
j’exécute ceci
Code:
Sheets(count).Activate
    ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, w, H).Select
    With Selection
    .Name = "defect_x" & x - 1
    .ShapeRange.Fill.ForeColor.RGB = RGB(rouge(k), vert(k), bleu(k))
    End With
Pour pouvoir adapter la couleur, je lance 3 fonctions rouge(), vert(), bleu() dans lequel je place l'argument qui permettra de choisir la couleur.



exemple de la fonction vert()
Code:
Function vert(ByVal k As String) As Integer
    vert = 242
    If k = "B" Then
    vert = 215
    End If
    If k = "F" Or k = "D" Then
    vert = 0
    End If
End Function

Auriez vous une solution qui me permettrait de ne lancer qu'une seule fonction qui renvoi dans le bon format les 3 valeurs RGB.
J'économiserai déjà 2*600 appels de fonction inutile.



2ieme questions:
Dans cette boucle for j'ai des conditions if. Est il plus rapide de faire cela:

Code:
If GagnerTps_cote = "LH" And GagnerTps_board = "Outboard" Then
        count = 4
    End If
    If GagnerTps_cote = "LH" And GagnerTps_board = "Inboard" Then
        count = 5
    End If
    If GagnerTps_cote = "RH" And GagnerTps_board = "Outboard" Then
        count = 6
    End If
    If GagnerTps_cote = "RH" And GagnerTps_board = "Inboard" Then
        count = 7
    End If

ou cela

Code:
If GagnerTps_cote = "LH"  Then
if GagnerTps_board = "Outboard" then
        count = 4
else
count=5
end if

    If GagnerTps_cote = "RH" then
if GagnerTps_board = "Outboard" Then
        count = 6
else
count=7
    End If
    If GagnerTps_cote = "RH" And GagnerTps_board = "Inboard" Then
        count = 7
    End If

D'avance merci à vous
 

Pierrot93

XLDnaute Barbatruc
Re : optimiser macro lente

Bonjour,

essaye peut être avec ceci :
Code:
With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
End With
'ton code
With Application
    .Calculation = xlCalculationAutomatic
    .EnableEvents = True
    .ScreenUpdating = True
End With

A noter également que les "select" et autres "activate" sont rarement utiles en vba et ralentissent considérablement l'exécution du code.

bonne journée
@+
 

ya_v_ka

XLDnaute Impliqué
Re : optimiser macro lente

Hello

Et comme ça peut-être :

If GagnerTps_cote = "LH" Then
If GagnerTps_board = "Outboard" then
count = 4
else
count=5
end if
Else
If GagnerTps_board = "Outboard" Then
count = 6
else
count=7
End If
End If

S'il n'y a rien d'autre que LH, RH, Outboard et Inboard ça devrait jouer...

Ya'v
 

ya_v_ka

XLDnaute Impliqué
Re : optimiser macro lente

Hello

Une autre approche :

count = 4
If GagnerTps_cote = "RH" then
count = count + 2
end if
If GagnerTps_board = "Outboard" Then
count = count + 1
End If


S'il n'y a rien d'autre que LH, RH, Outboard et Inboard ça devrait jouer...

Ya'v
 

tototiti2008

XLDnaute Barbatruc
Re : optimiser macro lente

Bonjour simple, Bonjour hervé62, bonjour Michel :), bonjour Pierrot :), Bonjour ya_v_ka :)

peut-être

Code:
count = 1 - (GagnerTps_cote = "LH") * 2 - (GagnerTps_cote = "RH") * 4 - (GagnerTps_board = "Outboard") - (GagnerTps_board = "Inboard") * 2
 

Discussions similaires

Réponses
0
Affichages
188

Statistiques des forums

Discussions
312 668
Messages
2 090 739
Membres
104 643
dernier inscrit
adriano22