IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Validation de données selon deux conditions [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Par défaut Validation de données selon deux conditions
    Bonsoir à tous,

    Malgré mes recherches, je n'arrive pas à solutionner mon problème qui suit :

    Dans une colonne, j'aimerai empêcher la saisie de date non comprise dans l'année en cours ou la saisie de texte sauf le mot "ANNULEE".

    J'ai essayé le code suivant sans résultat ("erreur 1004") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Not Intersect(Target, Range("M3:M1500")) Is Nothing Then
        If IsDate(ActiveCell.Value) Then
            With Selection.Validation
                .Delete
                .Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="=DATE(YEAR(NOW()),1,1", Formula2:= _
                "=DATE(YEAR(NOW()),12,31"
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = "Attention !"
                .InputMessage = ""
                .ErrorMessage = "Vous devez obligatoirement saisir une date comprise dans l'année en cours !"
                .ShowInput = False
                .ShowError = True
            End With
        Else
            If Target.Value Like "ANNULE*" Then
            'rien
            ElseIf Not Target.Value Like "ANNULE*" And Target.Value Like "*" Then
                With Selection.Validation
                .Delete
                .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="<>""ANNULE*"""
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = "Attention !"
                .InputMessage = ""
                .ErrorMessage = "Vous devez obligatoirement saisir le mot ANNULEE !"
                .ShowInput = False
                .ShowError = True
                End With
            End If
        End If
    End If
     
    End Sub
    Comme je ne suis pas un grand autodidacte, je vous remercie d'avance de me dire où je me plante.

    Cordialement.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pourquoi mélanger validation et évènement Change

    regarde ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Not Intersect(Target, Range("M3:M1500")) Is Nothing Then
        If Target(1, 1).Value <> "" Then
            If IsDate(Target(1, 1).Value) Then
                If Year(Target(1, 1)) <> Year(Date) Then
                    Application.Undo
                    MsgBox "Vous devez obligatoirement saisir une date comprise dans l'année en cours !"
                End If
            ElseIf Not UCase(Target(1, 1)) Like "ANNULE*" Then
                Application.Undo
                MsgBox "Vous devez obligatoirement saisir le mot ANNULEE !"
            End If
        End If
    End If
    End Sub

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    un conseil : toujours écouter avec grande attention les propos de Mercatog



    Sinon, pour le fun, voici (je pense) la condition de validation que tu cherchais. Fallait passer par une formule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
    Formula1:="=OR(AND(" & Selection.Address & ">=DATE(YEAR(NOW()),1,1)," & Selection.Address & "<DATE(YEAR(NOW())+1,1,1))," & Selection.Address & "=""ANNULEE"")"

  4. #4
    Membre averti
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Par défaut
    Bonsoir Mercatog et Joe.levrai,

    Merci à tous les deux pour votre aide si précieuse.

    Je n'ai toujours pas compris pourquoi je m'obstinais à vouloir coder mes validations de données ! ???

    Merci pour le cheminement éclairé et pour votre résolution.

    A bientôt.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ouvrir un état filtré selon deux conditions
    Par Sneige dans le forum IHM
    Réponses: 2
    Dernier message: 08/10/2015, 12h27
  2. copier des lignes selon deux conditions
    Par ghatfan99 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/10/2011, 10h58
  3. Comment trouver les données selon cette condition?
    Par abouilyas dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 04/09/2011, 13h02
  4. Recuperation de données selon condition
    Par gescolino dans le forum Requêtes
    Réponses: 11
    Dernier message: 09/02/2009, 02h25
  5. Peut on faire un selon à deux conditions ?
    Par Celia1303 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 18/10/2005, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo