Search code examples
excelvbacheckbox

VBA - exclude certain boxes from a general check


Hiyall,

I have this simple code running to calculate something in a Userform ; after filling some boxes, you click on a button to obtain the result - when clicking, it checks if all boxes have been filled :

Private Sub Valider_Click()
Dim Ctrl As Control, x1 As Long, x2 As Long

    For Each Ctrl In Me.Controls
        If TypeName(Ctrl) = "TextBox" Then
            x1 = x1 + 1: If Ctrl.Text <> "" Then x2 = x2 + 1
        End If
    Next Ctrl

    If x1 <> x2 Then
        MsgBox "Veuillez remplir tous les champs", vbInformation, ""

    Else
        Sheets("Calculs").Range("C5").Value = NuCoaposX_texte.Value
        Sheets("Calculs").Range("D5").Value = NuCoaposY_texte.Value
        Sheets("Calculs").Range("C6").Value = NuCoasizeX_texte.Value
        Sheets("Calculs").Range("D6").Value = NuCoasizeY_texte.Value
        Sheets("Calculs").Range("C7").Value = NuCoadefX_texte.Value
        Sheets("Calculs").Range("D7").Value = NuCoadefY_texte.Value
        Sheets("Calculs").Range("C11").Value = NuSLIA0Y_texte.Value
        Sheets("Calculs").Range("D11").Value = NuSLIA0Y_texte.Value
        Sheets("Calculs").Range("C12").Value = NuSLIA1X_texte.Value
        Sheets("Calculs").Range("D12").Value = NuSLIA1Y_texte.Value
        Sheets("Calculs").Range("C13").Value = NuSLdefX_texte.Value
        Sheets("Calculs").Range("D13").Value = NuSLdefY_texte.Value

    End If

    MoitieZoneNuX.Value = Sheets("Calculs").Range("F6").Value

    Unload Me

End sub

The problem is that I want to populate some boxes with values from cells once everything has been calculated : of course it checks those boxes as well when I click the button. Is there a way to exclude some of those boxes from the check ?

I've tried seeking out the answer, but I'm unsure what exactly to look for


Solution

  • You can use the control's Tag property to skip the length validation:

    Private Sub Valider_Click()
        Dim Ctrl As Control
    
        For Each Ctrl In Me.Controls
            If TypeName(Ctrl) = "TextBox" Then
                'check tag and content...
                If Ctrl.Tag <> "skip" And Len(Ctrl.Value) = 0 Then
                    MsgBox "Veuillez remplir tous les champs", vbInformation, ""
                    Exit Sub 'nothing else to do...
                End If
            End If
        Next Ctrl
    
        With Sheets("Calculs")
            .Range("C5").Value = NuCoaposX_texte.Value
            .Range("D5").Value = NuCoaposY_texte.Value
            .Range("C6").Value = NuCoasizeX_texte.Value
            .Range("D6").Value = NuCoasizeY_texte.Value
            .Range("C7").Value = NuCoadefX_texte.Value
            .Range("D7").Value = NuCoadefY_texte.Value
            .Range("C11").Value = NuSLIA0Y_texte.Value
            .Range("D11").Value = NuSLIA0Y_texte.Value
            .Range("C12").Value = NuSLIA1X_texte.Value
            .Range("D12").Value = NuSLIA1Y_texte.Value
            .Range("C13").Value = NuSLdefX_texte.Value
            .Range("D13").Value = NuSLdefY_texte.Value
        End With
    
        MoitieZoneNuX.Value = Sheets("Calculs").Range("F6").Value
    
        Unload Me  'why do this after setting MoitieZoneNuX ?
    
    End Sub