erreur avec Cdate

onyx41

XLDnaute Junior
Bonjour à tout le forum,

Je cherche une solution à mon souci :ma textbox7 ( pour indiquer la date ) ne s'affiche que si la valeur de la combobox5 a la valeur "classé". Si celle-ci est affichée et la date rentrée, pas de souci. Par contre, lorsque ma combo prend la valeur "instance", la textbox est caché, donc, on ne rentre pas de date et là, ça bug => erreur 13 :mad:

Voici mon code :

Private Sub CommandButton1_Click()
' COMMANDE DE RENVOI DE L USF SAISIE VERS BASE
If TextBox9 = "" Then
MsgBox "Veuillez saisir la date de réception ""jj/mm/aaaa""" & vbCr _
& " Ex: 01/01/2008", vbExclamation
Else
If TextBox6 = "" Then
MsgBox "Veuillez saisir la date de transmission ""jj/mm/aaaa""" & vbCr _
& " Ex: 01/01/2008", vbExclamation
Else
If TextBox7 = "" Then

MsgBox "Veuillez saisir la date de classement ""jj/mm/aaaa""" & vbCr _
& " Ex: 01/01/2008", vbExclamation
Else

' Lecture des valeurs de cellules sur L'USF de Saisie

VAR11 = TextBox2.Value
VAR12 = TextBox3.Value
VAR13 = TextBox4.Value
VAR14 = ComboBox1.Value
VAR15 = ComboBox2.Value
VAR16 = CDate(TextBox9.Value)
VAR17 = TextBox5.Value
VAR18 = ComboBox3.Value
VAR19 = CDate(TextBox6.Value)
VAR20 = ComboBox5.Value
VAR21 = ComboBox4.Value
VAR22 = CDate(TextBox7.Value)
VAR23 = TextBox8.Value

etc...

Help....
 

onyx41

XLDnaute Junior
Re : erreur avec Cdate

Merci hasco, ça fonctionne nickel de ce côté. Il a fallu que j'en fasse autant avec la textbox6. Une réponse entraine un autre problème et j'abuse pour ton aide.
Lorsque je prend sur la combo la valeur "instance", ça passe très bien, la "classé" très bien, mais si par hasard, je clique sur la valeur " classé " et que je reprend la valeur "instance", je ne peux plus valider, sauf si je reviens à la valeur "classé".

je joins le fichier

Merci
 

Pièces jointes

  • essai.zip
    46.9 KB · Affichages: 26
  • essai.zip
    46.9 KB · Affichages: 29
  • essai.zip
    46.9 KB · Affichages: 32

onyx41

XLDnaute Junior
Re : erreur avec Cdate

Désolé Hasco, j'ai du faire une erreur pendant la compression car je n'arrivais pas à le compresser suffisament pour qu'il fasse moins de 50Ko, mais j'essaierais ce soir de le repasser.
Petite question au passage, comment peux t'on faire lorsqu'il fait davantage en poids ?
 

onyx41

XLDnaute Junior
Re : erreur avec Cdate

Et bien voilà, depuis le temps que je me dis de le faire, c'est chose faite et malgré tout une maigre participation à ce forum pour tout ce qu'il m'apporte.

Et une simplicité pour les fichier volumineux, encore merci le forum..

Hasco, dans le coup, je te mets le fichier, mais pas celui que j'ai modifié hier avec tes explications, puisque je ne suis pas chez moi...oups !!
 

Pièces jointes

  • essai.xls
    242.5 KB · Affichages: 64
  • essai.xls
    242.5 KB · Affichages: 57
  • essai.xls
    242.5 KB · Affichages: 98

onyx41

XLDnaute Junior
Re : erreur avec Cdate

Bonjour à tous, je reviens vers vous pour y arriver. Je n'ai plus les erreurs avec Cdate, mes alertes se font bien s'il y a erreurs de saisie, mais lorsque la combo 5 est sur instance, je ne peux plus valider, qui pourrais m'expliquer...

