Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Difference de dates VBA

  • Initiateur de la discussion Initiateur de la discussion mimy
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

mimy

XLDnaute Occasionnel
Bonjour à tous,

J'ai un problème que je n'arrive pas à résoudre.

J'ai copié collé un tableau de dates sur excel et j'ai codé une fonction en vba pour calculer la différence entre les dates de mon tableau avec la date d'aujourd'hui.
Seulement je ne comprends pas pourquoi ca ne marche pas.
Alors que si j'écris la date de mon tableau à la main dans une autre cellule ma fonction marche.

Pouvez-vous m'aider?

De plus, je voudrais faire une fonction calculant le maximum des différences obtenus mais je ne sais pas comment faire...

Merci de votre aide!!!!
 

Pièces jointes

Re : Difference de dates VBA

Bonjour mimy, phlaurent55


VB:
Function DeltaDate(n As Date)
    If Date = 60 Or n = 60 Or n < 1 Then DeltaDate = "" Else DeltaDate = n - (n < 60) - Date + (Date < 60)
End Function
Valable pour toute date à partir du 1er janvier 1900 (option "calendrier 1900").​


ROGER2327
#5583


Lundi 9 Pédale 139 (Saint Remezy, évêque in partibus - fête Suprême Quarte)
13 Ventôse An CCXX, 5,6918h - fumeterre
2012-W09-6T13:39:37Z
 
Re : Difference de dates VBA

Merci beaucoup phlaurant55 et roger2327 vos deux fonction marche très bien!!! je vous en remercie!

Pouvez vous m aidez à savoir si c'est possible de faire une fonction "max" qui prendrait en compte mon tableau, qui calculerait les différences et qui sortirait la différence maximum?

Merci pour votre aide
 
Re : Difference de dates VBA

Re, bonjour Roger, le forum

si j'ai bien compris la demande, avec cette formule à mettre dans une cellule du fichier joint au post#2

=MAX(C:C)

à+
Philippe
 
Re : Difference de dates VBA

Re...


Pour le maximum, une formule Excel suffit :
Code:
=MAX((A2:A14<>"")*(A2:A14+(A2:A14<60)-AUJOURDHUI()))
ou simplement
Code:
=MAX((A2:A14<>"")*(A2:A14-AUJOURDHUI()))
si vous n'avez jamais de date antérieure au 1er mars 1900 à considérer.

Ces formules doivent être validée avec Ctrl Maj Entrée.​


ROGER2327
#5586


Lundi 9 Pédale 139 (Saint Remezy, évêque in partibus - fête Suprême Quarte)
13 Ventôse An CCXX, 7,3219h - fumeterre
2012-W09-6T17:34:21Z
 
Re : Difference de dates VBA

Rebonsoir!!
Je sais qu il existe une fonction MAX et qu on peut l appliquer dans une cellule mais moi je voudrais savoir si on pouvait faire une fonction qui prendrait en argument mon tableau, qui calculerait les differences et qui retourne la valeur max.
Merci a vous deux !!
 
Re : Difference de dates VBA

Re...


Je suis de moins en moins sûr de comprendre le problème.
À tout hasard :
VB:
Function MaxDeltaDateP(c) 'c:=Numéro de colonne ou plage de cellules (au moins deux)
Dim m As Date, tf As Boolean, oCel As Range, oPlg As Range
    Application.Volatile 'selon l'usage qu'on veut faire de la fonction
    If VarType(c) > 8191 Then Set oPlg = c Else Set oPlg = Range(Cells(c, 1), Cells(Rows.Count, 1).End(xlUp)).Cells
    For Each oCel In oPlg
        If IsDate(oCel.Value) Then If oCel.Value > m Then m = oCel.Value
    Next
    MaxDeltaDateP = DeltaDate(m)
End Function
Cette fonction utilise la fonction DeltaDate donnée plus haut.
=MaxDeltaDateP(A1:A10) traite la plage A1:A10.
=MaxDeltaDateP(1) traite toute la colonne 1.​


ROGER2327
#5590


Mercredi 11 Pédale 139 (Testament de Saint P. Ucello, le mal illuminé - fête Suprême Quarte)
15 Ventôse An CCXX, 0,1790h - chèvre
2012-W10-1T00:25:47Z
 
Re : Difference de dates VBA

Bonjour Roger,

Je ne comprend pas pourquoi chez moi la fonction me revois le résultat en négatif ( -18473 au lieu de 18473), pareil avec la fonction de phlaurent55. Avec la sienne j'ai dû intervertir (Date - n au lieu de n-Date).

Comment est-ce possible?

