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 :

Filtrer dates non valides et colorer leurs cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 73
    Par défaut Filtrer dates non valides et colorer leurs cellules
    Bonjour,
    J’ai encore recours à vos lumières. Voici mon problème.
    Dans un classeur excel (office 2003), j’ai en colonne i des dates qui devraient être comprises entre le 01/01/2016 et le 31/12/2017.
    Des fautes de frappe (oubli de barres de séparation, mois supérieurs à 12, erreurs dans le millésime…) sont susceptibles de se produire et se produisent souvent !
    Je cherche à coder une macro qui filtrerait les cellules au contenu non valide et les colorerait.
    Toutes mes recherches et tous mes essais ont échoué …
    Merci à ceux qui pourraient me mettre sur la voie.
    Homère

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 14
    Par défaut
    Hello!

    Alors moi je suis un autodidacte de type débrouillard donc la solution que je vais te proposer est très certainement pas la plus optimisée. Mais ça marche

    En I tu as tes dates à vérifier de la ligne 1 à X
    Tu choisis deux colonnes vides, on va dire AA et AB
    en AB tu écris "01/01/2016" et tu tires la case jusqu'à obtenir "31/12/2017". Donc en AB tu as peu ou prou 700 cases avec en fait la liste des dates "valides". Il faut que la date en I corresponde à une date de la liste en AB.

    Ben derrière tu écris en VBA:

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    dim i as integer, j as integer
     
    for i = 1 to X
    for j = 1 to 700
    if cells(i,9).value=cells(j,28).value then
    cells(i,27)=1
    Next
    Next

    Derrière tu fais juste une règle de mise en page conditionnelle puisque en gros si la date est bonne, sur la même ligne la colonne AA contiendra un 1.

    Voilà c'est grossier mais ça ne peut pas ne pas marcher ^^

  3. #3
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Sous quel format sont les dates non correctes?
    Ne peux-tu pas passer par une mise en forme conditionnelle tel que les dates qui ne sont pas comprises entre 01/01/2016 et 31/12/2017 soient colorées en rouge?

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 73
    Par défaut Filtrer dates non valides
    Salut;
    Et un grand merci pour vos réponses rapides.
    Les dates de la colonne i sont au format "Date".
    Je ne suis pas un champion de la mise en forme conditionnelle mais je vais piocher le sujet.
    Merci encore, je vous tiens au curant de l'évolution du sujet.
    Homère

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2013
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 73
    Par défaut Filtrer dates non valides
    Bonjour à tous,
    J'y suis arrivé (ou presque) en procédant en deux étapes.
    Je repère et colore d'abord les dates dont la rédaction est fautive. Je repère et colore ensuite les dates qui sont en dehors de la période de validité. Je masque les lignes dont les dates ne sont pas colorées. Une boite de dialogue invite à rectifier les dates non conformes, Ok et la macro affiche les lignes masquées. Voici le code :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    Option Explicit
    Sub Colorer_Dates()
      Dim Cel As Range, Pg As Range, Pg1 As Range
      Dim wks As Worksheet
      Dim An As Integer, Dl As Integer, i As Integer
     'On définit les variables :
      An = 2017
      Set wks = ThisWorkbook.Sheets("Feuil1")
      Dl = wks.Range("C65536").End(xlUp).Row
      Set Pg = wks.Range("i2:i" & Dl)
     
      Application.ScreenUpdating = False
    'On colore les celliles dont le contenu n'est pas un dormat date valide :
      With wks
            For Each Cel In Pg
        If IsDate(Cel.Value) = False Then
            Cel.Interior.ColorIndex = 7
         End If
        Next Cel
     
    'On filtre les dates dui n'appartiennent pas à la période de validiré :
        wks.Range("A1:AD" & Dl).AutoFilter Field:=9, Criteria1:="<1/1/" & An - 1, Operator:=xlOr, Criteria2:=">10/30/" & An
        Set Pg1 = wks.Range("i2:i" & Dl).SpecialCells(xlCellTypeVisible)
    'On colore les cellules dont les dates sont en dehors de la période de validité :
        For Each Cel In Pg1
            Cel.Interior.ColorIndex = 7
           Next Cel
        End With
        wks.ShowAllData
        wks.AutoFilterMode = False
     
    'On filtre toutes les cellules colrées :
            For Each Cel In Pg
        If Not Cel.Interior.ColorIndex = 7 Then
          Cel.EntireRow.Hidden = True
         End If
        Next Cel
      Application.ScreenUpdating = True
     MsgBox "Les dates non valides sont colorées.Rectifiez-les et cliquer sur OK"
     
     'On affiche les lignes massquées :
      Application.ScreenUpdating = False
        For Each Cel In Pg
           Cel.EntireRow.Hidden = False
         Next Cel
      Application.ScreenUpdating = True
     
    End Sub
    Ça fonctionne. Seul bémol, les dates dont le mois est supérieur à 12 ne sont pas reconnues comme fautives si le jour est inférieur à 13...
    Je continue à chercher. Si vous avez une idée, je suis preneur !
    Homère

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wks.Range("A1:AD" & Dl).AutoFilter Field:=9, Criteria1:="<" & Format(DateSerial(An - 1, 1, 1), "dd/mm/yyyy"), Operator:=xlOr, Criteria2:=">" & Format(DateSerial(An, 10, 30), "dd/mm/yyyy")

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

Discussions similaires

  1. [2.x] Problème 'affichage d'erreur sur champ Date non valide
    Par charliejo dans le forum Symfony
    Réponses: 3
    Dernier message: 21/03/2015, 13h50
  2. Réponses: 1
    Dernier message: 29/04/2010, 09h31
  3. date non valide + liste déroulante
    Par bigboy dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/10/2009, 21h54
  4. Format de date non valide
    Par nbinot dans le forum PL/SQL
    Réponses: 13
    Dernier message: 29/10/2008, 17h05
  5. [VB.Net] cast du type 'DataRowview' en type 'Date' non valide
    Par badnane2 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/06/2006, 15h50

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