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 :

syntaxe datediff VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut syntaxe datediff VBA
    Bonsoir,
    je récupère un tableau que je dois mettre en forme toutes les semaines ... classique ...
    mais j'ai une colonne avec des dates de naissance et je veux mettre dans la colonne d'à côté l'âge correspondant (en nb d'années par rapport à la date d'aujourdh'ui) (par exemple 15/01/1980 en A2 doit donner 28 sur la cellule C2 et ainsi de suite sur plus de 5.000 lignes)
    j'ai essayé datediff (avec 2 "f") dans tous les sens mais la synthaxe exacte m'échappe ...

    du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DateDiff(Range("a2"), "now()", "yyyy")
    la fonction datedif dans excel fonctionne très bien mais je ne trouve pas sa correspondance en vba.

    Une petite idée ??
    Merci

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    Si tu te contentes de la différence en années (l'âge est autre chose de plus complexe) :

    En VBA, ce devrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DateDiff("y", Now, Range("a2").value)

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Points : 28
    Points
    28
    Par défaut
    en vba ca donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub MacroX()
     
     
        Range("B1").Select
        ActiveCell.FormulaR1C1 = "=YEARFRAC(RC[-1],TODAY(),1)"
     
     
    End Sub

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Je voudrais appeler ton attention sur certains points (je t(ai parlé de l'âge plus haut...)

    Lance ceci et du comprendras de quoi je parlais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Command1_Click()
     ladate = "14/12/2007"
     MsgBox DateDiff("yyyy", ladate, Now)
     MsgBox DateDiff("m", ladate, Now) / 12
     MsgBox DateDiff("d", ladate, Now) / 365
    End Sub
    Les 2 derniers résultats sont moins mauvais (mais pas parfaitement exacts) que le 1er ... (because certaines choses, dont les mois et les années bissectiles...

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Que veux-tu ? Calculer l'âge par macro et le placer dans une cellule ou placer par macro la formule qui calcule l'âge dans les cellules ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Points : 28
    Points
    28

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    je veux calculer l'âge par macro et le placer dans une cellule.
    j'ai essayé les différentes formules proposées mais je n'arrive pas à obtenir quelque chose ...
    Quand je parle d'âge, je parle du nombre d'année compris entre l'année en cours et l'année de naissance de la personne, c'est peut-être plus facile ...

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu as testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox DateDiff("yyyy", ladate, Now)
    ?

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    pourquoi Msgbox ?

  10. #10
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 339
    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 339
    Points : 4 295
    Points
    4 295
    Par défaut
    Pour que tu vois le résultat tiens C'est à toi d'adapter à ton cas après

  11. #11
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    - en utilisant cette formule, j'obtiens bien le nb d'années dans ma cellule B2 (A2 contenant la date de naissance)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B2") = DateDiff("yyyy", Range("A2"), Now)
    mais je veux la dupliquer sur mes autres lignes ...

    - en utilisant style la formule suivante, je ne fais que recopier mon résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B2").AutoFill Destination:=Range("B2", Range("A2").End(xlDown).Offset(0, 1)), Type:=xlFillDefault

  12. #12
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour tlm,

    Vu que tu as plus de 5000 lignes (probablement extensible) je verrais bien une petite boucle

    En y regardant d'un peu plus près, la remarque de ucfoutu est judicieuse quant au fait que le calcul ne tenant compte que des années n'est pas d'une précision chirurgicale.
    La personne née le 31/12/1970 afficherait déjà 38 ans depuis le 1/1/2008.

    Tenant compte de cette remarque j'ai bricolé un ptit bout de code qui à l'air de tenir la route, il y a sans doute moyen de l'optimiser mais c'est vendredi soir et mon neurone est HS

    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 Age()
    Dim i%
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    If Month(Now) < Month(Cells(i, 1)) Then
    Cells(i, 2) = DateDiff("yyyy", Cells(i, 1), Now) - 1
    GoTo suite
    End If
    If Month(Now) = Month(Cells(i, 1)) And Day(Now) < Day(Cells(i, 1)) Then
    Cells(i, 2) = DateDiff("yyyy", Cells(i, 1), Now) - 1
    GoTo suite
    End If
    Cells(i, 2) = DateDiff("yyyy", Cells(i, 1), Now)
    suite:
    Next
    End Sub
    Avec éventuellement...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Workbook_Open()
    Age
    End Sub
    ...pour que la mise à jour se fasse automatiquement à chaque ouverture du classeur

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Une autre solution qui permet d'arrondir à l'âge le plus proche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ToDay = Int(CDbl(Now()))
    LaDate = CDbl(CDate("31/12/1970"))
    Age = Int(((ToDay - LaDate) / 365) + 0.5)
    MsgBox Age
    En ajoutant .5 on avoir l'arrondi proche.
    Et pour appliquer ça à ta colonne, on utilise la boucle de fring
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
         Cells(i, 2) = Int(((Int(CDbl(Now())) - CDbl(Cells(i, 1))) / 365) + 0.5)
    Next
    Je pense que la précision est suffisante
    A+

  14. #14
    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
    Si vous voulez un calcul simple (et précis) pour des âges de 0 à 99 ans, cette formule devrait convenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Val(Format(Now - CDate("2/1/1954"), "yy"))

  15. #15
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par AlainTech Voir le message
    Si vous voulez un calcul simple (et précis) pour des âges de 0 à 99 ans, cette formule devrait convenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Val(Format(Now - CDate("2/1/1954"), "yy"))


    ce qui donnerait si on l'intègre dans une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Age()
    Dim i%
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    Cells(i, 2) = Val(Format(Now - CDate(Cells(i, 1)), "yy"))
    Next
    End Sub

  16. #16
    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
    Citation Envoyé par fring Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i, 2) = Val(Format(Now - CDate(Cells(i, 1)), "yy"))
    Juste un détail:
    Si on prend la date dans une cellule, inutile de la convertir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i, 2) = Val(Format(Now - Cells(i, 1), "yy"))

  17. #17
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par AlainTech Voir le message
    Juste un détail:
    Si on prend la date dans une cellule, inutile de la convertir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(i, 2) = Val(Format(Now - Cells(i, 1), "yy"))
    oups...oui, merci pour cette rectification

  18. #18
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Cela marche ...
    Merci

  19. #19
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =ENT(((((ANNEE(B49))*10000)+(MOIS(B49)*100)+JOUR(B49))-(((ANNEE(B48))*10000)+(MOIS(B48)*100)+JOUR(B48)))/10000)

  20. #20
    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
    Citation Envoyé par akira66fr Voir le message
    la fonction datedif dans excel fonctionne très bien mais je ne trouve pas sa correspondance en vba.
    Je me suis basé sur la demande du posteur...

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

Discussions similaires

  1. syntaxe update vba
    Par seyflo dans le forum VBA Access
    Réponses: 3
    Dernier message: 21/01/2011, 14h28
  2. Syntaxe DLookup vba sur Access
    Par seyflo dans le forum VBA Access
    Réponses: 24
    Dernier message: 01/06/2010, 11h49
  3. Syntaxe variable VBA
    Par neoboy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/04/2010, 22h28
  4. [AC-2007] Problème syntaxe en VBA pour champ oui/non
    Par franckimmo dans le forum VBA Access
    Réponses: 5
    Dernier message: 08/08/2009, 11h27
  5. probleme de syntaxe en vba
    Par Invité dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/06/2007, 16h37

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