Données validations

MR71

XLDnaute Junior
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 édition:

Robert

XLDnaute Barbatruc
Repose en paix
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

  • MR_v01.xls
    23 KB · Affichages: 59

MR71

XLDnaute Junior
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
 

natorp

XLDnaute Accro
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
 

Robert

XLDnaute Barbatruc
Repose en paix
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:

MR71

XLDnaute Junior
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 !
 

Robert

XLDnaute Barbatruc
Repose en paix
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...
 

MR71

XLDnaute Junior
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
 

natorp

XLDnaute Accro
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
 

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 393
Membres
103 537
dernier inscrit
alisafred974