optimiser macro lente

  • Initiateur de la discussion Initiateur de la discussion simple
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
Re : optimiser macro lente

Bonjour
Deja vite fait , ajoute au début de ta SUb :
Application.screenupdating = False ( remettre a True a la fin)
J'ai une macro qui balaye 500 lignes et appelle 2 fonctions entre temps
J'ai Chronometré , ca divise par 3 le tps
 
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
@+
 
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
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
245
Réponses
0
Affichages
476
Réponses
1
Affichages
795
  • Question Question
Microsoft 365 colorer une plage
Réponses
2
Affichages
873
Réponses
8
Affichages
1 K
Réponses
19
Affichages
2 K
Retour