1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| Private Sub Btn_Test_Click()
Dim ctrl As MSForms.Control
Dim dicoKeepCodes As Object 'Scripting.Dictionary
Dim codeService As String
Dim iRow As Long
' 1 - récupérer les codes à garder (les checkbox cochées) dans un dictionnaire
Set dicoKeepCodes = CreateObject("Scripting.Dictionary")
For Each ctrl In Me.Controls 'boucler sur tous les contrôles
If (TypeOf ctrl Is MSForms.CheckBox) And (ctrl.Object.Caption Like "C*") Then 'filtrer sur les checkbox dont le caption commence par "C"
If ctrl.Object.Value Then 'si la checkbox est cochée
codeService = CleanCode(ctrl.Object.Caption) 'récupérer le code service "nettoyé"
dicoKeepCodes.Add codeService, codeService 'l'ajouter au dictionnaire
End If
End If
Next ctrl
' 2 - boucler sur toutes les lignes du tableau et supprimer les lignes non cochées
With ThisDocument.Tables(3)
For iRow = .Rows.Count To 3 Step -1 'boucler sur toutes les lignes
codeService = CleanCode(.Cell(iRow, 1).Range.Text) 'récupérer le code service "nettoyé"
'si le code service n'est pas coché, supprimer la ligne
If Not dicoKeepCodes.Exists(codeService) Then .Rows(iRow).Delete
Next iRow
End With
' 3 - masquer le formulaire
Me.hide
End Sub
'fonction dédiée à "nettoyer un code" (remplace 'C0001' en 'C1')
Private Function CleanCode(rawCode As String) As String
Dim iCar As Long
Dim nbCar As Long
Dim firstLine As String
'si le code contient un saut de ligne, récupérer uniquement la partie avant celui-ci
If InStr(rawCode, vbCr) = 0 Then
firstLine = rawCode
Else
firstLine = Left(rawCode, InStr(rawCode, vbCr) - 1)
End If
'identifier la position de la partie numérique à droite
nbCar = Len(firstLine)
For iCar = nbCar To 1 Step -1
If Not IsNumeric(Mid(firstLine, iCar, 1)) Then Exit For
Next iCar
'nettoyer les "zéros en trop"
If iCar = nbCar Then
CleanCode = firstLine
Else
CleanCode = Left(firstLine, iCar) & Val(Right(firstLine, nbCar - iCar))
End If
End Function |
Partager