Avec la formule DATEDIF pas de problème, Ex.: =DATEDIF(A2;B2;"d") - B2 contenant ( AUJOURD'HUI() )
 
Dernière édition:
Re : Difference de dates VBA

Bonjour Roger2327,

J ai testé le code que tu as écrit et malheureusement je n'obtiens rien... quand je fais:
=MaxDeltaDateP(1) qui doit traiter toute la colonne 1
Ca ne me renvoie rien. Je ne comprends pas...

Pour t éclairer, ce que je cherche à faire c 'est à coder une fonction en vba et non à prendre des formules excel.
Imagine tu as un tableau qui a une colonne, et n lignes de dates, ce que je voudrais c'est juste faire une fonction qui prend ma colonne de dates en argument, qui calcule la différence avec la date d'aujourd hui et qui retourne la différence maximale.

Ce que tu as fais pour la différence de dates marche, mais je comprends pas pourquoi la fonction MaxDeltaDateP ne marche pas quand je prends MaxDeltaDateP(1) (pour la premiere colonne) ou MaxDeltaDateP(A1:A10).

Je te remercie beaucoup en tout cas!!
 
Re : Difference de dates VBA

J ai remarqué que ca marché si tu avais ta plage de données dans la meme feuille mais si tu apllique ta fonction MaxDeltaDateP dans une autre feuille ca ne marche pas...
Et moi je voudrais appliquer cette fonction dans une autre feuille
 
Re : Difference de dates VBA

J ai remarqué que ca marché si tu avais ta plage de données dans la meme feuille mais si tu apllique ta fonction MaxDeltaDateP dans une autre feuille ca ne marche pas...
(...)
Vrai ! C'est exactement ce que j'ai voulu faire.

(...)
Et moi je voudrais appliquer cette fonction dans une autre feuille
Ce n'est pas du tout ce que vous demandez dans votre classeur d'essai, où vous faites tous vos calculs dans la feuille de données.

Veuillez poser précisément, complètement, clairement votre problème plutôt que d'en faire résoudre un autre ! Merci.

En attendant, essayez ceci :
VB:
Function MaxDeltaDateF(c As Range) 'c:=Nom de colonne ou plage de cellules (au moins deux)
Dim m As Date, tf As Boolean, oCel As Range, oPlg As Range
    Application.Volatile 'selon l'usage qu'on veut faire de la fonction
    If c.Rows.Count = Rows.Count Then Set oPlg = Range(c.Resize(1), c.Parent.Cells(Rows.Count, 1).End(xlUp)).Cells Else Set oPlg = c
    For Each oCel In oPlg
        If IsDate(oCel.Value) Then If oCel.Value > m Then m = oCel.Value
    Next
    MaxDeltaDateF = DeltaDate(m)
End Function
Pour traiter, par exemple, la première colonne de la feuille Feuil1, écrivez =MaxDeltaDateF(Feuil1!A:A).

Pour traiter, autre exemple, la plage A2:A10 de la feuille Feuil1, écrivez =MaxDeltaDateF(Feuil1!A2:A10).


ROGER2327
#5593


Mercredi 11 Pédale 139 (Testament de Saint P. Ucello, le mal illuminé - fête Suprême Quarte)
15 Ventôse An CCXX, 4,9467h - chèvre
2012-W10-1T11:52:19Z
 
Re : Difference de dates VBA

Bonsoir à tous!
J ai essayé d automatiser un calcul de mon tableau en faisant un bouton affecté d'une macro.

Mon tableau se présente sous cette forme: poids | qtte | montant | nom | secteurs | taux | dates | notes | prix
(avec plusieurs lignes)

Seulement quand j ai fait ma macro, une taille de tableau a été enregistrée. Donc si je désire faire ce meme calcul sur un tableau de taille différente, par exemple avec un nombre de lignes plus grand, j obtiens de mauvais résultats.
J ai donc suprimé ma macro et j en ai fait une avec un tableau de 200 lignes en pensant que j aurais jamais de tableau ayant un nombre de lignes supérieur à 200.
Seulement ça me met #VALEUR car en vérifiant pas à pas ma fonction, celle ci s'arrete lorsqu 'elle rencontre des cellules vides.

Je voudrais savoir s'il y avait un moyen pour que ma fonction s'arrete lorsqu'elle rencontre des cellules vides!

Function Rendement(A As Range) ' A c est mon tableau en selectionnant 200 lignes au maximum

Dim n As Integer
Dim m As Integer
Dim rend As Double
Dim i As Integer
Dim l As Double

n = A.Rows.Count 'nombre de lignes
m = A.Columns.Count 'nombre de colonnes

rend = 0

For i = 2 To n

l = A(i, 9) * A(i, 2) * test(A(i, 7), A) / Somme_Nominal(A) 'test c'est la fonction test = DeltaDate(o) / MaxDeltaDateF(c) montré plus haut

rend = rend + l
Next i

Rendement_buy_and_hold = rend

End Function

J espere ce que j ai bien expliqué mon probleme.... Merci d'avance
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Autres Planning
Réponses
8
Affichages
323
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…