Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Données validations

  • Initiateur de la discussion Initiateur de la discussion MR71
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

MR71

Guest
Bonjour - j'ai deux colonnes
A B
Date Etat

L'état (col.B) peut avoir 3 statuts : blanc, en cours ou fait. Mais je ne veux pas que la personne qui tapera FAIT oublie de mettre la date en A (c'est le seul état qui nécessite une date impérativement) Je pensais faire avec validation pour pouvoir mettre un message qui explique pourquoi il narrive pas à taper FAIT
Je suis bloquée Merci à vous
 
Dernière modification par un modérateur:
Re : Données validations

Bonsoir MR, bonsoir le forum,

En piece jointe un fichier exemple avec une macro événementielle Change commentée :
Code:
Private test As Boolean 'déclare la variable test
 
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 2 Then Exit Sub 'si le changement à lieu ailleurs que dans la colonne B, sort de la procédure
If test = True Then Exit Sub 'si la variable test est vraie, sort de la procédure
 
test = True 'définit la variable test
If UCase(Target.Value) = "FAIT" Then 'condition 1 : si la donnée est "fait" (accepte les majuscules et/ou les minuscules)
    If Target.Offset(0, -1).Value = "" Then 'condition : si la cellule en colonne A est vide
        Target.ClearContents 'vide la cellule de la colonne B (ceci provoque une boucle de cette macro où intervient la variable test)
        MsgBox "Vous devez presicer la date en colonne A !"
        Target.Offset(0, -1).Select 'sélectionne la cellule de la colonne A
    End If 'fin de la condition
End If
test = False 'redéfinit la variable test
End Sub
 

Pièces jointes

Re : Données validations

Bonsoir Robert
Super, j'ai recopié la macro dans mon dossier et mis mes 3 statuts dans validation et CA FONCTIONNE !!! Je n'étais pas prête de trouver ! Heureusement qu'il y a les JO, je n'ai pas vu le temps passer à chercher une solution
Merci merci merci
 
Re : Données validations

Bjr MR71 et Robert et le forum
Je me permets de poser une question supplémentaire :
Que faut-il préciser dans le code pour obliger la saisie d'une date en colonne A ?
je m'explique : actuellement il est testé si la cellule de la colonne A est vide, peut-on tester si elle contient une date ?

merci de votre attention, cordialement
Gérard
 
Re : Données validations

Bonjour le fil, bonjour le forum,

Nartop, peu-être comme ça :
Code:
Private test As Boolean 'déclare la variable test
 
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dA As Date 'déclare la variable dA (Date de la colonne A)
 
If Target.Column <> 2 Then Exit Sub 'si le changement à lieu ailleurs que dans la colonne B, sort de la procédure
If test = True Then Exit Sub 'si la variable test est vraie, sort de la procédure
 
test = True 'définit la variable test
If UCase(Target.Value) = "FAIT" Then 'condition 1 : si la donnée est "fait" (accepte les majuscules et/ou les minuscules)
    On Error Resume Next 'gestion des erreurs : en cas de bug passe à la ligne suivante
    dA = CDate(Target.Offset(0, -1)) 'définit la variable dA (si la cellule ne contient pas une date cela provoque un bug)
    If Err <> 0 Then 'condition 2 : si bug
        'Target.ClearContents 'peut-être plus nécesssaire dans cet exemple ???
        MsgBox "Vous devez taper une date valide en colonne A !" 'message
        Target.Offset(0, -1).Select 'sélectionne la cellule de la colonne A
    End If 'fin de la condition 2
    On Error GoTo 0 'fin de la gestion des erreurs
End If 'fin de la condition 1
test = False 'redéfinit la variable test
End Sub

ou plus simplement :
Code:
Private test As Boolean 'déclare la variable test
 
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dA As Date 'déclare la variable dA (Date de la colonne A)
If Target.Column <> 2 Then Exit Sub 'si le changement à lieu ailleurs que dans la colonne B, sort de la procédure
If test = True Then Exit Sub 'si la variable test est vraie, sort de la procédure
 
test = True 'définit la variable test
If UCase(Target.Value) = "FAIT" Then 'condition 1 : si la donnée est "fait" (accepte les majuscules et/ou les minuscules)
    If IsDate(Target.Offset(0, -1).Value) = False Then
        'Target.ClearContents 'peut-être plus nécesssaire dans cet exemple ???
        MsgBox "Vous devez taper une date valide en colonne A !" 'message
        Target.Offset(0, -1).Select 'sélectionne la cellule de la colonne A
    End If 'fin de la condition 2
    On Error GoTo 0 'fin de la gestion des erreurs
End If 'fin de la condition 1
test = False 'redéfinit la variable test
End Sub
 
Dernière édition:
Re : Données validations

Merci Robert
C'est parfait (comme d'hab')...!!
personnellement j'ai remis avec ClearContents car cela oblige l'utilisateur à saisir comme il faut....

cordialement, Gérard
 
Re : Données validations

Bonjour Natorp et Robert, Bien vu pour l'obligation de saisir correctement. Ce matin, j'ai donc adapté cette macro à tous mes tablaux, et j'ai changé les colonnes de référence et ça fonctionne ! Une question toutefois : sur d'autres situations, dans un même tableau, plusieurs colonne ne peuvent être remplies que si en colonne A j'ai la date. Puis-je inclure colonne 2, 3, 4.... dans la macro ou je dois répéter cette macro autant de fois que je teste ? Merci en tout cas, nickel !
 
Re : Données validations

Bonjour le fil, bonjour le forum,

Regarde, dans mon exemple la condition est If target.Column <> 2 Then Exit Sub donc le code n'agit que dans la colonne 2 (puisuqe sinon il sort de la procédure). Mais tu peux dire par exemple :
If Target.Column > 1 And Target.Column < 5 Then
'le code...
pour que l'action soit valable dans les colonnes 2 à 4...
End If

J'espère que c'est clair...
 
Re : Données validations

Bonjour Robert
Merci pour cette précision, c'et tout à fait ce que je voulais.
J'ai posé une autre question dans le forum n'ayant pas trouvé la réponse (ce que j'ai trouvé ne fonctionne). C'est figer les volets par macro pour interdire aux utilisateurs des les libérer ! Est-ce possible ?
Merci beaucoup
 
Re : Données validations

bjr le fil, le forum
Après cette amélioration, il y a un petit bug, le test se fait sur la cellule de gauche par rapport à celle où l'on se situe, comment aller voir si la cellule A.. contient une date ? et du coup renvoyer le curseur dans la bonne cellule ?
merci de votre attention, cordialement
Gérard
 
Re : Données validations

Bonjour le fil, bonjour le forum,

Oui Gérard tu as raison, il ne faudra plus utiliser Target.Offset(0, -1) mais plutôt Cells(Target.row, 1) pour sélectionner la cellule de la colonne A.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

A
Réponses
4
Affichages
1 K
K
Réponses
1
Affichages
1 K
K
S
Réponses
2
Affichages
924
sirusg60
S
A
Réponses
4
Affichages
2 K
A
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…