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 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 Sub
Option 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
11vfinal-copie.xlsm (80.29 Ko)

????????

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...., il n'a pas dû partir en paix.

Bonjour,

Je ne connaissais pas son site.

Je vais aller voir.

Merci beaucoup !

Rechercher des sujets similaires à "explication programme"