La partie du code :

Private Sub CommandButton1_Click()
' COMMANDE DE RENVOI DE L USF SAISIE VERS BASE
If TextBox9 = "" Then
MsgBox "Veuillez saisir la date de réception ""jj/mm/aaaa""" & vbCr _
& " Ex: 01/01/2008", vbExclamation
Else
If TextBox6 = "" Then
MsgBox "Veuillez saisir la date de transmission ""jj/mm/aaaa""" & vbCr _
& " Ex: 01/01/2008", vbExclamation

Else
If ComboBox5 = "" Then
MsgBox "Veuillez saisir l'état du dossier ""jj/mm/aaaa""" & vbCr _
& " Ex: 01/01/2008", vbExclamation
Else
If ComboBox5 = "Classé" Then
If TextBox7.Visible = True Then
If TextBox7 = "" Then
MsgBox "Veuillez saisir la date de classement ""jj/mm/aaaa""" & vbCr _
& " Ex: 01/01/2008", vbExclamation

Else

' Lecture des valeurs de cellules sur L'USF de Saisie

VAR11 = TextBox2.Value
VAR12 = TextBox3.Value
VAR13 = TextBox4.Value
VAR14 = ComboBox1.Value
VAR15 = ComboBox2.Value
VAR16 = CDate(TextBox9.Value)
VAR17 = TextBox5.Value
VAR18 = ComboBox3.Value
If IsDate(TextBox6.Text) Then VAR19 = CDate(TextBox6.Text) Else VAR19 = ""
VAR20 = ComboBox5.Value
VAR21 = ComboBox4.Value
If IsDate(TextBox7.Text) Then VAR22 = CDate(TextBox7.Text) Else VAR22 = ""
VAR23 = TextBox8.Value


etc...
 
G

Guest

Guest
Re : erreur avec Cdate

bonjour Onyx,

Ca y est le Week-end Rennais est terminé. si tu as envie de te donner l'envie pour une prochaine rencontre va voir : ici

En tout cas c'est sympa de nous avoir rejoint par ta participation comme supporter.

Venons en au fait qui t'occupe,

Voici une solution à ton problème:

Code:
Private Sub CommandButton1_Click()
 
    If Not IsDate(TextBox9) Then
        MsgBox "Veuillez saisir la date de réception ""jj/mm/aaaa""" & vbCr _
               & " Ex: 01/01/2008", vbExclamation
        Exit Sub
    End If
 
    If Not IsDate(TextBox6) Then
        MsgBox "Veuillez saisir la date de transmission ""jj/mm/aaaa""" & vbCr _
               & " Ex: 01/01/2008", vbExclamation
        Exit Sub
    End If
 
    If TextBox7.Visible And Not IsDate(TextBox7.Text) Then
        MsgBox "Veuillez saisir la date de classement ""jj/mm/aaaa""" & vbCr _
               & " Ex: 01/01/2008", vbExclamation
        Exit Sub
    End If
 
    If ComboBox5.ListIndex = -1 Then
        MsgBox ComboBox5.Value
        MsgBox "Veuillez saisir l'état du dossier ""jj/mm/aaaa""" & vbCr _
               & " Ex: 01/01/2008", vbExclamation
        Exit Sub
    End If
 
    'Insertion d'une nouvelle ligne dans la base de données avec recopie des formules
    Sheets("Base").Select
    Range("A6").Select
    Application.CutCopyMode = True
    Selection.EntireRow.Insert
    Rows("6:6").Select
    Selection.RowHeight = 50
    Selection.Interior.ColorIndex = xlNone
    Selection.Font.Bold = False
    Range("N5:Q5").Select
    Selection.AutoFill Destination:=Range("N5:Q6"), Type:=xlFillCopy
 
    'Insertion des cellules dans la base de données
    Range("A6").Value = TextBox2.Value
    Range("C6").Value = TextBox3.Value
    Range("D6").Value = TextBox4.Value
    Range("E6").Value = ComboBox1.Value
    Range("F6").Value = ComboBox2.Value
    Range("B6") = CDate(TextBox9.Text)
    Range("G6").Value = TextBox5.Value
    If ComboBox3.ListIndex > -1 Then Range("H6").Value = ComboBox3.Value
    Range("B6") = CDate(TextBox6.Text)
    Range("M6").Value = ComboBox5.Value
    If ComboBox4.ListIndex > -1 Then Range("K6").Value = ComboBox4.Value
    Range("J6") = CDate(TextBox7.Text)
    Range("L6").Value = TextBox8.Value
 
    Range("A6").Select
    [B1] = CInt(TextBox2.Value)
    Unload USFSaisie
