Verification des donnees dans textBox et combobox avec notif

bonjour et bon dimanche a tous,

je reviens un sujet un peu rare, j'ai pas pu retrouver ça ici sur le forum.

je souhaiterais mettre de l'intelligence sur mon programme. des verifications de donnees lors de la saise

definir que le textbox ne peut recevoir que un format date

ensuite, un message d'erreur en rouge apparait juste a cote du textbox si celui ci est desactive et que la donnée rentré n'est pas une date (un peu comme dans les formulaires d'inscriptions des sites web)

pareil, le combobox ne doit prendre que des valeurs contenant dans la liste définie

avec le code ci dessous pour la premiere question, ça ne marche pas

If IsDate(Ajout_enregistrement.Naissance) = False Then
        MsgBox "La date de naissance saisie n'est pas correcte", vbCritical
        Exit Sub
        End If

merci de votre aide

Bonjour,

C'est quoi Ajout_enregistrement ? Et c'est quoi Naissance ? Avant qu'on mette en service la boule de cristal !

Et l'intitulé de déclaration de la Sub ? Tant qu'à faire... Et l'objectif, car constater pour laisser les choses en l'état n'est pas très rationnel : il convient donc au moins d'effacer la saisie erronée...

Cordialement.

merci pour ton interet,

ajout_enregistrement c'est le userform et naissance c'est le textbox qui ne doit recevoir que la date.

le code se trouve dans la procedure click du bouton ajouter du formulaire

Bonjour

à modifier entre parenthèse

If Ajout_enregistrement.Naissance.IsDate.value = Format("dd/mm/yy") then
        MsgBox "La date de naissance saisie n'est pas correcte, Ex :jj-mm-aaaa", vbCritical
        Exit Sub
        End If

merci Andre13,

sauf que on devrait effacer la fausse donnée rentré et refaire la saisie, mais malheureusement on peut toujours continuer avec la fausse donnnée

re,

pas certain cela doit ressembler à ceci

If Ajout_enregistrement.Naissance.IsDate.value = Format("dd/mm/yy") then
        MsgBox "La date de naissance saisie n'est pas correcte, Ex :jj-mm-aaaa", vbCritical
  Me.IsDate.SelStart = 0
  Me.IsDate.SelLength = Len(Me.IsDate.Text)      'on sélectionne tout du contenu de la textbox
  Me.IsDate.value=""                   'on vide le contenu

else
'msgbox"Merci d'avoir rectifier la date "  ' ou on ne fait rien (facultatif)

        End If

crdlt,

André

j'ai trouvé pour la premiere inquetude, ce code ci dessous, controle la donnee saisie et afiiche un message d'erreur puis met le champ de saisie en rouge

j'ai ajouter une fonction activer pour activer le bouton ajouter du usf

Private Sub Naissance_Change()

    If IsDate(Ajout_enregistrement.Naissance.Value) = False  Then
        MsgBox "La date de naissance saisie n'est pas correcte", vbCritical
        Naissance.BackColor = vbRed

    Else
    activer
    End If

End Sub

il va rester l'inquetude de controler la saisie du combobox afin qu'il ne prenne que les items de sa liste associé (actuellement on peut n'importe quoi sur ma combobox)


Andre13 a écrit :

re,

pas certain cela doit ressembler à ceci

If Ajout_enregistrement.Naissance.IsDate.value = Format("dd/mm/yy") then
        MsgBox "La date de naissance saisie n'est pas correcte, Ex :jj-mm-aaaa", vbCritical
  Me.IsDate.SelStart = 0
  Me.IsDate.SelLength = Len(Me.IsDate.Text)      'on sélectionne tout du contenu de la textbox
  Me.IsDate.value=""                   'on vide le contenu

else
'msgbox"Merci d'avoir rectifier la date "  ' ou on ne fait rien (facultatif)

        End If

crdlt,

André

merci Andre13,

je peux rajouter dans mon codele Me.Isdate.value ="", comme ça je vide le contenu du textbox

Re,

super, je pense que tu vas y arrivé sans difficulté

crdlt,

André

peux tu m'aider stp pour la combobox,

je souhaiterais qu'elle ne possede que les donnees contenu dans la liste associé et plus rien d'autres

Re,

ta combobox doit être initialisé par l'intermédiaire de ton userform Initialize

  • combobox1 par le nom de ta combo
  • il ne doit y avoir qu'un Initialize pour 1 seul Userform) Private Sub UserForm_Initialize()
  • sheets "(Database") remplace Database par le nom de ta feuille
  • plage
Exemple
Private Sub UserForm_Initialize()
Dim Plage As Range

With Sheets("Database")
    Set Plage = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

ComboBox1.List = Plage.Value
End Sub

Il existe d'autres exemples mais, sans fichier ceci peut s'avéré dur à commenter

oui t'as raison, ci dessous le code existant pour recuperer la liste se trouvant dans la feuille liste, mais avec ça j'ai pas toujours ce que je veux comme dit precedemment, dans ce code que devrais ajouter??

Private Sub UserForm_Initialize()
 Dim i As Integer

 i = 1

 Do While Sheets("Liste").Cells(i, 1) <> ""
    ComboBox1.AddItem (Sheets("Liste").Cells(i, 1))
    i = i + 1
 Loop

Re,

si je comprend bien

dans ta feuille 'Liste' tu as dans une cellule toute une liste à sélectionner

exemples ici de Boisgontier Jacques

http://boisgontierjacques.free.fr/pages_site/formulairebases.htm

j'avais deja vu cette page depuis hier, j'y ai pas compris grand chose, trop de choses qu'il aborde en meme tps. ça embrouille.

Je reviens sur la date (ça va trop vite pour moi, je n'ai pas le loisir d'être aussi réactif...

Dans un module d'objet (classeur, feuille, Userform), le mot-clé Me désigne l'objet auquel est dédié le module. A utiliser préférentiellement, c'est plus court et sans risque de se tromper. Si on l'omet devant le nom d'un contrôle, aucune incidence car le contrôle ne peut alors être que celui inclus dans le Userform...

Ensuite, il est évident que l'on interviendra lors de la saisie de la date, donc sur évènement de la TextBox, mais l'évènement Change (déclenché à chaque frappe d'un caractère n'est pas l'évènement adéquat. Il convient d'intercepter la validation de la saisie par l'utilisation pour la vérifier au moment où il s'apprête à quitter la TextBox. Parmi les évènements qui surviennent à ce moment, BeforeUpdate paraît le mieux adapté à la situation :

Private Sub Naissance_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If Naissance.Value <> "" And Not IsDate(Naissance.Value) Then
        MsgBox "Saisir une date valide ! [format jj/mm/aaaa]", vbCritical, "Saisie erronée"
        Naissance.Value = "": Cancel = True
    End If
End Sub

Ainsi lorsque l'utilisateur appuie sur Entrée, ou tabule, ou utilise la souris pour passer sur un autre contrôle après saisie, sa saisie sera vérifiée avant de donner cours à sa manipulation. Si la saisie n'est pas reconnue comme date par VBA, on l'efface, on annule le déplacement du focus qui restera sur la TextBox et l'utilisateur y est renvoyé. Il convient d'exclure l'absence de donnée saisie (qui pourrait bloquer l'utilisateur sans pouvoir sortir...). Si la saisie de cet élément est obligatoire, la présence d'une donnée sera vérifiée à la validation du formulaire... Il convient aussi de se souvenir que lors de l'affectation la date dans une TextBox n'est qu'un texte reconnu convertible en date et qu'il convient de le convertir explicitement pour éliminer le risque d'une conversion automatique (qui se ferait au format de date américain, provoquant une inversion jour/mois).

Cordialement.

bonjour MFerrand et merci, c'est plus clair et plus interessant de se mettre dans la procedure BeforeUpdate, ça marche bien.

et pour le combobox, au cas ou ça servirai aux autres, ce code ci dessous fonctionne bien chez moi

If Me.ComboBox1.Value <> "" And Me.ComboBox1.Value <> Me.ComboBox1.ListIndex Then
    MsgBox "Choisir le type de vehicule dans la liste proposée !", vbCritical, "Saisie erronée"
        ComboBox1.Value = ""
        ComboBox1.BackColor = vbRed: Cancel = True

merci, sujet resolu

Rechercher des sujets similaires à "verification donnees textbox combobox notif"