Optimisation Macro

Bonjour,

J'aurai besoins d'assistance pour optimiser ma macro car trop ralenti.

Dans Onglet Datas j'ai un tableau variable qui commence toujours a H3 et qui va rarement jusqu'à DA5000

Je sais que c'est la taille de la Matrice qui induit ce ralentissement j'avais idée de le paramétré automatiquement

mais voilà je ne sais pas comment m'y prendre

Le but de la Macro est de mettre sur fond rouge toutes valeurs = à AI2 de l'onglet "Comp" l'autre pour l'effacer

par avance Merci

10col-nocol.xlsm (17.89 Ko)

Bonsoir,

voir fichier joint :

En fait pour une zone qui commence en H3 et dont on ne connaît pas la taille en largeur et en hauteur, vous pouvez utilisez CurrentRegion, qui permet de sélectionner la zone "collée" à la cellule de référence H3 ici.

Ensuite vous n'avez que des chiffres alors ce n'est pas string mais Integer si les chiffres <32600 et des brouettes.

Le reste était bon dirons nous.

@ bientôt

LouReeD

Merci LouReed

Je garde String car en réalité c'est de l'alpha-numérique que j'ai dans mon dossier

La fonction .CurrentRegion s'arrête au premier trouvé alors que j'ai besoins de mettre sur fond rouge tout les valeurs

présent dans la matrice = AI2

Merci

Non elle scrute toute la région qui commence en H3...

Mais dans votre exemple il n'y a qu'une seule fois 455...

@ bientôt

LouReeD

Bonjour barachoie, LouReed

Juste pour la beauté du code

Et pour la rapidité aussi

sur mon PC Le tien barachoie donne >16 secondes, le mien =0 seconde

Sub ColNCC1701()
    Colorier
End Sub

Sub NoColNCC1701()
    Colorier False
End Sub

Sub Colorier(Optional enRouge As Boolean = True)
Dim tabDatas()
Dim maValeur
Dim ligAct, colAct

Dim tpsDebut

    tpsDebut = Timer

    maValeur = Worksheets("Comp").Range("AI2").Value

    tabDatas = Range(Cells(3, 8), Cells(Cells(Rows.Count, 8).End(xlUp).Row, Cells(3, Columns.Count).End(xlToLeft).Column))
    For ligAct = 1 To UBound(tabDatas, 1)
        For colAct = 1 To UBound(tabDatas, 2)
            If tabDatas(ligAct, colAct) = maValeur Then
                Cells(3 + ligAct - 1, 8 + colAct - 1).Interior.ColorIndex = IIf(enRouge, 3, 0)
            End If
        Next
    Next

    MsgBox Timer - tpsDebut

End Sub

Merci à vous deux,

NCC 1701 c'est une méthode flash éclair Bravo

car sur les 100 colonnes que j'ai = - d'1 secondes

Merci

Bonjour (..)

barachoie a écrit :

NCC 1701 c'est une méthode flash éclair Bravo

Non c'est une méthode "Optimisée avec travail sur tableau en mémoire"

Cependant Merci pour

barachoie a écrit :

Merci

Bonsoir,

je rebondi sur ce que dit NCC 1701 :

à mon travail on m'a demandé de faire une extraction de données d'un fichier de suivi.

Hop, [Alt]+[F11] je me lance dans un code.

Fier de moi, je lance le code et j'attends... j'attends... et j'attends...

En fait il a fallu au code 1 heure et 40 minutes pour "scanner" les données, comparer et inscrire s'il le fallait le résultat sur une feuille.

Evidemment j'avais mis mes trois ligne "préférées" screen sur Off, Events sur Off et Calculation sur Off...

En me rappelant le fait que VBA travail plus vite que VBA avec Excel, alors je décide de mettre le résultat des comparaisons dans un tableau VBA, puis à l'issue du code je fais un coller des données du tableau sur la feuille.

Résultat ?

17 secondes !!!!

On va me dire que c'est encore long, mais là je n'ai plus le temps de boire un café !

Le tableau VBA fait bien parti des codes "éclairs" !

@ bientôt

LouReeD

Bonjour à tous

@LouReed

Effectivement VBA n'est pas fait pour faire du Excel, VBA est un langage de programmation (presque diront certains) cependant il faut donc penser programmation... mais la programmation est un métier.

Les tableaux sont le moyen le plus rapide de travailler (et Excel excelle sur la gestion justement des tableaux en terme de rapidité et de fonctionnalités)

Ce genre de traitement "récapitulation" que l'on voit souvent sur le forum est le plus bel exemple d'optimisation... et la durée de ta pause café en est la preuve...

Rechercher des sujets similaires à "optimisation macro"