Lire toutes les Combobox d'un formulaire

Bonjour à tous,

Dans un formulaire j'ai une trentaine de combobox avec des noms très spécifiques à chacune.

Selon certains critères ces combobox sont ou non à renseigner par l'utilisateur.

Et je ne souhaite autoriser l'enregistrement des données que lorsque toutes les combobox qui doivent l'être sont renseignées.

Je conditionne donc l'accès au bouton "Enregistrer" au remplissage des combobox.

Dans chaque procédure de modification de combobox (ex : CmbSiloFarine_change) je fais appel à la procédure "activer" qui test chauqe combobox du formulaire.

Sans utiliser de boucle le code est celui-ci :

Private Sub activer()

Controle = 0

If CmbSiloFarine.Enabled = True And CmbSiloFarine.Value = "" Then

Controle = Controle + 1

End If

If CmbFournisseurFarine.Enabled = True And CmbFournisseurFarine.Value = "" Then

Controle = Controle + 1

End If

If CmbEau.Enabled = True And CmbEau.Value = "" Then

Controle = Controle + 1

End If

If CmbTempEau.Enabled = True And CmbTempEau.Value = "" Then

Controle = Controle + 1

End If

If CmbTempPate.Enabled = True And CmbTempPate.Value = "" Then

Controle = Controle + 1

End If

If Controle = 0 Then

CBEnregistrer.Caption = "Enregistrer"

CBEnregistrer.Enabled = True

End If

End Sub

Je dois donc ici dupliquer le même test pour chacune des Combobox.

C'est fastidieux et si je viens à en rajouter dans le formulaire, je devrai aussi mettre à jour cette procédure.

Y aurait-il un moyen de faire ceci avec une boucle qui dirait que pour chaque combobox du formulaire il regarde si elle est accessible et si elle est non vide ?

Bonjour et sur le forum,

J'ai une proposition à te faire, il faudra peut-être changer "Me" par le nom de ton Userform:

Private Sub activer()

controle = 0

For Each ctrl In Me.Controls

If ctrl.Name Like "Cmb*" Then
    If ctrl.Enabled = True And ctrl = "" Then controle = controle + 1
End If

If controle = 0 Then
    CBEnregistrer.Caption = "Enregistrer"
    CBEnregistrer.Enabled = True
End If
End Sub

Je dirais même que c'est optimisable:

Private Sub activer()

actrlvide = False

For Each ctrl In Me.Controls

If ctrl.Name Like "Cmb*" Then
    If ctrl.Enabled = True And ctrl = "" Then
        actrlvide = True
        Exit For 'pour arrêter de chercher puisqu'on a juste besoin qu'une des combobox soit vide pour empêcher l'enregistrement
    End If
End If

If Not actrlvide Then
    CBEnregistrer.Caption = "Enregistrer"
    CBEnregistrer.Enabled = True
End If
End Sub

Merci beaucoup Ausecour, ton code optimisé marche parfaitement (il manque juste le Next).

Bonjour,

En effet je ne l'avais pas remarqué comme je n'avais pas tester le code

Tant mieux si l'idée marche en tout cas

Rechercher des sujets similaires à "lire toutes combobox formulaire"