Rapidité macro (remplacer for if)

Bonjour,

J'ai créé un fichier avec pas mal de macro, celles-ci fonctionnent plutôt bien sous Excel 2013 mais le but est d'utiliser le fichier sous Excel 2010, et ces macros sont plutôt lentes sous 2010, et d'ailleurs de plus en plus lente au fur et à mesure de leur utilisation.

Je voudrais donc savoir s'il y'a des méthodes plus rapides que d'autres, notamment pour remplacer des "for for if ... end if next next".

Un exemple d'une boucle dans une de mes macros :

For i = 4 To nb_lignes
    For j = 3 To nb_lignes2
        For k = 2 To 20
            If k = 2 Or k = 7 Or k = 12 Or k = 17 Then
                If Sheets("ABSENTS").Cells(i, 2).Value = Sheets("CADOR").Cells(j, k).Value Then
                Sheets("Ongletcaché").Cells(i, 2).Value = "1"
                Exit For
                End If
            End If
        Next k

        If Sheets("ABSENTS").Cells(i, 2).Value = Sheets("CADOR").Cells(j, k).Value Then
        Exit For
        End If
    Next j
Next i

J'ai lu sur des forums que la fonction Match était plus rapide que des for if, sauf que je ne sais pas comment l'utiliser, si qqun pouvait me montrer par exemple comment remplacer mes for if dans mon exemple par des match, cela serait super !

Merci à ceux qui pourront ou du moins qui essayeront de m'aider !

bonjour,

essaie ceci

For i = 4 To nb_lignes
    Set re = Sheets("cador").Cells.Find(Sheets("absent").Cells(i, 2).Value, lookat:=xlWhole)
    If Not re Is Nothing Then Sheets("Ongletcaché").Cells(i, 2).Value = "1"
Next i

Merci beaucoup, ca semble fonctionner et être plus rapide !!

Le seul problème est qu'il y'a qques condition qui ne sont pas respectées dans ta macro (et c'est normal parce que la mienne en avait beaucoup ^^)

Ce que je voudrais c'est une macro qui cherche les valeurs de la colonne 2 de l'onglet ABSENTS dans les colonnes 2, 7, 12 et 17 de l'onglet CADOR, et qui met un 1 dans les cellules des mêmes lignes que l'onglet ABSENTS, dans l'onglet Ongletcaché, j'espère que je suis clair ^^

Je pense que le problème de ta macro est qu'elle ne cherche pas uniquement dans les colonnes 2, 7, 12 et 17 mais dans tout la feuille CADOR.

Voilà, je pense que le problème vient du lokkat: whole, mais je ne sais pas gérer ca

merci pour ton aide !

bonjour,

une correction

For i = 4 To 5
 For Each j In Array(2, 4, 12, 17)
    Set re = Sheets("cador").Columns(j).Find(Sheets("absent").Cells(i, 2).Value, lookat:=xlWhole)
    If Not re Is Nothing Then Sheets("Ongletcaché").Cells(i, 2).Value = "1"
    Exit For
 Next
Next i

Super merci beaucoup !!

Rechercher des sujets similaires à "rapidite macro remplacer"