C'est où cette Case A2 ?Dans les listes d'appel, les noms et autres renseignements doivent apparaitre sous deux conditions
pour info- La date indiquée en haut de la liste (case A2 pur moi)
cette façon de faire permet de ne pas répéter une partie du CodeWith...End With
With WorkSheet("xxxxxx") 'pour ne pas répéter WorkSheet("xxxxxx")
.Activate
With .Range("A1") 'pour ne pas répéter .Range("A1")
.Interior.ColorIndex=VbRed
.BorderAround.Linestyle=xlContinuous
End With
End With
C'est ce que j'avais fait au départ , d'ou ma question du post#168Perfectible effectivement parce qu'il faut que la liste se remette à zéro pour éviter que les noms s'ajoutent aux précédents mais c'est déjà très bien.
'Controls de saisie (longueur, caractères...)
'les contraintes dans les évènements pour chaque type de textbox
Private Sub textDate_Change() 'control de saisie de Date au format "dd/mm/yyyy"
Dim T$
T = Mid(textDate.Text, 1, 10) 'on limite à 10 caractères
If Mid(T, 1, 1) > 3 Then T = "" 'si le premier caractère (=dizaine jour) >3 on le supprime
If Len(T) = 2 And Val(T) > 31 Then T = Mid(T, 1, 1) 'si les deux chifres du jours forment un nombre >31 ==> on supprime le second
If Len(T) >= 3 And Mid(T, 3, 1) <> "/" Then T = Mid(T, 1, 2) 's'il y a 3 car et que le 3eme est différent du "/" on garde les 2 premiers (= Jour)
If Len(T) >= 4 And Val(Mid(T, 4, 1)) > 1 Then T = Mid(T, 1, 3) 's'il y a 4 car, et que le 4eme (dizaine mois) >1 on ne garde que les 3 premiers
If Len(T) >= 5 And Val(Mid(T, 4, 2)) > 12 Then T = Mid(T, 1, 4) 'si le mois >12, on supprime l'unité du mois
If Len(T) >= 6 And Mid(T, 6, 1) <> "/" Then T = Mid(T, 1, 5) 's'il y a 6 car et que le 6eme est différent du "/" on garde les 5 premiers (= Jour/Mois)
If Len(T) = 10 And Not IsDate(T) Then MsgBox T & vbCrLf & "la date entrée n'est pas valide" & vbCrLf & "veuillez recommencer": T = "": 'le nombre de caractères est bon, mais on vérifie s'il s'agit d'une date valide
[COLOR=rgb(226, 80, 65)] If Len(T) < 10 Then MsgBox T & vbCrLf & "la date entrée n'est pas valide" & vbCrLf & "veuillez recommencer": T = "": ' on vérifie qu'il y a bien 10 caractères[/COLOR]
textDate = T 'on renvoie T
End Sub
'********************************************Calcul du "Doit"*************************************
Me.Txt_Paiement = IIf(Me.Txt_Paiement = "", 0, Me.Txt_Paiement)
Me.Txt_Doit = Format(CDbl(Me.Txt_TOTAL) - CDbl(Me.Txt_Paiement), "0 €")
Me.Txt_Doit.Value = Format(Me.Txt_Doit.Value, "0 €") 'Formatage
Me.Txt_Doit.BackColor = Array(&HEB, &H80FF&)(Abs(CDbl(Txt_Doit) <= 0)) 'coloration rouge si doit la case doit est positive
End Sub
'******Calcul du "Doit" suite : mise à jour de la case doit sans passer par le bouton "calculer" mais juste au clic sur la case ******
Private Sub Txt_Doit_Enter()
Me.Txt_Paiement = IIf(Me.Txt_Paiement = "", 0, Me.Txt_Paiement)
Me.Txt_Doit = Format(CDbl(Me.Txt_TOTAL) - CDbl(Me.Txt_Paiement), "0 €")
Me.Txt_Doit.Value = Format(Me.Txt_Doit.Value, "0 €") 'Formatage
Me.Txt_Doit.BackColor = Array(&HEB, &H80FF&)(Abs(CDbl(Txt_Doit) <= 0)) 'coloration rouge si doit la case doit est positive
End Sub
Bonne journéeJe viens vous livrer la version qui sera opérante pour cette saison estivale.
J'ai compris pourquoi cela ne fonctionne pas : la vérification se fait au "change", du coup dès le premier caractère frappé la proposition est fausse. Rien n'est résolu mais c'est déjà top pour moi d'avoir compris çaIf Len(T) < 10 Then MsgBox T & vbCrLf & "la date entrée n'est pas valide" & vbCrLf & "veuillez recommencer": T = "": ' on vérifie qu'il y a bien 10 caractères textDate = T 'on renvoie T
C'est la même chose lorsque tu vides les contrôles date .(d'où mon post #177)J'ai compris pourquoi cela ne fonctionne pas : la vérification se fait au "change", du coup dès le premier caractère frappé la proposition est fausse. Rien n'est résolu mais c'est déjà top pour moi d'avoir compris ça