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 au format Date


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Par défaut Conversion au format Date
    Bonjour,

    Savez-vous comment je peux convertir au format Date le résultat de la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function Date_echeance(Range1 As Range, Range2 As Range)
        Date_echeance = "30/Range1/Range2"
    End Function
    Ou Range1 donnera le numéro du mois (1, 2, 3, ...) et Range2 l'année (2013, 2014, ...)

    Merci !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Date_echeance =  DateValue(jour & "/" & Range1 & "/" & Range2)

  3. #3
    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,

    Dim LaDate As Date
    LaDate = DateValue(Date_echeance)





    Et ben vraiment trop tard ..........

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 36
    Par défaut
    Alors j'ai remplacé et ça me renvoie une erreur : "Incompatibilité de type" :s

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Et si tu remplaces les "/" par des "-" ?

    Ou bien, si tu as juste des données numériques, tu peux jeter un œil sur DateSerial() dans ton aide. Tu vas récupérer la date sous son équivalent numérique.

    de mémoire cela donnerait quelque chose comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ladate as integer
    ladate = DateSerial(Range2.value;Range1.value;30)

  6. #6
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut conversion au format date
    bonsoir,

    cela semble fonctionner, que les cellules A1 et A2 soient au format texte ou number.
    Par contre, il faut que la cellule A3 dans laquelle est renvoyée le résultat soit au format "standard" pour que la conversion se fasse.
    La même exigence se pose au demeurant lorsque l'on écrit une date directement dans la feuille. Si la cellule est initialement au format texte, elle le reste alors qu'elle se convertie si elle est standard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub data1()
        Date_echeance Range("a1"), Range("a2")
    End Sub
     
    Function Date_echeance(range1 As Range, range2 As Range)
        Date_echeance = CDate("30" & "/" & range1 & "/" & range2)
        Cells(3, 1) = Date_echeance
    End Function
     
    Cordialement,

  7. #7
    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
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub test()
     
        'A1 = le mois, A2 = l'année
        MsgBox Date_echeance(Range("A1"), Range("A2"))
     
    End Sub
     
    Function Date_echeance(Range1 As Range, Range2 As Range) As Date
     
        Date_echeance = DateSerial(Range2, Range1, 30)
     
    End Function
    Hervé.

  8. #8
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut conversion au format date
    Bonjour Hervé et autres membres,

    Il n'y en effet aucun problème s'il ne s'agit que de renvoyer un message.

    Par contre, si le résultat doit être renvoyé dans une cellule, comme c'est probablement le cas, il risque d'y avoir des surprises si des opérations sont effectuées sur les dates (différence entre deux date par exemple).

    C'est pourquoi, ne sachant pas à priori le format de la cellule ou le résultat est renvoyé, je prévois par sécurité.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cellule.NumberFormat = "General"  ' format standard
    cordialement,

  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 : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour à tous,

    La proposition d'Hervé est la plus correcte. La fonction renvoie une "vraie" date. C'est à dire, un nombre correspondant à un numéro de jour qu'Excel interprétera correctement.

    Paul, ta proposition pose plusieurs problèmes.
    1. Ta fonction n'est pas typée. Elle renvoie donc un Variant avec tous les risques que ça comporte
    2. Tu utilises la fonction comme une Sub. Dans ta Sub Data1, tu n'assigne pas le résultat de la fonction.
    3. Attention de ne jamais faire faire une action à une fonction. Dans ton cas, tu remplis une cellule. Si cette fonction est appelée dans la formule d'une cellule, elle ne fonctionnera pas.
    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 Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut conversion au format date
    bonjour Alain,

    merci pour ces informations sur l'emploi des fonctions.

    Voici donc comment j'ai modifié ma proposition pour tenir compte de tes remarques.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub data1()
        Cells(3, 1).NumberFormat = "General"  ' format standard
        Cells(3, 1) = Date_echeance(Range("a1"), Range("a2"))
    End Sub
     
    Function Date_echeance(Range1 As Range, Range2 As Range) As Date
        Date_echeance = CDate("30" & "/" & Range1 & "/" & Range2)
    End Function
    En fait, le but de ma proposition initiale était de souligner le problème posait par une cellule résultat initialement au format texte (éventualité toujours possible) et qui le reste avec la proposition de Teze.

    Cordialement,

  11. #11
    Invité
    Invité(e)
    Par défaut Bonjour,
    je ne sais pas si c'est l'age qui me joue un tour, mais j'ai l'impression que tes question sont redondantes.

    dans un de tes dernier poste il était question de formater une date en "mm-yy" maintenant "dd/mm/yyyy".

    si je me rappel, mais maintenant j'en doute, je t'avais expliqué que tu pouvais formater toutes tes données directement dans ta requête et j’avais rédigé un min tuto sur les script sql.

    pare exemple:
    Code Script SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    select [myAnnée] & '-' & [MyMois] & '-30 00:00:00'
    ici au format international, mai je doute que le mois de février apprécie.
    je t'ai dit sans un peut d’humours, qu'il y avait un problème culturel entre VBA et Excel et j'avait pris en exemple le 4 janvier.

    que dire de plus sauf réitérer les conseil déjà prodigués!

    si si... les fonction sont comme des variables elles ont un type, par défaut variant si tu place une date dans un variant Excel devra trouver le meilleur type de conversion.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim D as variant
    d=cdate("04/01/2013")
    [A1]=d
    dim c as date
    c=[A1]
    debeug.print  'donnera "01/04/2013"
    en revanche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim D as date
    d=cdate("04/01/2013")
    [A1]=d
    dim c as date
    c=[A1]
    debeug.print c 'donnera "04/01/2013"

    Citation Envoyé par DarkCator Voir le message
    Bonjour,

    Savez-vous comment je peux convertir au format Date le résultat de la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function Date_echeance(Range1 As Range, Range2 As Range)
        Date_echeance = "30/Range1/Range2"
    End Function
    Ou Range1 donnera le numéro du mois (1, 2, 3, ...) et Range2 l'année (2013, 2014, ...)

    Merci !
    les fonction on pour objet de factoriser un cernait nombre d'instructions, si l'appel de la fonction est aussi long à écrire que le code de la fonction, la fonction n'est pas intéressante.

    nous somme tous des bénévoles, et passons beaucoup de temps à prodiguer nos conseils à des "novices". il ne faudrait pas attendre de nous des solution toutes cuitent dans la bouche sans faire au minium un travail de compréhension. ce n'est pas gratuit tu devra renvoyer ascenseurs à d'autre novices.

    ne gâche ce temps qui serait utile à d'autre.

  12. #12
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par rdurupt Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    debeug.print  'donnera "01/04/2013"
     
    debeug.print c 'donnera "04/01/2013"
    Tu es sur que cela va afficher tes dates ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Tu es sur que cela va afficher tes dates ?
    effectivement j'ai oublié la variable C dans un des 2 cas
    Dernière modification par Invité ; 22/12/2013 à 21h53.

Discussions similaires

  1. Conversion de format date en format semaine
    Par issouma dans le forum Webi
    Réponses: 1
    Dernier message: 13/07/2011, 16h33
  2. probleme trivial de conversion au format date
    Par guevel dans le forum DB2
    Réponses: 2
    Dernier message: 03/03/2009, 11h04
  3. [MySQL] SQL conversion de format date
    Par lololoic dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/08/2008, 14h05
  4. Conversion de format date entre excel et python
    Par uldrych.maillet dans le forum Général Python
    Réponses: 2
    Dernier message: 20/02/2008, 11h02
  5. Réponses: 11
    Dernier message: 02/09/2003, 14h20

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