Calcul âge en Format Texte : année mois jour

Comme je ne parviens pas à manipuler les variables tableaux, je m’adresse à vous.

J'ai une grande quantité de données de lignes, en 10 colonnes, celles qui nous concerne dans ce cas présent, sont les colonne "E" et "H".

Pour l’instant, la colonne "E" est vide.

La colonne "H" contient les dates de naissance.

Comment procéder, soit par tableau ou tableau combiné à dictionnaire (Vitesse assez rapide) pour indiquer l’âge en colonne "E" sous format texte : x année y mois et z jours, d’après la date du jour.

Le but est d’avoir le résultat en format texte --> Exemple : 15a 5m 10j

La solution mise en œuvre ne doit pas être formule qu’on tire sur toute la colonne car ça alourdit seulement mon fichier (qui est déjà assez lourd) et ralentit l’exécution de mes Macros existantes.

Sauf erreur de ma part, le résultat souhaité pour les 10 premières lignes se trouve en colonne "L".

D’avance grand MERCI de vos propositions.

PS : J’ai vidé mon fichier, une seule feuille et deux colonnes ainsi pouvez (éventuellement) tester votre code, si vous le souhaiter.

4harzer.xlsm (264.87 Ko)

bonjour,

=DATEDIF(H2;AUJOURDHUI();"y")&" a, "&DATEDIF(H2;AUJOURDHUI();"ym")&" m, "&DATEDIF(H2;AUJOURDHUI();"md")&" j"

4harzer.xlsm (270.47 Ko)

Bonjour BsAlv,

Merci pour votre réponse.

A vrai dire j’avais déjà des formules qui me donnait le bon résultat mais je les ai supprimés car depuis mes macros s’exécutent rapidement, d’où ma demande de le faire autrement.

D’ailleurs, en enlevant toutes les autres formules de mes feuilles, mon fichier Excel j’exécute beaucoup mieux, donc, je ne veux plus revenir aux formules.

J’attends que quelqu’un d’autre me propose une solution avec tableau ou dictionnaire en vba.

Salutations amicales.

bonjour,

Selon moi le problème, n'est pas dans les formules mais dans les macros, (par exemple gestion inadaptée des événements,...) mais sans voir le fichier, difficile d'en dire plus.

bonjour, mais reflex que H2SO4 ...

une proposition

5harzer-1.xlsm (277.25 Ko)

Bonjour BsAlv,

Merci pour votre réponse que je vais étudier tranquillement.

De mon côté, j’ai toujours continuer à trouver une solution, voici ma solution avec une boucle (lié à un bouton) que je suis convaincu qu’il est possible de l’adapter à des tableaux (que je ne sais pas faire) pour une exécution plus rapide.

Sub CalculAge()
    Application.ScreenUpdating = False
    Dim Y As Integer, j As Integer
    Dim M As Integer
    Dim D As Integer
    Dim Temp1 As Date

    With Sheets("Parents")
            lastRow = .Cells(.Rows.Count, "H").End(xlUp).Row                                                                                                           

            For j = 2 To lastRow                     'boucle sur les lignes : de la 2e ligne jusqu'à la dernière

                    Date1 = .Cells(j, "H").Value     'on met la date de naissance (Colonne "H") dans "Date"
                    Date2 = 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 & " a " & M & " m " & D & " j"
                    .Cells(j, "E").Value = Age
            Next j                                                                                                                                                   
    End With
    Application.ScreenUpdating = True
End Sub

A vous lire.

seulement l'adaptation à un tableau

1harzer-1.xlsm (299.79 Ko)

Bonjour BsAlv,

Merci pour votre réponse.

J’ai regardé votre code, il donne les résultats souhaités mais il est lent pour faire le traitement de mes données, + de quatre minutes environ.

Je pense aussi que je me suis mal exprimé lorsque je parle de Tableaux.

Au fait lorsque je parle de tableaux, c’est pour mettre les données de ma colonne "H" (Dates de naissance) dans un tableau exemple : Tab_Date, de manière, lorsqu’on souhaite parcourir le tableau, on doit écrire ceci :

For i = 1 To UBound(Tab_Date)

Je sais que les tableaux sont fait pour le traitement des grandes données et sont beaucoup plus rapide qu’une boucle For normale.

Je reste à votre disposition pour d’autres informations supplémentaires.

Bien à vous.

@Harzer,

0.25 sec pour ces 30.000 lignes

9harzer-1.zip (374.36 Ko)

Bonjour BsAlv,

Waw, ça c’est du code, très très rapide. Je vous remercie vivement de cette proposition.

Merci également pour votre patience et le partage de vos connaissances.

Salutations.

Rechercher des sujets similaires à "calcul age format texte annee mois jour"