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:
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.
Merci d'avance pour vos avis éclairés et bon samedi.
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.
Merci d'avance pour vos avis éclairés et bon samedi.
Pièces jointes
Dernière édition: