Explication d'un programme
Bonjour,
Etant assez novice sur excel VBA, j'ai demandé de l'aide pour un projet.
| Mr Eric Kergresse |
M'a fait un programme or sur certaine partie j'ai du mal à comprendre les actions que font le code.
Si quelqu'un pourrait m'expliquer le code cela serait vraiment sympatique.
Je vous mets le fichier en pièce-jointe.
Les parties qui sont citées sont = " Usf_erreur et Mod_listedeserreurs "
Merci pour votre temps.
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 Madate As String, STDxxxx As String, Erreurs As String
Set ShData = Sheets("Data")
With ShData
NbErreurs = 0
IndexListe = 0
For Colonne = 105 To 213
Madate = .Cells(49, Colonne).Value
For Ligne = 2 To 48
STDxxxx = .Cells(Ligne, 1).Value
'Comparaison des dates entre "Madate" et toute les dates de la même colonne
'Si "Madate" < à une des lignes de la même colonne alors on utilise la variable "Erreur"
If Madate < .Cells(Ligne, Colonne).Value Then
With Usf_Erreurs
With .ListBoxErreurs
.AddItem
.List(IndexListe, 0) = STDxxxx
.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
Exit For
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 SubSub 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 SubOption Explicit
Private Sub ListBoxErreurs_Click()
Application.Goto ShData.Cells(Me.ListBoxErreurs.List(, 1), 1), True
End Sub
'Private Sub UserForm_Initialize()
' Set f = Sheets("bd")
' ListBox1.List = f.Range("A2:B" & f.Range("a65000").End(xlUp).Row).Value
'End Sub
Private Sub B_croissant_Click()
' Dim MatriceErreurs()
MatriceErreurs = Me.ListBoxErreurs.List
QuickOrdre MatriceErreurs(), LBound(MatriceErreurs), UBound(MatriceErreurs), 1, True
Me.ListBoxErreurs.List = MatriceErreurs
End Sub
Private Sub B_décroissant_Click()
MatriceErreurs = Me.ListBoxErreurs.List
QuickOrdre MatriceErreurs(), LBound(MatriceErreurs), UBound(MatriceErreurs), 1, False
Me.ListBoxErreurs.List = MatriceErreurs
End Sub
????????
Bonjour,
Dans tout ce code, c'est QuickOrdre qui est difficilement compréhensible. La procédure ListerLesErreurs ajoute au fur et à mesure les erreurs selon la règle que vous avez définie dans le contrôle ListBoxErreurs du Userform. Seulement une fois récupérées les erreurs, celles-ci sont dans le désordre et cela rend difficile la lecture.
QuickOrdre permet d'ordonner un tableau à deux dimensions (clé en main). Dans ce genre de moulinette, on compare un enregistrement avec un autre, s'il est supérieur ou inférieur on le met dans une variable temporaire pour permuter.
Cette procédure n'est pas de moi, mais de Jacques BOISGONTIER. Si vous ne connaissez pas son site, je vous engage à aller le voir, c'est une mine d'or Jacques BOISGONTIER
Bonjour
Pour information M. BOISGONTIER est décédé... il y a bientôt un an...
en espérant que son site lui survirera.
Fred
Merci Fred pour l'info, je ne savais pas. Quand je pense aux attaques "dégueulasses" dont il a fait l'objet sur un autre site....
Bonjour,
Je ne connaissais pas son site.
Je vais aller voir.
Merci beaucoup !