Validation de données en VBA

Bonjour au forum,

Je travaille depuis quelques temps sur un fichier excel permettant de gérer les contrôles de qualité interne dans un laboratoire d'analyses médicales.

J'utilise des validations de données pour générer des nouvelles listes déroulantes sur le nouveau fichier créé une fois que celui-ci est rempli au complet (en cliquant sur un bouton "sauvegarder", le fichier en l'état est sauvegardé dans un dossier archive et toute la feuille est effacée puis reconstruite avec les différentes formules et validations de données).

Voici un exemple de code pour reconstruire une colonne listes déroulantes :

Range("K13:K28").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=Visa"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

Ce code fonctionne et me permet d'intégrer une liste déroulante dans chaque cellule de la colonne "K" ayant comme validation de données la liste "Visa" que j'ai créé.

Mon problème concerne la colonne dans laquelle la date doit être renseignée.

J'ai besoin de restreindre le format de ces dates, tel un masque de saisie. Le format souhaité est JJ.MM.AAAA et je souhaite ajouter un message d'alerte si l'entrée de données n'est pas valide.

En gros, j'aimerais exactement la même chose que le code ci-dessus mais au lieu d'avoir comme restriction une liste, j'aimerais que ce soit comme si je mettais "Date" dans les restrictions en passant par les validations de données, en pouvant choisir le format.

L'un de vous a-t-il compris ce que je voulais dire et surtout, aurait-il une idée de solution ?

Un grand merci d'avance !

Nico.

Bonjour Nico, bonjour le forum,

Essaie avec la macro événementielle Change ci-dessous à adapter et à mettre dans l'onglet adéquat :

Private TEST As Boolean 'déclare la variable TEST

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
If TEST = True Then Exit Sub 'si TEST est [Vrai] sort de la procédure
'si le changemet a lieu ailleurs qu'en L13:L18 (à adapter), sort de la procédure
If Application.Intersect(Target, Range("L13:L18")) Is Nothing Then Exit Sub
TEST = True 'définit la variable TEST [Vrai]
If IsDate(Target.Value) = False Then 'condition : si la valeur dans la celllue n'est pas une date valide
    MsgBox "Date invalide !" 'message
    Target.ClearContents 'efface la date
    Target.Select 'sélectionne la cellule
Else 'sinon (si date valide)
    Target.Value = Format(Target.Value, "dd.mm.yyyy") 'modifie le format de la date de la cellule
End If 'fin de la condition
TEST = False 'réinitialise la variable TEST [Faux]
End Sub

Bonjour ThauThème, le forum,

Merci pour ta réponse

Ton code me paraît très intéressant, mais j'aurais besoin de l'intégrer dans le code de mon bouton déjà créé (qui efface toutes les données entrées par l'utilisateur et qui reconstruit la feuille en ajoutant des validations de données par colonnes, comme dans l'exemple de code posté ci-dessus).

As-tu une idée de comment faire cela ?

Merci pour ton aide en tout cas, je débute en VBA et j'avoue avoir quelques difficultés...

Nico.

Re,

Tu demandes de l'aide mais tu ne fournis rien de concret pour qu'on puisse le faire !... Si tu nous donnais le code du bouton je pense qu'on perdrait moins de temps.

Rechercher des sujets similaires à "validation donnees vba"