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 :

Tronquer une date [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut Tronquer une date
    Bonjour à tous,

    Voilà j'ai un problème j'ai tout un tas de données avec dans une colonne des dates au format jj/mm/yyyy hh:mm:ss, mon problème est que lorsque je tronque ma date pour enlever hh:mm:ss cela m'inverse les jours avec les mois.
    voici mon 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
    Sub convertir_date()
     
    Dim i As Integer, fin_tab As Integer, j As Integer, fin_col As Integer
    Dim Date_deb As String
     
     
    'trouve la colonne dans laquel est Date et heure de début
    fin_col = ActiveSheet.UsedRange.Columns.Count
    For j = 1 To fin_col
    If Cells(1, j).Value = "Date et heure de début" Then
    Exit For
    End If
    Next
     
     
    fin_tab = ActiveSheet.UsedRange.Rows.Count
     
    For i = 2 To fin_tab
    Date_deb = Cells(i, j).Value
    Date_deb = Left(Cells(i, j).Value, Len(Cells(i, j).Value) - 9)
    Cells(i, j).Value = Date_deb
    Next
     
     
    End Sub
    Pour illustrer voilà un exemple du problème, ma date de début est: 06/08/2012 05:17:00 que je voudrais convertir en 06/08/2012 et donc supprimer l'information de temps "heure". Lorsque que j'utilise mon code cela me donne 08/06/2012, au départ je me suis dit ce n'est pas grave c'est que ça c'est mis au format anglais mm/jj/yyyy mais en faite non c'est bien au format jj/mm/yyyy et du coup au lieu d'avoir le 6 aout 2012, j'ai le 8 juin 2012. Je n'ai aucune idée de pourquoi ça fait ça.

    Auriez vous des idées?

    Merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut
    Je viens d'essayer une autre méthode et toujours le même problème
    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 convertir_date()
     
    Dim i As Integer, fin_tab As Integer, j As Integer, fin_col As Integer
    Dim Date_deb As String
     
     
    'trouve la colonne dans laquel est Date et heure de début
    fin_col = ActiveSheet.UsedRange.Columns.Count
    For j = 1 To fin_col
    If Cells(1, j).Value = "Date et heure de début" Then
    Exit For
    End If
    Next
     
     
    fin_tab = ActiveSheet.UsedRange.Rows.Count
     
    For i = 2 To fin_tab
    Cells(i, j).Value = Format(Cells(i, j).Value, "dd/mm/yyyy")
    Next
     
     
    End Sub

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour

    Les dates étant des nombres, les heures les décimales (1/24 pour 1 heure) si tu veux tronquer tu peux utiliser la partie entière de la valeur.

    SI le format de cellule est déjà en date, cela restera en date.

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut
    78chris, avec ma deuxième solution cela ne devrais pas posé de problème et pourtant cela inverse toujours les jours et les mois.

  5. #5
    Membre Expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 475
    Par défaut
    Bonjour,

    en modifiant le format n'estce pas suffisant (voir modif en rose). Chez moi, cela fonctionne apparemment.

    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 convertir_date()
     
    Dim i As Integer, fin_tab As Integer, j As Integer, fin_col As Integer
    Dim Date_deb As String
      
    'trouve la colonne dans laquel est Date et heure de début
    fin_col = ActiveSheet.UsedRange.Columns.Count
    For j = 1 To fin_col
    If Cells(1, j).Value = "Date et heure de début" Then
    Exit For
    End If
    Next
      
    fin_tab = ActiveSheet.UsedRange.Rows.Count
    
    x = Application.International(xlCountryCode)
    
    For i = 2 To fin_tab
    Cells(i, j).Select
    Selection.NumberFormat = "m/d/yyyy"
    Next
      
    End Sub

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 277
    Par défaut
    Non en changent juste le format les données des heures restent toujours dans la cellule, elles ne sont juste pas affichées.

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Citation Envoyé par Mrfreeze117 Voir le message
    ... cela m'inverse les jours avec les mois... /... Je n'ai aucune idée de pourquoi ça fait ça. Auriez vous des idées?
    oui, vois ce tuto :
    Comprendre et gérer les dates sous Excel et en VBA

    le VBA est en US, si possibilité d'interprétation (mois = ou inférieurs à 12), il prend la version US...

    cordialement,

    Didier

  8. #8
    Membre éclairé Avatar de gnusti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Par défaut
    Bonjour,

    Essaie ça et voit si tu peux l'adapter à ton cas. En gérant des types Date, il y a normalement moins de rique...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function TronqueDate(uneDate As Date) As Date
     
        TronqueDate = DateSerial(Year(uneDate), Month(uneDate), Day(uneDate))
     
    End Function
    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
    Public Sub ParcoursLesLignes()
     
        Dim i As Integer
        Dim fin_tab As Integer
        Dim j As Integer
     
        j = 1
        fin_tab = 28
     
     
        For i = 2 To fin_tab
            Feuil1.Cells(i, j).Value = TronqueDate(Feuil1.Cells(i, j).Value)
            Feuil1.Cells(i, j).NumberFormat = "m/d/yyyy"
        Next
     
     
     
    End Sub

  9. #9
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    je te donne une piste, claire une fois assimilé le système des dates :

    les dates / heures = des numéros de séries
    les heures = la partie après la virgule de ce nombre

    tu sélectionnes une cellule ou tu as ta date-heure et tu valides ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ActiveCell = Int(CDbl(ActiveCell.Value))
    tu regardes l'aide VBA sur les mots clefs au besoin et tu adaptes, le reste n'étant qu'une mise au format des cellules, tes heures étant à 00:00:00

    cordialement,


    Didier

  10. #10
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 564
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 564
    Par défaut
    Bonjour
    Citation Envoyé par Ormonth Voir le message
    Bonjour,

    je te donne une piste, claire une fois assimilé le système des dates :

    les dates / heures = des numéros de séries
    les heures = la partie après la virgule de ce nombre

    tu sélectionnes une cellule ou tu as ta date-heure et tu valides ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ActiveCell = Int(CDbl(ActiveCell.Value))
    tu regardes l'aide VBA sur les mots clefs au besoin et tu adaptes, le reste n'étant qu'une mise au format des cellules, tes heures étant à 00:00:00

    cordialement,
    Didier
    C'est que j'ai proposé à 10H mis apparemment, Mrfreeze117 préfère son code...

  11. #11
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Citation Envoyé par 78chris Voir le message
    C'est que j'ai proposé à 10H mis apparemment, Mrfreeze117 préfère son code...
    OK exact, pas vu

    C’était pour appuyer le lien vers le tuto, car tant qu'il ne sait pas ce qui se passe on parlera chinois

    cordialement,

    Didier

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

Discussions similaires

  1. Probléme pour tronquer une date.
    Par Falindor dans le forum R
    Réponses: 6
    Dernier message: 08/12/2009, 20h06
  2. tronquer une date
    Par maysa dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/05/2007, 15h24
  3. [VBA-E]Tronquer une DATE
    Par Pitoux dans le forum Macros et VBA Excel
    Réponses: 69
    Dernier message: 17/05/2006, 23h19
  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. Réponses: 3
    Dernier message: 19/04/2002, 00h11

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