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 des données : date supérieure à celle de la cellule d'à côté [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut Validation des données : date supérieure à celle de la cellule d'à côté
    Bonjour,
    J'ai écris un code pour que dans la colonne "Date de début", j'ai une validation des données pour les dates supérieures au 01/01/2020
    Je voudrais que dans la colonne "Date de fin", j'ai une validation des données pour les dates supérieures à la date de début
    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
        ActiveSheet.ListObjects(1).ListColumns("Date de début").Range.Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop, Operator:= _
            xlGreater, Formula1:="1/1/2020"
            .IgnoreBlank = True
            .ShowInput = True
            .ShowError = True
        End With
        ActiveSheet.ListObjects(1).ListColumns("Date de fin").Range.Select
        With Selection.Validation
            .Delete
            .Add Type:=xlValidateDate, AlertStyle:=xlValidAlertStop, Operator:= _
            xlGreater, Formula1:="=I3"
            .IgnoreBlank = True
            .InCellDropdown = True
     
            .ShowInput = True
            .ShowError = True
        End With
    avec ce code, les 2 colonnes ont la même validation à savoir supérieure au 01/01/2020
    Est-ce que qq'1 peut m'aider, svp. Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Il n'est pas nécessaire de passer par un listobject, ni de sélectionner les plages avant de travailler avec. Le principe est ici, en Excel d'abord*, de savoir comment il faut faire. Tu dois renseigner la cellule d'à côté en laissant la ligne en relative pour que la validation soit correcte sur toutes les données du tableau.

    Nom : 2021-06-09_220529.png
Affichages : 172
Taille : 14,5 Ko

    Attention que tu ne peux pas utiliser les références structurées dans l'outil de validation. En VBA, tu vas donc devoir recomposer l'adresse classique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Test()
      With Range("tableau4[fin]").Validation
        .Delete
        .Add xlValidateDate, , xlGreater, "=" & Range("tableau4[Début]")(1).Address(False, True)
      End With
    End Sub

    La question que je me pose est la suivante: Pourquoi as-tu besoin de réaliser cela en VBA? Normalement, on crée le tableau en Excel et on y met la validation en Excel car elle se propage aux nouvelles lignes. Il est rarement nécessaire de créer le tableau par code vba, voire jamais.

    * VBA pour Excel? Pensez D'ABORD en Excel avant de penser VBA
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 178
    Billets dans le blog
    53
    Par défaut
    Bonjour Pierre,
    Attention que tu ne peux pas utiliser les références structurées dans l'outil de validation.
    Sauf si on utilise la fonction INDIRECT =F2>INDIRECT("t_Data[@Début]")F2 est la cellule à valider (date de fin) et Début la colonne contenant la date de début

    et pour une Validation de donnée-Liste =INDIRECT("t_Ville")

    Par contre =INDIRECT("t_Data[@Fin]")>INDIRECT("t_Data[@Début]") ne fonctionne pas

    Même si je suis prudent quant à son utilisation dû au fait qu'elle soit volatile, il est utile de savoir qu'il est possible de référencer une référence structurée avec la fonctionnalité Validation de données comme la mise en forme conditionnelle avec la fonction INDIRECT
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut Philippe, tu vas bien?

    Oui, sauf que l'on n'utilise pas la "référence" structurée mais son nom => on ne sait donc pas utiliser une référence structurée en validation (c'est juste pour pinailler sur les termes, quoique ).

    Plus sérieusement, je préfère les formules nommées qui s'adapteront aux modifications d'appellation des tableaux et colonnes là où INDIRECT fige les noms dans du hard coding, mais tu as raison de souligner qu'INDIRECT fonctionne également.

    Le lecteur notera que les références classiques s'appuyant sur un tableau structuré s'adaptent comme les structurées à la croissance du tableau. Il peut donc les utiliser sans craindre de ne pas reprendre toutes les données.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 178
    Billets dans le blog
    53
    Par défaut
    Bonjour Pierre,
    Je préfère également l'usage de cellule ou plage nommée d'où ma réserve.
    De plus en utilisant la fonction INDIRECT, on fige le nom de la table structurée et le nom de l'étiquette de colonne comme dans le "HardCodage" en VBA alors qu'en utilisant le gestionnaire des noms, le référencement s'adapte dynamiquement.

    [EDIT]
    Comme solution pour le cas qui nous occupe, j'aurais privilégié évidemment la validation de données avec cellules nommées

    Nom : DataValidation - Référence structurée.png
Affichages : 104
Taille : 40,3 Ko

    La cellule nommée DateDébut fait référence à =t_Data[@Début] et DateFin à =t_Data[@Fin]

    Nom : Gestionnaire des noms - Référence structurée.png
Affichages : 109
Taille : 15,5 Ko
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Mwouais...

    Monter des formules nommées et passer par une validation formulée là ou la validation d'une date suffit me semble un peu lourd, perso . J'ai illustré la formule ">$A2" dans une validation de date qui suffit largement ici, il me semble.

    Mais chacun sa façon de procéder, bien sûr. Perso, plus c'est simple, mieux c'est. J'ai d'autres choses à faire que créer des trucs inutiles pour "complexifier" la solution


    Nom : 2021-06-09_220529.png
Affichages : 155
Taille : 14,5 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut
    Bonjour Pierre, bonjour Philippe,

    Merci pour vos réponses et vos explications ; désolée de ne pas vous avoir répondu plus tôt, j'ai été indisponible involontairement.

    Pierre :
    La question que je me pose est la suivante: Pourquoi as-tu besoin de réaliser cela en VBA? Normalement, on crée le tableau en Excel et on y met la validation en Excel car elle se propage aux nouvelles lignes. Il est rarement nécessaire de créer le tableau par code vba, voire jamais.
    Je comprends la question, mais je travaille sur un fichier dont je ne suis pas l'auteur et il y a une cinquantaine feuilles à traiter.

    En tout cas la solution répond parfaitement à ma demande, encore merci

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

Discussions similaires

  1. [IP-2003] Validation de données : Date supérieure à aujourd'hui
    Par Romeoo dans le forum InfoPath
    Réponses: 2
    Dernier message: 06/07/2009, 11h05
  2. [EXCEL] Validation des données saisies - nouvelle Question :-)
    Par Paloma dans le forum Macros et VBA Excel
    Réponses: 39
    Dernier message: 29/11/2006, 13h28
  3. Réponses: 5
    Dernier message: 01/10/2006, 13h48
  4. [PHP-JS] validation des données
    Par emma des bois dans le forum Langage
    Réponses: 6
    Dernier message: 10/02/2006, 15h28
  5. dbgrid AND validation des données
    Par samlerouge dans le forum Bases de données
    Réponses: 10
    Dernier message: 11/06/2004, 23h08

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