End Sub

1 - Après le test d'un contrôle s'il celui n'est pas renseigné (comboboxN.listindex=-1 ou not isdate(textboxN.text) on averti et on sort de la procédure d'enregistrement.

2 - Pour les combobox la Propriété Listindex identifie l'élément actuellement sélectionné dans un contrôle listbox ou combobox en retournant un numéro d'index de -1 (aucun élément sélectionné) à n (Combobox.count-1). Si l'utilisateur rentre une valeur manuellement et que cette valeur n'est pas dans la liste la propriété Value du combo sera la valeur rentrée et la propriété Listindex vaudra -1. Donc si tu veux que l'utilisateur ne rentre pas d'autre valeur que celles de la combo, il vaut mieux utiliser ListIndex pour tester. Sinon, tu utilises Value ou Text, mais là attention à la cohérence des données.

3- Tu peux changer tes évènements Exit des textbox comme suit:

Code:
Private Sub TextBox6_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Not isDate(TextBoxN.Text ) Then
    MsgBox "Saisir la date au format ""jj/mm/aaaa""" & vbCr _
           & "                Ex: 01/01/2008", vbExclamation
        TextBox6 = ""
        Cancel = True
    End If
End Sub

4 - En général on choisit soit de tester les valeurs des contrôles au moment de la saisie( évènement change et/ou exit) soit de tester en une seule fois avant enregistrement. Ce qui permet d'éclaircir et d'alléger le code.

comme il n'y avait aucune données dans ton classeur, je n'ai pas fait de test.

A bientôt
 
Dernière modification par un modérateur:

onyx41

XLDnaute Junior
Re : erreur avec Cdate

Super hasco, ça fonctionne mais il a fallu que je rajoute ta première ligne de code que tu m'as donnée pour éviter le bug.

Tant que j'y suis, j'ai un autre USF qui me reprend les lignes et me permet de modifier, j'ai donc repris les avertissements en cas de modif de date, seulement, en cas de mauvaise rentrée, plutôt que de remette la textbox vide, je voudrais qu'il me garde la date de départ... coment faire ???
 
G

Guest

Guest
Re : erreur avec Cdate

Onyx bonjour,
Hello le forum,

Lorsque tu renseignes ton textbox ; par exemple en faisant: TextBox1.Text=range("A1").text

Complètes en renseignant également la propriété tag: TextBox1.Tag=TextBox1.Text (ou range("A1").Text)

Puis lorsque tu fais la vérification des modifications, si celles-ci ne sont pas bonnes tu fais TextBox1.Text=Tag et si elles sont bonnes tu fais TextBox.Tag=TextBox1.Text ce qui rétablira l'ancienne valeur ou conservera la dernière valeur correcte du textBox.

ici la propriété Tag permet de conserver la valeur d'origine du textBox. Elle peut aussi servir à d'autres renseignement comme par exemple l'adresse d'une cellule ou un message à affiché etc, etc....

A bientôt
 

Statistiques des forums

Discussions
312 331
Messages
2 087 355
Membres
103 528
dernier inscrit
hplus