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 :

[VBA-E]Tronquer une DATE


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 29
    Points : 5
    Points
    5
    Par défaut [VBA-E]Tronquer une DATE
    Bonjour,

    Je fait un Extract sur une base de donnée SQL (qui contient un liste d'appel téléphonique) sur mon classeur EXCEL


    - La date extraire donne:

    12/05/2006 14:14:54

    Ensuite il faut que je fasse un tableau croisé Dynamique, avec le nombre d'appels par jour.
    Hors mon probléme c'est que j'ai aussi l'heure qui me fous le bronxe dans me tableau.

    Donc ma question est :
    Comment supprimer l'heure ?
    C'est a dire comment garder juste les 10 premiers caractéres ?

    J'ai vu dans un site la possibilité d'ecrire:
    Dim extrac_date As Date*10 (Le *10 devait normalement tronqué a partir de 10 caractére.)

    Mais cela ne fonctionne pas chez moi. (office 97)
    par avance merci de votre aide.
    PS je suis NOVICE en VB-VBA

  2. #2
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    Pour garder que la date
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Left("12/05/2006 14:14:54", 10)
    te donne 12/05/2006

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Merci de cette réponse plus que rapide, mais un peu trop sommaire pour mes faible compétences

    J'ai besoin d'appliquer cette régle sur tout une colone, comment rédiger mon code ?

    Par avance merci
    Laurent

  4. #4
    Membre actif Avatar de malhivertman1
    Inscrit en
    Avril 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 337
    Points : 221
    Points
    221
    Par défaut
    Left(String, Length as Long)
    le String represente la chaine que tu veux tronquer
    Lenght, c'est la longueur que tu en veux

    Donc Left(String, 10) prendra les 10 premiers caracteres de ton string
    De même que Right(String, 10) te prendra les 10 derniers.

    Aprés a toi d'adapter a ton code..

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Ok donc si mon format actuel est :

    Dim extrac_date As Date



    Je doit le modifier comme cela ?

    Dim Left(extrac_date, 10) as Date

    ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Dim Left(extrac_date, 10) as Date


    Dim sert à declarer !
    essaye ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim extrac_date As Date
    extrac_date = "12/05/2006 14:14:54"
    msgbox left(extrac_date, 10)
    chui aps sur de la 2eme ligne mais en cherchant un peu tu devrais trouver

  7. #7
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Essaye ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
      Dim extrac_date As Date
      extrac_date = "12/05/2006 14:14:54"
      MsgBox Int(extrac_date)
    End Sub
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  8. #8
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    pourrais-tu remplacer "tronqué" par tronquer dans le titre?
    je ne sait pas pourquoi, mais je me crispe à chaque fois que je vois ça.
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  9. #9
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Ce qui me crispe, moi, c'est pourquoi et chaque avec s ...

    Bon, je sors
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  10. #10
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Quels "s" ?
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  11. #11
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Citation Envoyé par méphistopheles
    je ne sait pas pourquoi, mais je me crispe à chaque fois que je vois ça.
    celui-qui n'est pas là
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  12. #12
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    J'en rajoute une petite louche ?
    ça se voit (ça se s'écrit comme çà)
    et...
    je vois çà ! (et ça s'écrit comme cà)

  13. #13
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 29
    Points : 5
    Points
    5
    Par défaut

    Bon alors j'ai rentrer le code suivant:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Application.ScreenUpdating = False
    If Not Intersect(Target, Range("M2:M10")) Is Nothing Then Target = Mid(Target, 1, 30)
    Application.ScreenUpdating = False
    End Sub

    Le probléme c'est que cela me change le format qui a l'origine est:
    JJ/MM/AA HH:MM

    J'aimerais tronquer le HH:MM

    Et quand je tranonque avec le code ci dessou il me change le format de mes donnée et donne par exemple: 388475698

    Que faire ?
    Par avance merchi

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Application.ScreenUpdating = False
    If Not Intersect(Target, Range("M2:M10")) Is Nothing Then Target = Mid(Target, 1, 30)
    Application.ScreenUpdating = False
    End Sub
    ??

    Quel est le rapport avec ce qu'on t'a donné comme exemple?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.ScreenUpdating = False
    jpense que tu peux meme le remettre une troisieme fois, il servira pas plus

    le 'intersect' je sais pas trop à quoi ca sert mais à mon avis ca n'a rien à faire là

    essaye le code que je t'ai donné en exemple et reviens (ou le code de quelqu'un d'autre mais aps un truc qui sort de nulle part)

  15. #15
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Re,

    En fait j'ai récupéré ce code sur un Forum :p

    J'ai essaye ton code. Et pas de prob il fonctionne trés bien.
    Mais je ne sais comment le modifier pour qu'il fasse la même chose sur un colone d'un tableau XLS

  16. #16
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Citation Envoyé par Pitoux

    Bon alors j'ai rentrer le code suivant:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Application.ScreenUpdating = False
    If Not Intersect(Target, Range("M2:M10")) Is Nothing Then Target = Mid(Target, 1, 30)
    Application.ScreenUpdating = False
    End Sub

    Le probléme c'est que cela me change le format qui a l'origine est:
    JJ/MM/AA HH:MM

    J'aimerais tronquer le HH:MM

    Et quand je tranonque avec le code ci dessou il me change le format de mes donnée et donne par exemple: 388475698

    Que faire ?
    Par avance merchi
    C'est une date ce nombre C'est juste le numéro de série de ta date
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Tiens en fait voilà,

    si tu veux juste modifier le format "apparent" d'excel tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Range("A1").Select
        Range(Selection, Selection.End(xlDown)).Select
     
        Selection.NumberFormat = "dd/mm/yyyy"
    ca va et formatter ta colonne A au format date jj/mm/aaaa mais si tu passe sur une cellule tu verra en haut toujours la forme "12/05/2006 14:14:54"


    Si tu veux definitivement "couper" l'heure tu fais :

    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
     
    Sub hu()
        Dim extrac_date As Date
        Dim DerniereLigne As Double
        'recupere la dernere ligne occupé dans la colonne A
        '(jusqu'à ce qu'une ligne soit vide)
        DerniereLigne = Worksheets(1).Range("A1").CurrentRegion.End(xlDown).Row
     
        'pour chacune de ces lignes on ne garde que les 10 premeirs caracteres
        For i = 1 To DerniereLigne
            extrac_date = Cells(i, 1)
            Cells(i, 1) = Left(extrac_date, 10)
        Next
     
    End Sub

    voilà dis moi quoi

  18. #18
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Merci pour ton aide

    J'ai donc le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     Dim DerniereLigne As Double
        Dim extrac_dates As Date
     
        'recupere la dernere ligne occupé dans la colonne A
        '(jusqu'à ce qu'une ligne soit vide)
        DerniereLigne = ActiveSheet.Range("M2").CurrentRegion.End(xlDown).Row
     
        'pour chacune de ces lignes on ne garde que les 10 premeirs caracteres
        For i = 1 To DerniereLigne
            extrac_dates = Cells(i, 1)
            Cells(i, 1) = Left(extrac_dates, 10)
        Next
    Le debugger se bloque sur le "extrac_dates = Cells(i, 1)"
    Il m'indique que ma variable vaut 00:00:00

    Pourtant dans ma colone M tout les champs on une valeur.
    PS: Mon tableau posséde plusieurs Colonne. Seul la colonne M doit etre tronqué.

  19. #19
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Citation Envoyé par Pitoux
    Merci pour ton aide

    J'ai donc 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
     
    Dim DerniereLigne As Double
    Dim extrac_dates As Date
     
    'recupere la dernere ligne occupé dans la colonne A
    '(jusqu'à ce qu'une ligne soit vide)
    DerniereLigne = ActiveSheet.Range("M2").CurrentRegion.End(xlDown).Row
     
    'pour chacune de ces lignes on ne garde que les 10 premeirs caracteres
    For i = 1 To DerniereLigne
    extrac_dates = Cells(i, 1)
    Cells(i, 1) = Left(extrac_dates, 10)
    Next
    Le debugger se bloque sur le "extrac_dates = Cells(i, 1)"
    Il m'indique que ma variable vaut 00:00:00

    Pourtant dans ma colone M tout les champs on une valeur.
    Quand tu met du code, met les balises code teplé ça sera plus clair et plus lisible

    Si tu met extrac_dates en format texte normalement il te mettra dans cette variable le début de ta date
    Pour la "transformer" en date par la suite, il faudra alors utiliser un DateSerial , en coupant un a un les jour, mois et annee de ta chaine de caractère
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  20. #20
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    left et fait pour traiter des chaîne de caractéres .. pas des dates ! (voir aide en ligne..)

    dans ton cas vu extrac_dates est une variable de type Date, utilise les fonctions de date.. Year,Month,Day ou bien Format...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
     Cells(i, 1) = Format(extrac_dates,"dd/mm/yyyy")

Discussions similaires

  1. [VBA-excel] Affecter une date à la première cellule pleine
    Par DVano dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 10/11/2006, 12h06
  2. [VBA]Filtre sur une date
    Par illight dans le forum SDK
    Réponses: 2
    Dernier message: 09/11/2006, 09h45
  3. [VBA-E] choisir une date dans un calendrier
    Par yaya54 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/03/2006, 09h05
  4. Comment tronquer une date (supprimer les heures)
    Par soazig dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 27/01/2006, 15h58
  5. [VBA Excel] convertir une date francaise au format anglais
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/12/2005, 16h52

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