Bonjour du lundi Humanum ,
Ce n'est pas mon code qui est en cause mais votre code de saisie d'une nouvelle maintenance.
Gardez à l'esprit que dans votre Userform de saisie vous utilisez des Textbox pour la date et le nombre d'heures. Quand vous transférer ces données sur la feuille de calcul, vous effectuez l'équivalent d'une saisie de textes et non pas de nombres (une date est représentée par un nombre au sein d'Excel).
Pour vous en convaincre (pendant la phase de test), élargissez vos colonnes "Date" et "Heures" et appliquez pour ces deux colonnes l'alignement "Standard". Après une insertion, vous verrez le contenu de ces deux cellules alignés à gauche (texte) et non pas à droite comme des nombres.
J'ai refait un code pour la validation des saisies du userform (bouton "Valider") avec vérifications des saisies (vérification basique pour ce qui est de la date). Les dates seront de vraies dates au sens d'Excel (idem pour les heures) .Cela devrait répondre à vos besoins, du moins je l'espère.
Private Sub Valider1_Click()
Dim ligne&, j&, colonne&, pasOK$, s$
If ComboBox1.ListIndex < 0 Then MsgBox "Veuillez sélectionner une machine, svp.", vbCritical: Exit Sub
ligne = 4 + ComboBox1.ListIndex
For j = 2 To 9999 Step 4
If Trim(Cells(ligne, j)) = "" Then colonne = j: Exit For
Next j
If colonne = 0 Then MsgBox "Plus aucune cellule vide disponible pour insérer une maintenance.": Exit Sub
On Error Resume Next
Cells(ligne, colonne).NumberFormat = "dd/mm/yyyy": Cells(ligne, colonne) = CDate(TextBox1)
If Not IsDate(Cells(ligne, colonne)) Then pasOK = "date"
If Val(Format(Cells(ligne, colonne), "00")) <> Val(TextBox1) Then pasOK = "date"
On Error GoTo 0
Cells(ligne, colonne + 1).NumberFormat = "#,##0": Cells(ligne, colonne + 1) = Int(Val(TextBox2))
If Not Application.IsNumber(Cells(ligne, colonne + 1)) Then pasOK = pasOK & "heure"
If Cells(ligne, colonne + 1) <= 0 Then pasOK = pasOK & "heure"
If ComboBox2.ListIndex < 0 Then pasOK = pasOK & "huile"
Cells(ligne, colonne + 2) = ComboBox2.Text
If ComboBox3.ListIndex < 0 Then pasOK = pasOK & "air"
Cells(ligne, colonne + 3) = ComboBox3.Text
If pasOK = "" Then
ToutOrdonner
Unload Me
Else
Cells(ligne, colonne).Resize(, 4).ClearContents
If InStr(pasOK, "date") > 0 Then s = s & vbLf & " La date"
If InStr(pasOK, "heure") > 0 Then s = s & vbLf & " Le nombre d'heures"
If InStr(pasOK, "huile") > 0 Then s = s & vbLf & " Le filtre à huile"
If InStr(pasOK, "air") > 0 Then s = s & vbLf & " Le filtre à air"
MsgBox "Les saisies suivante sont incorrectes !" & s, vbCritical
End If
End Sub