"I'd like to loop on all the controls of several existing forms. But Access is using presumably the creation order. How can I change this order to the TAB order without recreating the forms?"

This function will return the .Controls() number according to your tab stop number. You tell it the tab index # you want, and it returns the control # in the controls collection.

It looks for 'live' controls: text boxes, combos, list boxes and check boxes that are enabled, not locked, visible, a tab stop, and in the form detail section.

One caveat: You will need to re-set the tab index numbers on your 'live' controls so they are sequential in an unbroken series, starting from 0. Otherwise, the function may not return a value for every .Controls number.

BTW It returns a Null if there's no answer.

Private Function TabNumber(whichone)
    Dim x As Long
    With Me
        For x = 0 To .Controls.Count - 1
            With .Controls(x)
                If .Section = 0 Then
                    Select Case .ControlType
                        Case acTextBox, acComboBox, acCheckBox, acListBox
                            If (.TabStop = True) And (.Enabled = True) And 
(.Locked = False) And (.Visible = True) Then
                                If .TabIndex = whichone Then Exit For
                            End If
                    End Select
                End If
            End With
        Next x
        If x = .Controls.Count Then
            ' doesn't exist
        Else
            TabNumber = x
        End If
    End With
End Function