XL 2013 Accélérer ma macro en réduisant son champs de recherches.

luke3300

XLDnaute Impliqué
Bonjour le forum,

J'utilise le code suivant pour comparer des données et en afficher le résultat sur une autre feuille:

Code:
Sub Detection()Dim nom As Integer, tachesNouvelles As Integer, tacheAncienne As Range
Dim colTache As Range, ligneNom As Range, estCapable As Integer
For nom = 10 To 109
    For tachesNouvelles = 10 To 109
        estCapable = 1
        Set tacheAncienne = ThisWorkbook.Sheets("Nouveau").Cells(110, tachesNouvelles)
        With ThisWorkbook.Sheets("Dis")
            While tacheAncienne.Row < 17
                If tacheAncienne.Value <> vbNullString Then
                    Set colTache = .Rows(6).Find(What:=tacheAncienne.Value, LookIn:=xlValues, LookAt:=xlWhole)
                    Set ligneNom = .Columns(4).Find(What:=ThisWorkbook.Sheets("Nouveau").Range("D" & nom).Value, LookIn:=xlValues, LookAt:=xlWhole)
                    If ligneNom Is Nothing Then
                    estCapable = 0
                    Else
                    If Not colTache Is Nothing Then
                    estCapable = estCapable * IIf(.Cells(ligneNom.Row, colTache.Column).Value = 1, 1, 0)
                    End If
                    End If
                End If
                Set tacheAncienne = tacheAncienne.Offset(1, 0)
            Wend
        End With
        If ThisWorkbook.Sheets("Nouveau").Cells(110, tachesNouvelles).Value = vbNullString Then estCapable = 0
        ThisWorkbook.Sheets("Nouveau").Cells(nom, tachesNouvelles).Value = IIf(estCapable = 1, 1, "")
    Next tachesNouvelles
Next nom
End Sub

Le code fonctionne à merveille mais il met assez bien de temps pour travailler. Ma question était de savoir si il y avait moyen de l'accélérer en lui demandant de ne prendre en compte que les cellules concernées de la feuille "Dis" qui contiennent des valeurs supérieures à 0? Il y a quand même 10.000 cellules concernées sur cette feuille et elles n'ont pas toutes des valeurs.

Parce que si j'ai des données parsemées dans seulement 11 cellules sur 10 lignes et 15 colonnes, actuellement la macro calcule sur l'entièreté des cellules même celles qui sont vides. L'idéal serait qu'elle limite son action au champs délimité par la dernière colonne contenant une valeur en ligne 26 et la dernière ligne contenant une valeur en colonne 6 (F).

Dans l'exemple photo ci-dessous, il tiendrais compte verticalement des données jusqu'à la colonne 20 (T) et jusqu'à la ligne 32.

Capture3.jpg

Merci d'avance pour vos avis éclairés et bon samedi.
 

Pièces jointes

  • Capture3.jpg
    Capture3.jpg
    60.6 KB · Affichages: 77
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Accélérer ma macro en réduisant son champs de recherches.

Bonsoir luke3300, chris,

En utilisant des tableaux (Array) ? Des dictionary ?

En fournissant un fichier exemple :), en montrant d'où vous partez :), en exposant un exemple de résultat :) et comment vous comparez les données :) ?

Edit : mille excuses, j'avions point réactualisé :eek:
 

luke3300

XLDnaute Impliqué
Re : Accélérer ma macro en réduisant son champs de recherches.

Merci à vous pour votre intérêt.

N'y aurait-il pas moyen d'adapter le code directement?

Le but est que tout se fasse de manière automatique donc via le code sans que je ne fasse une ou des manipulations supplémentaires.

Merci pour vos idées et bon dimanche de Pâques.

:eek:
 
Dernière édition:

luke3300

XLDnaute Impliqué
Re : Accélérer ma macro en réduisant son champs de recherches.

Bon je viens de tester en masquant les colonnes et les lignes sans données et ça va du simple au double à savoir 4' quand je ne les masque pas et 2' de travail lorsque je les masque.
Ce serait donc l'idéal d'ajouter au code existant la fonction de masquage des colonnes et des lignes vides en tenant compte du champs d'insertion des données qui va de la ligne 26 à 126 et de la colonne 6 à 106.

Merci pour vos idées et bonne soirée du dimanche.

Bonne fête de Pâques aussi
 

Discussions similaires