Calcul de date selon conditions

Bonjour,

sur une bd de 150 000 lignes je souhaite calculer le nombre de mois jusqu’à aujourd'hui selon les conditions de 3 colonnes.

Exemple de conditions de calcul en D par ligne :

si A existe B existe C existe alors D = DateDiff("m", A, Date)

si A vide B existe C vide alors D = DateDiff("m", B, Date)

si A vide B existe C existe alors D = DateDiff("m", A, Date)

.................................colonne A................colonne B................colonne C................colonne D

ligne 1.....................10/01/2000.............10/01/2001.............10/01/2003.............xxx

ligne 2.....................___________..............10/01/2001.............___________............. xxx

ligne 3.....................___________.............10/01/2001.............10/01/2003............. xxx

ligne 4.....................10/01/2000.............10/01/2001.............10/01/2003.............xxx

ligne 5.....................10/01/2000.............10/01/2001.............10/01/2003.............xxx

Merci.

Bonjour bbto,

Essayez avec :

=SI((A3<>"")*(B3<>"")*(C3<>"")=1;DATEDIF(A3;date;"m");SI((A3="")*(B3<>"")*(C3="")=1;DATEDIF(B3;date;"m");SI((A3="")*(B3<>"")*(C3<>"")=1;DATEDIF( A3;date;"m"))))

Avez-vous une idée en vba?

Absolument pas,

mais une formule plus courte :

=DATEDIF(SI((A3="")*(B3<>"")*(C3="")=1;B3;A3);date;"m")

le fichier d'exemple en pj

Sub calculdate()

' BD de 150 000 lignes

dateQ = CDate(Q2) ' date de la colonne Q dateQ = CDate("31/03/2006") comment ecrire dateq = avec variable ?

dateR = CDate(R2) ' date de la colonne R

dateS = CDate(S2) ' date de la colonne S

datenow = Date ' date du jour

If dateQ > 0 And dateR > 0 And dateS > 0 Then

date_entree = dateQ

dateF = DateDiff("m", date_entree, Date)

Else

date_entree = dateR

dateF = DateDiff("m", date_entree, Date)

End If

' comment écrire le résultat dateF dans la colonne X et boucler?

End Sub

Merci

Bonjour bbto,

Essayez en X2 avec cette formule:

=DATEDIF(SI((Q2="")*(R2<>"")*(S2="")=1;Q2;R2);AUJOURDHUI();"m")

bonjour,

merci ce code fonctionne

=DATEDIF(SI((Q2<>"")*(R2<>"")=1;Q2;R2);AUJOURDHUI();"m")

j'ai tiré de X2 a X19

comme la feuille bd est supprimé à chaque ouverture (environ 150 000lignes)

le nombre de ligne est donc variable comment faire pour adapter la range du vba X2:X19 à X2 jusqu’à la dernière ligne?

le code en vba

Range("X2").Select

ActiveCell.FormulaR1C1 = _

"=DATEDIF(IF((RC[-7]<>"""")*(RC[-6]<>"""")=1,RC[-7],RC[-6]),TODAY(),""m"")"

Selection.AutoFill Destination:=Range("X2:X19")

J'ai réussi avec ce code, si il a plus court je suis toujours preneur d’idée.

'calcul nombre de mois

Dim myRange As Range

Set myRange = Range("A" & Rows.Count).End(xlUp)

Range("X2").Select

ActiveCell.FormulaR1C1 = _

"=DATEDIF(IF((RC[-7]<>"""")*(RC[-6]<>"""")=1,RC[-7],RC[-6]),TODAY(),""m"")"

Selection.Copy

myRange.Select

Selection.Offset(0, 23).Select

Range(Selection, Selection.End(xlUp)).Select

ActiveSheet.Paste

'copier la formule en valeur

Columns("X:X").Select

Selection.Copy

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Rechercher des sujets similaires à "calcul date conditions"