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 :

Erreur d'apparation des dates


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Par défaut Erreur d'apparation des dates
    Bonjour tout le monde,

    J'ai codé un petit programme (en utilisant un autre programme existant déjà) permettant de calculer l'âge d'une personne à partir de sa date de naissance.
    Le problème est que lorsque je compile le code, tout se passe bien mais lors de la lecture du classeur excel, il apparait un problème de lisibilité.

    J'ai donc deux colonnes, une colonne avec les dates de naissance et une colonne vide avec les ages respectifs. Après compilation, la colonne des ages est remplie correctement mais la colonne des dates de naissance n'est plus lisible. Dans la barre de formule des cellules de cette colonne on lit bien la date de naissance (bon format : dd/mm/yyyy) mais directement sur la cellule, il n'apparait que des dieses (ou des dieses séparé par des slash, je ne me souviens plus bien). Je trouve cela étonnant car mon programme, bien qu'utilisant la colonne des dates de naissance, n'agit pas dessus. Je pense que c'est un pb du à Excel et à son format de date (procedure interne automatique) mais je ne vois pas plus. Je ne sais pas comment faire pour résoudre le problème.

    Voici le code en question :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    'procedure that updates the age of the patient in the column 'EDAD'
    ' j : position of the patient in the database
    Sub agepatient(ByVal j As Integer)
     
    Dim i As Integer
     
    With ThisWorkbook.Worksheets("BASE TOTAL")
     
    'if there is no data, we can't update
    If .Cells(j, positionfndatabase).Value = "" Then
        'MsgBox "Error with the patient number " & j & ". We don't know his date of birth. Please, deal with it manually at the end of the updating."
     
    Else
     
        Dim Date1 As String
        Dim Date2 As String
     
        'if date of birth = jj/mm/yyyy
        If .Cells(j, positionfndatabase).Value Like "[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9]" Then
            'date of birth (in the format dd/mm/yyyy, as String)
            Date1 = CStr(.Cells(j, positionfndatabase).Value)
     
        'if date of birth = yyyy
        ElseIf .Cells(j, positionfndatabase).Value Like "[0-9][0-9][0-9][0-9]" Then
            'date of birth (in the format : 1/1/yyyy, as String)
            Date1 = CStr("1/1/" & .Cells(j, positionfndatabase).Value)
     
        'case of error
        Else
            MsgBox "Error with the patient number " & j & ". Please, deal with it manually at the end of the updating."
            Exit Sub
        End If
     
        'date of today (in the format dd/mm/yyyy, as String)
        Date2 = CStr(Format(Now(), "dd/mm/yyyy"))
     
        'if the difference of year between the two dates is 0
        If Left(age(Date1, Date2), 1) = "0" Then
            'we copy 0
            .Cells(j, positionedaddatabase).Value = 0
            .Cells(j, positionedaddatabase).HorizontalAlignment = xlCenter
     
        'if the difference of year between the two dates is strictly positive
        ElseIf Left(age(Date1, Date2), 1) > 0 Then
            'we copy the number of years
            .Cells(j, positionedaddatabase).Value = Left(age(Date1, Date2), InStr(age(Date1, Date2), " year") - 1)
            .Cells(j, positionedaddatabase).HorizontalAlignment = xlCenter
     
        'case of error
        Else
            MsgBox "Error with the patient number " & j & ". Please, deal with it manually at the end of the updating."
     
        End If
     
    End If
     
    End With
     
    End Sub
     
    'function that calculates the difference between 2 dates (format : "dd/mm/yyyy") and returns 'x years, y months and z days'
    Function age(ByVal Date1 As Date, ByVal Date2 As Date) As String
        Dim Y As Integer
        Dim M As Integer
        Dim D As Integer
        Dim Temp1 As Date
        Temp1 = DateSerial(Year(Date2), Month(Date1), Day(Date1))
        Y = Year(Date2) - Year(Date1) + (Temp1 > Date2)
        M = Month(Date2) - Month(Date1) - (12 * (Temp1 > Date2))
        D = Day(Date2) - Day(Date1)
        If D < 0 Then
            M = M - 1
            D = Day(DateSerial(Year(Date2), Month(Date2) + 1, 0)) + D + 1
        End If
        age = Y & " years " & M & " months " & D & " days"
    End Function
    Merci pour vos remarques

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    C'est peut-être simplement du à une largeur colonne insuffisante.
    juste avant le End With, ajoutes :

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Par défaut
    Effectivement tu as raison. A la main, en mettant la bonne taille de colonne les dates apparaissent correctement.

    Ce qui est étrange est que j'avais déjà mis avant ta ligne de code et elle n'est pas pris en compte. J'ai donc modifié et mis cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ThisWorkbook.Worksheets("BASE TOTAL")
        .Rows.AutoFit
        .Columns.AutoFit
    End With
    Mais au final c'est pareil, pas de changement... Bizarre...

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Pour augmenter les chances, utilise aussi ShrinkToFit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Columns("A:D").AutoFit
    .Columns("A:D").ShrinkToFit = True

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2014
    Messages : 58
    Par défaut
    Effectivement sa marche niquel maintenant ! Merci

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

Discussions similaires

  1. [XL-2007] erreur lors d'un calcul sur des dates
    Par kidone dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/11/2011, 17h13
  2. erreur lors de conversion des dates
    Par steph_arrow dans le forum MATLAB
    Réponses: 2
    Dernier message: 28/06/2010, 21h33
  3. Erreur dans des calculs avec des dates
    Par Oliv'83 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 31/07/2008, 11h23
  4. Erreur lors du formattage des dates
    Par Invité dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/06/2008, 15h31
  5. Eviter l'erreur FRM-50026 des dates ???
    Par bilel06 dans le forum Forms
    Réponses: 8
    Dernier message: 25/06/2007, 18h20

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