Activation du bouton ajout sous condition

Bonjour à tous,

J'ai un formulaire de saisie avec plusieurs textbox.

Je souhaite mettre deux 2 niveaux de sécurités ou conditions pour valider l'ajout (activation du bouton ajout) dans le formulaire.

  • La 1ère consiste à rappeler à l'utilisateur qu'il doit au moins saisir les données dans l'une des deux textbox à savoir : txtPCR ou txtBG (Msgbox : veuillez remplir l'un des deux champs)
  • La 2eme condition c'est que le bouton ajout (enregistrer) s'active si la condition 1 est respecté et deux autres textbox sont remplis, à savoir : txtDate et txtClt

Voici le code actuel (si au delà de ma requête il y a des remarques, je reste ouvert à toute suggestion):

Private Sub btnAjout_Click()

' ********************************

' Procédure permettant d'ajouter un nouvel enregistrement

' dans la base de données

' ********************************

If txtDate = "" Or cboCLT = "" Or txtDate = "jj/mm/aaaa" Then

MsgBox ("la saisie du N°PC Recette Recette ou N° Bon de gratuit est obligatoire")

Else

Sheets("VENTE").Activate

Range("A2").Select

Selection.End(xlDown).Select 'On se positionne sur la dernière ligne non vide

Selection.Offset(1, 0).Select 'On se décale d'une ligne vers le bas

ActiveCell = txtPCR

ActiveCell.Offset(0, 1) = txtBG

ActiveCell.Offset(0, 2).Value = Format(CDate(txtDate), "dd/mm/yyyy")

ActiveCell.Offset(0, 3).Value = cboCLT

ActiveCell.Offset(0, 4).Value = CLng(Me.txtMontant.Value)

ActiveCell.Offset(0, 5).Value = CLng(Me.txtCubi.Value)

ActiveCell.Offset(0, 6).Value = CLng(Me.txtFA200.Value)

ActiveCell.Offset(0, 7).Value = CLng(Me.txtFAO200.Value)

ActiveCell.Offset(0, 8).Value = CLng(Me.txtFP250.Value)

ActiveCell.Offset(0, 9).Value = CLng(Me.txtFP200.Value)

ActiveCell.Offset(0, 10).Value = CLng(Me.txtFP100.Value)

ActiveCell.Offset(0, 11).Value = CLng(Me.txtTNL75.Value)

ActiveCell.Offset(0, 12).Value = CLng(Me.txtTNL60.Value)

ActiveCell.Offset(0, 13).Value = CLng(Me.txtTNL40.Value)

ActiveCell.Offset(0, 14).Value = CLng(Me.txtBD20.Value)

ActiveCell.Offset(0, 15).Value = CLng(Me.txtBD25.Value)

ActiveCell.Offset(0, 16).Value = CLng(Me.txtBD30.Value)

ActiveCell.Offset(0, 17).Value = CLng(Me.txtBD40.Value)

ActiveCell.Offset(0, 18).Value = CLng(Me.txtPC20.Value)

ActiveCell.Offset(0, 19).Value = CLng(Me.txtPC30.Value)

ActiveCell.Offset(0, 20).Value = CLng(Me.txtPC40.Value)

ActiveCell.Offset(0, 21).Value = CLng(Me.txtBDC10.Value)

MsgBox "Votre saisie a bien été ajouté à votre base de données", vbOKOnly + vbInformation, "CONFIRMATION"

' ********************************

' Rafaichir la fenêtre de saisie

' ********************************

Unload Me

frmVente.Show vbmodelee

End If

Bonjour,

Voici un essai bien que je n'ai pas parfaitement compris. J'ai supposé qu'il fallait dans le second cas avoir soit PCR soit BG (pas les 2 ni aucune des 2). Il y a une option 2 au cas où il en faut au moins une des 2.

Par ailleurs, j'ai fait un petit test de reorganisation du code. Il ne fonctionnera qu'à condition que les index de tabulation de chaque contrôle correspondent à leur colonne de destination. C'est pour avoir une idée des possibilités plutôt que d'avoir 20 lignes, sachant que l'idéal est d'avoir une boucle sur les noms de contrôles devant coïncider avec les noms des colonnes du tableau structuré qu'elles alimentent.

Private Sub btnAjout_Click()

dim ctrl as control
dim nvl&

If txtDate = "" Or cboCLT = "" Or txtDate = "jj/mm/aaaa" Then 'si une des conditions est vraie, sortie
    MsgBox ("la saisie de la date et du CLT est obligatoire")
    Exit sub
end if

If not (txtPCR <> "" XOr txtBG <> "") Then 'OU EXCLUSIF : "vaut non(un seul des 2)" <=> SOIT L'UN SOIT L'AUTRE (les 2 ou aucun renvoient faux)
'if txtPCR = "" and txtBG = "" then 'OPTION 2 : si les 2 sont vides, sortie
    MsgBox ("la saisie du N°PC Recette Recette ou N° Bon de gratuit est obligatoire")
    exit sub
end if

with Sheets("VENTE")
    nvl = .Range("A" & .rows.count).end(xlup).row + 1 'dernière ligne en partant du bas (on remonte)
    for each ctrl in Me.controls 'pour chaque controle de l'UF
        if ctrl.tabindex <= 21 then 'si le tabindex <= 21 <<<<PENSER A ADAPTER LES TABINDEX pour qu'ils coincident si jamais...
            k = k + 1 'incrementation k
            select case k
                case 1, 3: .cells(nvl, k).value = ctrl 'k vaut 1 ou 3 : valeur reprise simplement
                case 2: .cells(nvl, k).value = Format(CDate(ctrl), "dd/mm/yyyy") 'k=2, valeur formatée date
                case else: .cells(nvl, k).value = Clng(ctrl) 'autres valeurs de k, valeur convertie long
            end select
        end if
    next ctrl
end with

MsgBox "Votre saisie a bien été ajouté à votre base de données", vbOKOnly + vbInformation, "CONFIRMATION"
Unload Me
frmVente.Show vbmodelee

End If

Cdlt,

Rechercher des sujets similaires à "activation bouton ajout condition"