Ne pas prendre en compte certaine cellules durant une comparaison
S
Bonjour,
Voila j'ai un code qui effectue des comparaisons de dates.
Or j'aimerai que si une cellule à un changement de couleur (rouge, vert etc...) qui sera introduit manuellement, que la macro qui effectue la comparaison ne prenne plus en compte cette cellules et l'exclut de boucle.
Je vous remercie pour votre aide par avance.
N'hésitez pas si vous avez des questions.
Option Explicit
Public ShData As Worksheet
Public MatriceErreurs() As Variant
Sub ListerLesErreurs()
'Active la feuuille data
Sheets("data").Activate
Dim Ligne As Byte, Colonne As Byte
Dim NbErreurs As Integer, IndexListe As Integer
Dim STDreference As Date, STDxxxxM44 As String, Erreurs As String
Set ShData = Sheets("Data")
With ShData
NbErreurs = 0
IndexListe = 0
'Mise en place de la boucle des colonnes
For Colonne = 105 To 213
'Attribution d'une valeur à la variable "STDreference"
STDreference = Cells(2, Colonne).Value
'Mise en place de la boucle des lignes
For Ligne = 3 To 48
'Attribution d'une valeur à la variable "STDxxxxM44"
STDxxxxM44 = Cells(Ligne, 1).Value
'Comparaison des dates entre "STDreference" et toute les dates de la même colonne
'Si "STDreference" > à une des lignes de la même colonne alors on utilise la variable "Erreur"
Debug.Print
If STDreference >= Cells(Ligne, Colonne).Value Then
Cells(Ligne, Colonne).Font.ColorIndex = 45
With Usf_Erreurs
With .ListBoxErreurs
.AddItem
.List(IndexListe, 0) = STDxxxxM44
.List(IndexListe, 1) = Ligne
.List(IndexListe, 2) = "Révisé après le " & ShData.Cells(1, Colonne).Value
IndexListe = IndexListe + 1
End With
NbErreurs = NbErreurs + 1
End With
End If
Next Ligne
Next Colonne
If NbErreurs > 0 Then
With Usf_Erreurs
.ListBoxTitre.AddItem
.ListBoxTitre.Column = Array("STD", "Ligne", "Erreur")
MatriceErreurs = .ListBoxErreurs.List
QuickOrdre MatriceErreurs(), LBound(MatriceErreurs), UBound(MatriceErreurs), 1, True
.ListBoxErreurs.List = MatriceErreurs
.Show
End With
End If
End With
Set ShData = Nothing
End Sub
Sub QuickOrdre(MatriceErreurs(), gauc, droi, col, ordre) ' Quick sort de Jacques BOISGONTIER
Dim Ref As Variant, G As Variant, D As Variant, Temp As Variant
Dim I As Long
Ref = MatriceErreurs((gauc + droi) \ 2, col)
G = gauc: D = droi
Do
If ordre Then
Do While MatriceErreurs(G, col) < Ref: G = G + 1: Loop
Do While Ref < MatriceErreurs(D, col): D = D - 1: Loop
Else
Do While MatriceErreurs(G, col) > Ref: G = G + 1: Loop
Do While Ref > MatriceErreurs(D, col): D = D - 1: Loop
End If
If G <= D Then
For I = LBound(MatriceErreurs, 2) To UBound(MatriceErreurs, 2)
Temp = MatriceErreurs(G, I): MatriceErreurs(G, I) = MatriceErreurs(D, I): MatriceErreurs(D, I) = Temp
Next I
G = G + 1: D = D - 1
End If
Loop While G <= D
If G < droi Then QuickOrdre MatriceErreurs, G, droi, col, ordre
If gauc < D Then QuickOrdre MatriceErreurs, gauc, D, col, ordre
End SubBonjour Scaryz, bonjour le forum,
je ne comprend pas le With ShData s'il n'y a pas le point qui va avec ou l'utilisation systématique de ShData...
Ça ne répond absolument pas à ta question mais voici ton premier code plus cohérent :
Option Explicit
Public ShData As Worksheet
Public MatriceErreurs() As Variant
Sub ListerLesErreurs()
Dim Ligne As Byte, Colonne As Byte
Dim NbErreurs As Integer, IndexListe As Integer
Dim STDreference As Date, STDxxxxM44 As String, Erreurs As String
Set ShData = Sheets("Data")
ShData.Activate 'Active la feuille data
NbErreurs = 0
IndexListe = 0
'Mise en place de la boucle des colonnes
For Colonne = 105 To 213
'Attribution d'une valeur à la variable "STDreference"
STDreference = ShData.Cells(2, Colonne).Value
'Mise en place de la boucle des lignes
For Ligne = 3 To 48
'Attribution d'une valeur à la variable "STDxxxxM44"
STDxxxxM44 = ShData.Cells(Ligne, 1).Value
'Comparaison des dates entre "STDreference" et toute les dates de la même colonne
'Si "STDreference" > à une des lignes de la même colonne alors on utilise la variable "Erreur"
If STDreference >= ShData.Cells(Ligne, Colonne).Value Then
ShData.Cells(Ligne, Colonne).Font.ColorIndex = 45
With Usf_Erreurs
With .ListBoxErreurs
.AddItem
.List(IndexListe, 0) = STDxxxxM44
.List(IndexListe, 1) = Ligne
.List(IndexListe, 2) = "Révisé après le " & ShData.Cells(1, Colonne).Value
IndexListe = IndexListe + 1
End With
NbErreurs = NbErreurs + 1
End With
End If
Next Ligne
Next Colonne
If NbErreurs > 0 Then
With Usf_Erreurs
.ListBoxTitre.AddItem
.ListBoxTitre.Column = Array("STD", "Ligne", "Erreur")
MatriceErreurs = .ListBoxErreurs.List
QuickOrdre MatriceErreurs(), LBound(MatriceErreurs), UBound(MatriceErreurs), 1, True
.ListBoxErreurs.List = MatriceErreurs
.Show
End With
End If
Set ShData = Nothing
End Sub