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 :

Récupérer la date d'une cellule dans un format précis


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur production
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur production

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut Récupérer la date d'une cellule dans un format précis
    Bonjour

    J'aimerais récupérer la date dans une cellule mais en conservant le format jj-mm-aa. Cependant quand j'utilise la fonction "cell.value" dans VBA, elle prend la valeur au format jj/mm/aaaa

    Voilà le code pour exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim last_line As Date
     
    Cells(50000, ref_column).Select
    Selection.End(xlUp).Select
    last_line = ActiveCell.Value
    Même si la cellule est de type 01-Apr-15 il va chercher la date dans la barre de formule au format 01/04/2015. J'ai cependant besoin de l'autre format pour aller rechercher cette date dans d'autres fichiers que je ne peux pas modifier.

    Existe-il une autre fonction que ".value" pour prendre la valeur affiché et non celle dans la barre de formule?

    Merci

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    tu devrai commencer par lire :

    Comprendre et gérer les dates sous Excel et en VBA


    le format de donnée Date n'as rien à voir avec la façon dont une date est affichée...

    que veux tu faire avec ta variable last_ligne...?.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur production
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur production

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut
    Merci,

    Je vais lire ça ce midi alors.

    En gros avec la variable last_line je veux récupérer la dernière date de ma feuille (la valeur retenue par last_line est par exemple 25/04/2015). Ensuite aller rechercher cette valeur dans un autre fichier excel que je ne peux pas modifier.
    Le problème c'est que dans ce fichier excel les dates apparaissent sous la forme 25-apr-15 et que la formule entrée est : "cellule d'au-dessus + 1", ce qui fait que l'outil de recherche ne retrouve pas la date souhaitée

  4. #4
    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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il y a plusieurs propriétés pour lire le contenu d'une cellule
    Exemple La cellule $D$2 contient une formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SERIE.JOUR.OUVRE(A2;B2)
    et est formatée comme suit jjj* jj/mm/aa
    Le procédure ci-dessous (Excel français)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     With Range("D2")
      Debug.Print .Value
      Debug.Print .Text
      Debug.Print .NumberFormat
      Debug.Print .NumberFormatLocal
      Debug.Print .Formula
      Debug.Print .FormulaLocal
     End With
    Va écrire dans fenêtre d'exécution (Ctrl+G) de l'éditeur VBA
    06/11/2015
    ven 06/11/15
    ddd* dd/mm/yy
    jjj* jj/mm/aa
    =WORKDAY(A2,B2)
    =SERIE.JOUR.OUVRE(A2;B2)
    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

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par ochini Voir le message
    ..Ensuite aller rechercher cette valeur dans un autre fichier excel que je ne peux pas modifier.
    ...
    et comment est effectué ta recherche ?

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur production
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur production

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut
    Citation Envoyé par bbil Voir le message
    et comment est effectué ta recherche ?

    Avec Cells.Find

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Cells.Find(What:=last_line, After:=ActiveCell, LookIn:=xlValues, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Et que ce passe-t-il lorsque tu utilise ce code tel-quel ...

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur production
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur production

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut
    J'ai une erreur

    Run-time error '91'
    Object variable or with block variable not set

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Putôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Cel As Range
     
    Set Cel = Cells.Find(last_line, ActiveCell, xlValues, xlPart, xlByRows, xlNext)
     
    If Not Cel Is Nothing Then Cel.Activate

  10. #10
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonjour,

    et si tu utilise find .. pour chercher une date avec un format d'affichage précis, ne stocke pas la date au format date mais au format de donnée texte (string) selon l'affichage souhaité...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim last_line As String
     
    last_line = thisworkbook.worksheets("Feuil1").Cells(50000, ref_column).End(xlUp).text
    et tu utilise ensuite le code à Theze qui as le mérite de te permettre le traitement du cas ou la recherche ne renvoi rien..

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur production
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur production

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut
    Ok merci,

    En effet il fallait juste utiliser .text pour stocker en texte.

    Merci aussi pour le cas où ca ne renvoie rien

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur production
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur production

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut
    Hé ben voilà qu'un nouveau problème vient m’embêter

    Tout fonctionne très bien pour certaines dates. Mais pour d'autres ça ne marche pas.

    Quand j'utilise l'outil de recherche directement tout se passe bien. Il trouve la date dans tous les cas. Par contre avec la macro ça marche pas.

    Par exemple si je choisi d'enregistrer une macro en recherchant une date fixe, aucun soucis pendant l'enregistrement il trouve la bonne cellule. Mais dés que je lance la macro derrière (qui est quand même censé faire exactement la même chose a priori) j'ai l'erreur "Run-time error 91". A n'y rien comprendre

    Ci dessous le code de la macro enregistrée qui ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Macro2()
    '
    ' Macro2 Macro
    '
     
    '
        Range("A1").Select
        Cells.Find(What:="01-Oct-15", After:=ActiveCell, LookIn:=xlValues, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
    End Sub

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Peut être avec une solution du style :
    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
     
    Sub Macro2()
     
        Dim Cel As Range
        Dim NumFormat As String
     
        With Range("A1:A33")
     
            NumFormat = .NumberFormat
            .NumberFormat = "General"
            Set Cel = .Find(CLng(CDate("10-Oct.-15")), , xlValues, xlWhole)
            .NumberFormat = NumFormat
     
        End With
     
         If Not Cel Is Nothing Then
     
            MsgBox Cel.Address(0, 0)
            Cel.Activate
     
         End If
     
    End Sub
    J'ai fait le test sur la colonne A de A1 à A33 (à adapter). Donc, mémoriser le format puis mettre le format en "General", convertir la chaîne recherchée en date avec CDate et ensuite, convertir en Long et faire la recherche sur les Longs de la plage puis remettre au format initial

  14. #14
    Membre averti
    Homme Profil pro
    Ingénieur production
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur production

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut
    Merci,

    mais je m'en sors pas quand même.

    C'est incompréhensible. La macro marche quand la date est supérieure à 10 mais pas en dessous. Par exemple avec 10-Feb-15 ça marche. 07-Feb-15 ça plante

    Ca doit être due au format du fichier de base qui est mal foutu malheureusement je n'ai pas le droit de le modifier. J'ai fait une copie que j'ai mis en pièce jointe si quelqu'un veut essayer.

    Moi je ne comprend vraiment plus.
    Fichiers attachés Fichiers attachés

  15. #15
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par ochini Voir le message
    La macro marche quand la date est supérieure à 10 mais pas en dessous. Par exemple avec 10-Feb-15 ça marche. 07-Feb-15 ....
    Bonjour,


    le 0 de 07 est-il présent partout (chaîne recherchée , et plage de recherche ? )

  16. #16
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Cells.Find(What:=format( date,"dd-mmm-yy")

  17. #17
    Membre averti
    Homme Profil pro
    Ingénieur production
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur production

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut
    Citation Envoyé par bbil Voir le message
    Bonjour,

    le 0 de 07 est-il présent partout (chaîne recherchée , et plage de recherche ? )
    Oui.

    La macro c'est ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Cells.Find(What:="10-feb-15", After:=ActiveCell, LookIn:=xlValues, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
    Si je remplace le "10-Feb-15" par "07-feb-15" ca plante. Pourtant la plage de recherche y a bien les deux écrits exactement pareil.

  18. #18
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Je vais dire peut être une bêtise mais en forçant la recherche sur un format ?
    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
     
    Sub Test()
     
        Dim Plage As Range
        Dim Cel_Format As CellFormat
        Dim Cel As Range
     
        Set Cel_Format = Application.FindFormat
     
        With Cel_Format
     
            .Clear
            .NumberFormat = "[$-40C]dd-mmm-yy;@"
     
        End With
     
        'défini la recherche sur la colonne A de la feuille "Feuil1"
        With Worksheets("Feuil1")
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
        Set Cel = Plage.Find("07-févr.-15", , , , , , , , True) 'adapter au format anglais
     
        If Not Cel Is Nothing Then Cel.Select
     
     End Sub

  19. #19
    Membre averti
    Homme Profil pro
    Ingénieur production
    Inscrit en
    Octobre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur production

    Informations forums :
    Inscription : Octobre 2015
    Messages : 23
    Par défaut
    Merci Theze,

    Je vois l'idée mais je suis pas sûr de comprendre.

    En gros tu défini une variable Cel-Format pour appliquer le bon format lors de la recherche.
    Ensuite tu définie la plage de recherche
    Et enfin tu recherche la date en forcant le format dans la plage c'est bien ça?

    J'ai une erreur que je ne comprend pas (1004, application-defined or object-defined error) au niveau de la déclaration format :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .NumberFormat = "[$-39C]dd-mmm-yy;@"

  20. #20
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par ochini Voir le message
    Oui.

    La macro c'est ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Cells.Find(What:="10-feb-15", After:=ActiveCell, LookIn:=xlValues, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
    Si je remplace le "10-Feb-15" par "07-feb-15" ca plante. Pourtant la plage de recherche y a bien les deux écrits exactement pareil.
    et donc tes dates sont en anglais ?


    Je ne comprends pas pourquoi tu ne cherche plus la cellule sélectionné ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/01/2010, 09h07
  2. Récupérer la valeur d'une cellule dans un EditorGrid
    Par baya1 dans le forum GWT et Vaadin
    Réponses: 4
    Dernier message: 11/08/2009, 15h09
  3. Réponses: 4
    Dernier message: 19/04/2009, 13h44
  4. Réponses: 2
    Dernier message: 12/04/2009, 12h26
  5. Réponses: 5
    Dernier message: 04/05/2006, 17h00

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