DATE : Valeur suivante avec condition.

et1000lio

XLDnaute Junior
Bonjour à tous

Je "bug" un peu

En cellule B1 je recherche la 1ère valeur en date de la colonne A

Dans l'exemple suivant ceci me donne le 01/03/2012 avec la formule suivante : =PETITE.VALEUR(A1:A10;1)

16/04/2012
08/4/2012
01/03/2012
21/04/2012

Si cette date est inféreure à la date d'AUJOURDHUI() avec la formule suivante =SI(PETITE.VALEUR(D12:D50;1)<AUJOURDHUI();"";PETITE.VALEUR(D12:D50;1))
cela me donne aucun résultat, tout à fait normal.

et ce que je souhaiterai c'est d'obtenir la date suivante supérieure à la date du jour.... Aie.....avez-vous la solution ?

Et1000lio
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : DATE : Valeur suivante avec condition.

Bonjour Émile, Caillou, bonjour le forum,

En formule je sais pas faire... Je te propose une solution VBA avec la macro événementielle ci-dessous :
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim da As Date 'déclare la variable da (DAte)
Dim dm As Date 'déclare la variable dm (Date Minimum)

If Target.Address <> "$B$1" Then Exit Sub 'si le double clic a lieu ailleurs qu'en B1, sort de la procédure
Cancel = True 'évite le mode édition lié au double-clic
Set pl = Range("A1:A" & Cells(Application.Rows.Count, 1).End(xlUp).Row) 'définit la plage pl
dm = Application.WorksheetFunction.Max(pl) 'définit la variable dm (ici, date maximum)
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    If cel.Value > Date Then
        da = cel.Value 'si la valeur de la cellule est supérieure à la date d'aujoud'hui, définit la variable da (valeur de la cellule)
        If da < dm Then dm = cel.Value 'si la valeur de da est inférieure à la variable dm alors redéfinit la variable dm (valeur de la cellule)
    End If
Next cel 'prochaine cellule de la boucle
Target.Value = dm 'affiche dm
End Sub
Double-clique dans B11
Le fichier :
 

Pièces jointes

  • Emille_v01.xls
    39 KB · Affichages: 38

et1000lio

XLDnaute Junior
Re : DATE : Valeur suivante avec condition.

Merci beaucoup Robert,

Cela fonctionne très bien et je me suis même permis de modifier la ligne pour que cette fonction s'applique à supérieur ou égale à la date du jour.....

.....For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
If cel.Value >= Date Then
da = cel.Value 'si la valeur de la cellule est supérieure à la date d'aujoud'hui, définit la variable da (valeur de la cellule)
......
Par contre c'est une action qui est récurrente sur différents onglets (construits de façon identiques), y-a-t-il une solution dans l'environnement "ThisWorkbook" pour que cette VBA soit exploitable dans tous les onglets ?

J'en demande peut-être un peu trop .... mais sait-on jamais ?

Merci
Et1000lio
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : DATE : Valeur suivante avec condition.

Bonjour le fil, bonjour le forum,

En plaçant le code (modifié) dans le composant ThisWorkbook :
Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim da As Date 'déclare la variable da (DAte)
Dim dm As Date 'déclare la variable dm (Date Minimum)

With ActiveSheet
    If Target.Address <> "$B$1" Then Exit Sub 'si le double clic a lieu ailleurs qu'en B1, sort de la procédure
    Cancel = True 'évite le mode édition lié au double-clic
    Set pl = .Range("A1:A" & .Cells(Application.Rows.Count, 1).End(xlUp).Row) 'définit la plage pl
    dm = Application.WorksheetFunction.Max(pl) 'définit la variable dm (ici, date maximum)
    For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
        If cel.Value >= Date Then
            da = cel.Value 'si la valeur de la cellule est supérieure à la date d'aujoud'hui, définit la variable da (valeur de la cellule)
            If da < dm Then dm = cel.Value 'si la valeur de da est inférieure à la variable dm alors redéfinit la variable dm (valeur de la cellule)
        End If
    Next cel 'prochaine cellule de la boucle
Target.Value = dm 'affiche dm
End With
End Sub
La version 2 :
 

Pièces jointes

  • Emille_v02.xls
    45.5 KB · Affichages: 31

Discussions similaires

Réponses
2
Affichages
467

Statistiques des forums

Discussions
312 343
Messages
2 087 438
Membres
103 546
dernier inscrit
mohamed tano