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 :

Conversion/filtre date via macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Master Ingénieur Industriel
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut Conversion/filtre date via macro
    Bonjour,


    Je rencontre un soucis lors de l'utilisation d'une macro VBA.

    Je réalise un filtre avancé qui doit notamment filtrer en fonction des dates.

    Je souhaite pouvoir obtenir la ligne correspondant à la date PRECISE (avec l'heure) voulue par exemple "21/12/18 00:01" ou toute les lignes comprises entre 2 dates " >21/12/18 00:01" et " <15/01/18 15:03". (ou juste toutes les lignes "> 25/03/18 18:06")

    Le problème que je rencontre est que le filtrage "plus grand et/ou plus petit que" ne fonctionne qu'avec l'heure "00:00". J'aimerai pouvoir être plus précis que cela.


    Voici le code de ma macro :

    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
    Sub Filter5()
    '
    ' Filter5 Macro
     
     
    ' Mémorise le contenu de F5 et G5
        dat1 = [F5].Value: dat2 = [G5].Value
    ' Si les deux cellules ne sont pas vide => on convertit dat1 en nombre
        If Len(dat1) > 0 And Len(dat2) > 0 Then
    ' On mémorise temporairement les valeurs
        [F5].Value = Left(dat1, 1) & Round(CDbl(CDate(Mid(dat1, 2))), 6)
        [G5].Value = Left(dat2, 1) & Round(CDbl(CDate(Mid(dat2, 2))), 6)
     
        End If
    ' Si F5 contient une date ET que G5 n'en contient pas ET que le premier caractère n'est pas un nombre
     
        If Len(dat1) > 0 And IsEmpty(dat2) And (IsNumeric(Left(dat1, 1)) = False) Then
     
        [F5].Value = Left(dat1, 1) & Round(CDbl(CDate(Mid(dat1, 2))), 6)
     
        End If
     
        If Len(dat2) > 0 And IsEmpty(dat1) And (IsNumeric(Left(dat2, 1)) = False) Then
     
        [G5].Value = Left(dat2, 1) & Round(CDbl(CDate(Mid(dat2, 2))), 6)
     
        End If
    ' On filtre avec les valeurs numériques des dates
     
        Sheets("FMEA").Range("B17:X8000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
            Sheets("FMEA").Range("B4:X5"), Unique:=False
        Range("D11").Select
        ActiveCell.FormulaR1C1 = "=SUBTOTAL(3,R[7]C[-1]:R[7000]C[-1])"
        Range("D12").Select
    ' On remet l'ancien contenu des cellules
     
        [F5].Value = dat1: [G5].Value = dat2
    End Sub

    Nom : Capture.PNG
Affichages : 184
Taille : 19,8 Ko

    Sur le screen, si je filtre => n'affiche aucune cellule. Si je remplace le 00:15 par 00:00 => filtre correctement

    Si quelqu'un a une idée, je suis preneur .

    Pour info : Les cellules des colonnes que je souhaite trier ont des formules du type : =IF(ROW(I21)<16;"";IF(ISBLANK(DATA!E5);"";DATA!E5)) => je les copie depuis la feuille DATA et elles ont le format JJ/MM/AAAA hh:mm. Je suis obligé de convertir avec la macro, juste avant de filtrer car lorsqu'on utilise un filtre avancé via une macro VBA, la date est considérée comme étant au format US (MM/JJ/AAAA hh:mm)

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    je sais pas si j'ai compris mais pour moi et dans un cas similaire à savoir :
    en A1 j'ai la date de départ et en B1 j'ai la date arrivée
    et de A2 à A 20 j'ai des dates donc j'ajoute une formule à partir de B2 : SI(ET(A3>$A$1;A3<$B$1);1;0)
    et puis je filtre selon 1 ou 0
    je sais pas si ça répond à ta demande !!! bonne journée

  3. #3
    Membre régulier
    Homme Profil pro
    Master Ingénieur Industriel
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Merci pour ta réponse rapide !

    Filtrant plusieurs variables, j'utilise la macro qui se trouve dans mon premier message. Celle-ci effectue un filtre avancé. un tel filtre via une macro VBA considère les dates aux formats US (MM/JJ/AAAA hh:mm) alors que mes dates sont aux formats JJ/MM/AAAA hh:mm. Je ne pense donc pas que ta proposition puisse m'aider :/

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Pour les filtres avancés, voir tutoriel filtres avancés

    Remarques

    [A5] signifie
    évaluer le contenu de la cellule A5
    Donc la propriété
    .Value
    est ici redondante.

    Il est prudent de bien rattacher les objets Range à leur feuille par "."

    Je n'ai pas regardé ton code.
    As-tu d'abord testé sur Excel tableur?
    (Il faut commencer par là)

    En termes de dates, j'ai informé les millénaires.

    Pour le seul 1er champ

    Si
    en F5, j'écris
    Start
    en F6,
    >01/12/2017 00:15:00
    en F8, j'écris
    Start
    en F9, F10, F11, F12

    11/11/2017 0:15
    1/12/2017 0:10
    5/12/2017 10:00
    1/12/2017 0:30
    Le filtre avancé est effectif.

    Je pense que tu dois avoir un problème de format date.

    Essaie d'abord sur Excel tableur, en utilisant l'enregistreur de macro pour avoir une base.
    Puis reviens avec ce seul résultat Excel tableur.

    Nous étudierons ton code ultérieurement.

  5. #5
    Membre régulier
    Homme Profil pro
    Master Ingénieur Industriel
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Avant de réaliser ma macro, j'ai effectué des tests sur un tableur. Le filtre avancé était effectif avec tout les paramètres encodés. J'ai enregistré la macro. Je l'ai ensuite testé et c'est la que le problème est arrivé. VBA traite les dates qui se trouvent dans "criteria range" comme étant aux formats US. Du coup j'ai rajouté une conversion dans la macro (pour passer de MM/JJ/AAAA hh:mm(:ss) à JJ/MM/AAAA hh:mm(:ss) ), juste avant que le filtrage s'effectue.

    Pour résumer : si je rentre une date précise ex : 18/09/18 16:22 => j'obtiens la ligne que je souhaite. Si je rentre un critère pour avoir les dates ">18/09/17 17:54" dans la colonne "Start". Cela ne fonctionne pas sauf si je mets l'heure à 00:00. Ce problème doit sans doute provenir de ma conversion mais je n'arrive pas à résoudre cela.


    Le résultat de l'enregistrement de la macro sans la conversion était (c'est un simple filtre avancé, comme on peut le faire manuellement, il suffit d'enlever la conversion du dessus dans le code du premier message) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Filter5()
     
        Sheets("FMEA").Range("B17:X8000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
            Sheets("FMEA").Range("B4:X5"), Unique:=False
        Range("D11").Select
     
    End Sub
    Ce n'est pas une macro compliquée. Elle doit simplement permettre à une personne qui n'a pas l'habitude d'utiliser excel et/ou des filtres avancés d'avoir à "juste cliquer sur un bouton" pour filtrer les données qu'elle souhaite.

  6. #6
    Membre régulier
    Homme Profil pro
    Master Ingénieur Industriel
    Inscrit en
    Novembre 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2018
    Messages : 9
    Par défaut
    Après divers tests, cela provient (comme je pouvais le supposer) de l'utilisation de Round().

    J'ai beau chercher sur divers sites, je ne trouve pas (je ne dis pas qu'il n'en existe pas...) de fonction qui peut me permettre de résoudre ça.

  7. #7
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    re bonsoir
    peux tu joindre un petit classer de quelque ligne avec données fictive??? sans code et expliquer ce que tu cherches à faire??

  8. #8
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Il te faut sans doute raisonner avec des critères calculés comme le montre Philippe dans son tutoriel et dans cette discussion

Discussions similaires

  1. [XL-2007] Conversion de date dans macro VBA
    Par Kheart dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/11/2018, 17h34
  2. Changement filtre TCD via macro
    Par azkaet dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/06/2018, 18h25
  3. [Toutes versions] filtre TCD via macro vba sur texte contenu
    Par fomy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/08/2012, 09h35
  4. [WD14] Conversion de DATE pour SQL Server via OLE DB
    Par A.S.I Gérard dans le forum WinDev
    Réponses: 10
    Dernier message: 30/06/2009, 17h27
  5. Macro conversion de date
    Par malabarbe dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/06/2008, 12h30

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