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 :

diviser une cellule date et heure


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Par défaut diviser une cellule date et heure
    Bonjour,

    J'ai une colonne qui contient des dates et un horaires sous la forme : 15/10/2007 10:00

    J'aurai besoin d'une colonne DATE et d'une colonne HEURE, comment faire (en VBA) pour séparer les celulles en deux cellules distinctes contenant les bonnes données ?

    J'ai déjà essayé de copier les colonnes puis d'effectuer un changement de format, mais ça n'est pas suffisant car la cellule de destination conserve quand même en mémoire la partie heure ou date que je cherche à supprimer. Or, j'ai ensuite besoin de faire un tri sur ces colonnes. En clair, mon but n'est pas simplement de changer le format pour raisons esthétiques, mais vraiment de ne récupérer qu'une partie de la valeur.

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    673
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 673
    Par défaut
    Bonjour,
    Les dates sont stockées sous la forme d'un nombre dans lequel la partie entière représente le nombre de jours depuis le 31.12.1899, et la partie décimale l'heure sous la forme d'une fraction de jour.

    Si la date est dans la cellule A1, la date seule sera donc donnée par la formule et l'heure avec la formule

  3. #3
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    En respectant le format donné pour ta cellule ("15/10/2007 10:00"), pour la date, la formule à placer dans la cellule isolant la date serait «ExtractDate»
    et la formule pour la cellule isolant l'heure serait «ExtractTime», à condition d'avoir codé les fonctions appelées de la façon suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function ExtractDate(DateTimeStr As String) As String
      Dim PosSpace As Integer
      PosSpace = InStr(DateTimeStr, " ")
      ExtractDate = Left(DateTimeStr, PosSpace - 1)
    End Function
    Public Function ExtractTime(DateTimeStr As String) As String
      Dim PosSpace As Integer, StrLen As Integer
      PosSpace = InStr(DateTimeStr, " ")
      StrLen = Len(DateTimeStr)
      ExtractTime = Right(DateTimeStr, StrLen - PosSpace)
    End Function

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Il y a des fonctions pour tout cela, plutôt que faire de l'extraction de chaîne, comme la fonction Format :

    Jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(wks.Range("A1"), "dd/mm/yyyy")
    Heure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(wks.Range("A1"), "hh:mm:ss")
    et un peu de lecture : Examen détaillé des fonctions de Date et Heure dans le VBA

    Philippe

  5. #5
    Membre habitué
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Par défaut
    bonjour,

    Merci à vous trois pour ces conseils.
    tedo et defluc: vos solutions sont effectivement les plus faciles, mais j'aurais besoin si possible que la cellule finale renvoie une valeur et non une formule
    Ou alors il existe un moyen (que j'ignore) qui permettrait de ne rendre que le résultat ?

    Philippe : je ne comprends pas comment mettre en pratique votre réponse ; j'ai quand même essayé de revenir avec ma propre solution à partir des indications du tutoriel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(2, 1).Value = DateSerial((Cells(2, 4).Year), (Cells(2, 4).Month), (Cells(2, 4).Day))
    Mais bien sûr ça ne marche pas. Pourriez vous me dire comment je dois adapter cette solution, ou me donner des précisions et/ou un exemple sur la manière de mettre en oeuvre votre solution ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 30
    Par défaut
    Bonjour à tous.

    Avez-vous essayé la conversion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Columns("A:A").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
              Space:=True, FieldInfo:=Array(Array(1, 1), Array(2, 1))

  7. #7
    Membre habitué
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Par défaut
    A la question "peut-on ne conserver que les valeurs", j'ai trouvé une réponse ici (je découvre le site peu à peu).
    C'est un peu du bricolage, mais ça dépanne bien ^^

    Je n'ai pas compris la solution de Philippe (je suis toujours intéressée par l'explication, notemment sur "wks.") mais celle de Victor fonctionne parfaitement. Merci beaucoup !

  8. #8
    Invité
    Invité(e)
    Par défaut
    Re

    Wks désigne tout simplement une feuille d'un classeur que j'ai déclaré en amont du code c'est tout.

    L'important est la fonction Format dans laquelle on passe la valeur d'une cellule. Les paramètres donnent ce que tu veux.

    Philippe

  9. #9
    Membre habitué
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Par défaut
    Ah ! je cherchais beaucoup plus compliqué ^^'

    En fait le problème d'agir sur le fomat est que ça ne change justement que le format et pas la valeur de la cellule. Dans mon exemple, passer "15/10/2007 10:00" au format "hh/mm/ss" affichera bien 10:00:00, mais la valeur du jour est gardée entière en mémoire dans la cellule.

    Ca n'est pas grave si on ne se préoccupe que de l'affichage, mais rend impossible le fonctionnement de certaines opérations sur ces cellules. Exemple à tester : si j'ai des dates en A, les heures correspondantes en B et des noms en C, et que je veux faire un tri par date, puis par nom, puis par heure. Si on ne change que le format, cela revient à ne trier que sur la colonne A (qui contient au final les même information que la colonne B).

    Merci à tous pour vos réponses en tout cas !

  10. #10
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    C'est ce que j'avais compris et c'est pour cela que j'ai proposé mes 2 fonctions.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/07/2010, 11h18
  2. Ajouter des heures dans une cellule date
    Par j.mathieu dans le forum Excel
    Réponses: 3
    Dernier message: 22/01/2010, 14h39
  3. diviser une cellule en fonction d'un caractère
    Par marty499 dans le forum Excel
    Réponses: 2
    Dernier message: 03/06/2008, 16h44
  4. Réponses: 6
    Dernier message: 28/05/2007, 19h00
  5. [HTML] Tableau - diviser une cellule en 2 dans la diagonale
    Par LE NEINDRE dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 20/02/2006, 10h32

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