Bonjour,
en fait c'est ce que je cherche, au bout d'un certain temps la mise en forme de la cellule date ne correspond plus au format "français".
Il faut que je rajoute une ligne de code pour "maitriser" cette mise en forme.
@ bientôt
LouReeD
Nota : le code est accessible, vous pouvez le modifier comme bon vous semble pas de royalties à donner !!!
EDIT :
sur le code de la feuille "Ecritures" modifier le code Private Sub Worksheet_Change(ByVal Target As Range)
avec celui - ci : (Attention le code a été édité par rapport à l'autre version...)
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Dim La_Colonne As Range, Réponse
Dim Teste As Variant
Dim Le_type As Range, Nom_type As Range
If Target.Count > 1 Then
En_Cours = False
Ligne_En_Cours = 0
Exit Sub
End If
If Target.Row < ([_Date].Row + 1) Then Exit Sub
Application.EnableEvents = False
If Not Intersect(Target, Range("Col_Date")) Is Nothing Then
If Target.Value <> "" And Target.Offset(, 1).Value = "" Then
Dim Date1, Date2, Date3 As Date
Dim Flag As Integer
' tests de validité de la date entrée avec correction automatique s'il le faut
If Not IsDate(Target.Value) Then ' si ce n'est pas une date
Target.Value = ""
Target.Activate
Application.EnableEvents = True
Exit Sub
ElseIf Year(Target.Value) >= Year(Date_Deb) Then ' c'est une date "entière" avec année donc on continue
Target.NumberFormat = "dd/mm/yyyy"
Target.Offset(, 1).Activate
ElseIf Target.Value > 0 And Target.Value < 32 Then ' si c'est juste un jour compris entre 1 et 31 compris
' on "fabrique" le reste de la date avec le mois en cours et l'année en cours
Target.NumberFormat = "dd/mm/yyyy"
Target.Value = Format(Day(Target.Value + 1) & "/" & Month(Now) & "/" & Year(Now), "MM/DD/YYYY")
If Not IsDate(Target.Value) Then ' si cette fabrication arrive sur une date non valide on efface exemple : 31/06/2017
Target.Value = ""
Target.Activate
Application.EnableEvents = True
Exit Sub
End If
ElseIf Format(Target.Value, "MM/DD/YYYY") < Format([Date_Début_Suivi].Value, "MM/DD/YYYY") Then ' si la date est inférieure à la date de début de suivi
Réponse = MsgBox("Attention !" & Chr(10) & "Vous êtes en cours d'ajout d'opération antérieur à la date de début du suivi." & Chr(10) & _
Chr(10) & "Voulez-vous continuer cette opération ?", vbYesNo, "Date antérieur à la date de début de suivi")
If Réponse <> 6 Then
Target.Value = ""
Target.Activate
Application.EnableEvents = True
Exit Sub
Else
[Date_Début_Suivi].Value = Format(Target.Value, "MM/DD/YYYY")
Date_Deb = [Date_Début_Suivi].Value
Target.Offset(, 1).Activate
End If
ElseIf Format(Target.Value, "00") > 31 Or Format(Target.Value, "00") < 1 Then 'si un "42" est entré par exemple, Excel le transforme
' en 11/02/1900 hors on en veut pas !
Target.Value = ""
Target.Activate
Application.EnableEvents = True
Exit Sub
End If
' si tout est bon on est bien "en cours" de saisie d'opération, on est en cours de "modification" au niveau de la ligne Excel Ligne_En_Cours
En_Cours = True
Modification = True
Ligne_En_Cours = Target.Row
ElseIf Target.Value = "" And Target.Offset(, 1).Value <> "" Then
Application.Undo
Target.Offset(, 0).Activate
En_Cours = False
Ligne_En_Cours = 0
ElseIf Target.Value <> "" And Target.Offset(, 1).Value <> "" Then
Dim Saison_date1, Saison_date2, N_date, A_date As Date
N_date = Target.Value
Saison_date1 = "01/01/" & Year(Target.Value)
Saison_date2 = "31/12/" & Year(Target.Value)
Application.Undo
A_date = Target.Value
If (A_date >= Saison_date1 And A_date <= Saison_date2) Then
Target.Value = N_date
Target.Offset(, 1).Activate
Else
Réponse = MsgBox("Opération impossible !" & Chr(10) & "Vous êtes en cours de modification de date" & Chr(10) & "qui change l'année de l'opération enregistrée !" _
& Chr(10) & "Voulez-vous continuer cette opération ?", vbYesNo, "Changement d'année")
If Réponse <> 6 Then
Target.Offset(, 0).Activate
Else
Target.Value = N_date
Target.Offset(, 1).Activate
End If
End If
En_Cours = False
Ligne_En_Cours = 0
Else
Target.Offset(, 1).Activate
End If
' s'il y a modification de valeur dans la colonne Compte
ElseIf Not Intersect(Target, Range("Col_Compte")) Is Nothing Then
If Target.Value <> "" Then Target.Offset(, 1).Activate
' s'il y a modification de valeur dans la colonne Libellé principal
ElseIf Not Intersect(Target, Range("Col_Lib_Principal")) Is Nothing Then
If Target.Value <> "" Then Target.Offset(, 1).Activate
' s'il y a modification de valeur dans la colonne Libellé secondaire
ElseIf Not Intersect(Target, Range("Col_Lib_Auto")) Is Nothing Then
If Target.Value <> "" Then Target.Offset(, 1).Activate
' s'il y a modification de valeur en colonne Mode de paiement
ElseIf Not Intersect(Target, Range("Col_Mode")) Is Nothing Then
' alors on lance la procédure de gestion des numéros de chèque
Call Numéro_de_chèque(Target)
Set Le_type = [Choix_Mode_de_Paiement]
For Each Nom_type In Le_type
If Nom_type = Target.Value Then
If Nom_type.Offset(0, 2) = "Crédit" Then Target.Offset(, 2).Activate Else Target.Offset(, 3).Activate
Exit For
End If
Next
Else
Modification = True
End If
Application.EnableEvents = True
On Error GoTo 0
End Sub
à vous relire...