Comment fixer les dates dans votre feuille de calcul Excel avec VBA

Partage maintenant:

À quelle fréquence recevons-nous des dates dans les feuilles de calcul qui nous sont fournies comme le 12.26.2016/26/12 ou le 2016/26/XNUMX (format britannique), pour se faire dire que la date n'est pas valide ou qu'il n'y a pas de mois XNUMX ? Cet article explore la fixation des dates avec VBA, en utilisant les fonctions TRIM, LEFT, RIGHT et MID.

L'article suppose que le lecteur a affiché le ruban Développeur et est familiarisé avec l'éditeur VBA. Si ce n'est pas le cas, veuillez Google "Excel Developer Tab" ou "Excel Code Window".

Le xlsm de cet exercice peut être téléchargé ici.

Ce n'est pas notre problème !

Ajouter 7 jours à une dateLe meilleur endroit pour résoudre un problème est à la source. Cependant, aucun degré de persuasion ne peut convaincre le service de la paie dans ce cas que le 12.26.1994 n'est pas une date valide (sauf si cela est configuré dans le panneau de configuration de l'ordinateur pour certains pays d'Europe de l'Est).

En fait, nous pouvons prouver qu'il n'est pas lisible par machine. Par exemple, ajouter 7 jours à une date :

"=01.01.2017 + 7" = #VALUE. 

"=2017.01.01 + 7" = #VALUE.

alors que…

"=2017-01-01 + 7" = 2017/01/08.

Supposons qu'ils suggèrent que ce n'est pas leur problème.

Formats de date

La première chose que nous devons vérifier est si la date est au format américain ou international.Date au format américain

Notre exemple montre clairement que nous examinons l'utilisation aux États-Unis, c'est-à-dire MDY plutôt que le format international DMY.

Une fois que nous avons établi la source, nous devons modifier les formats de données afin qu'Excel puisse les comprendre, que ce soit à l'international ou aux États-Unis.

La meilleure façon de le faire est de changer la date en aaaammjj, un format qui ne nécessite aucune qualification.

Le processus

Nous parcourrons chaque ligne du document, en appelant une fonction pour "corriger" la date en fonction du pays source. Une fois la date corrigée, nous calculerons l'âge de l'employé.

Le code

Copiez le code suivant dans un nouveau module :

Option Explicit

Sub Main()
    Dim strNewFormat As String
    Dim strDate As String
    Sheets("Main").Range("B4").Select
    
    'Cycle through the sheet rows, using IDNumber as an anchor
    'to prevent a premature halt caused by a blank date of birth
    Do While ActiveCell > ""
        If ActiveCell.Offset(0, 2) > "" Then
            strDate = ActiveCell.Offset(0, 2)
            
            'Remove leading or trailing spaces
            strDate = Trim(strDate)
            
            'Call the function
            strNewFormat = ReformatDate(strDate, "USA")
            
            'Write the result from the function ReformatDate to a new column
            ActiveCell.Offset(0, 3) = strNewFormat
            
            'Determine age by subtracting the previous column from today's date
            ActiveCell.Offset(0, 4) = "=(NOW()-RC[-1])/365.25"
            
            'Convert to intger, thus lopping off decimal places
            ActiveCell.Offset(0, 4) = Int(ActiveCell.Offset(0, 4))
        End If
        Range("B" & ActiveCell.Row + 1).Select
    Loop
End Sub

Function ReformatDate(sDate As String, sSource As String)
    Dim yyyy, mm, dd As String
    yyyy = Right(sDate, 4)
    If sSource = "USA" Then
        mm = Left(sDate, 2)
        dd = Mid(sDate, 4, 2)
    Else
        mm = Mid(sDate, 4, 2)
        dd = Left(sDate, 2)
    End If
    ReformatDate = yyyy & "-" & mm & "-" & dd
End Function

Ajoutez un bouton à votre formulaire et attribuez-le à Sub Main.

Avertissement

Avant d'ajouter trop de code complexe à votre module, sachez qu'Excel n'est pas toujours stable dans le développement d'applications majeures, et souvent incapable de récupérer lui-même le code endommagé. Le résultat pourrait être la corruption de votre seule copie puisque la corruption se produit dans le "Save".

Sauvegardez fréquemment et utilisez un outil pour réparer Corruption de fichier Excel.

Introduction de l'auteur:

Felix Hooker est un expert en récupération de données dans DataNumen, Inc., qui est le leader mondial des technologies de récupération de données, y compris réparation rar corruption de fichiers et produits logiciels de récupération sql. Pour plus d'informations, visitez www.datanumen.com

Partage maintenant:

Les commentaires sont fermés.