dernière cellule non vide de ma colonne au format date

rx.stephane

XLDnaute Nouveau
Bonjour,

=NB.SI.ENS(Détails!$B:$B;Détails!$B$6;Détails!$H:$H;Détails!$H$3;Détails!$D:$D;Détails!D480)

Chaque jour, ma colonne D se rempli de nouvelles valeurs (date & heure au format "jj/mm/aaaa hh:mm"), je voudrais dans la fonction ci-dessus que DXXX soit la dernière cellule non vide de ma colonne mais qu'il ne soit pris en compte que la partie date de cette cellule car mon comptage s'appuie dessus.
J'espère avoir été clair et merci de votre aide
 

Modeste

XLDnaute Barbatruc
Re : dernière cellule non vide de ma colonne au format date

Bonsoir rx.stephane et bienvenue sur XLD!

Si tu repasses par ici, prends le temps de consulter Lien supprimé: tu y liras notamment que joindre un fichier exemple (allégé et sans données confidentielles) peut augmenter les chances d'obtenir une (des) réponse(s). Faute de fichier, il faut que les explications soient aussi précises que possible. Dans le cas présent, s'il faut trouver la dernière date de la colonne D, comment pourrions-nous savoir si ces dates sont en ordre croissant ... ou non?

Dans une cellule de ton choix indique une des formules suivantes:
- si les dates sont triées par ordre croissant, la dernière sera la plus grande (fonction MAX) et pour récupérer la partie date sans les heures, il suffit d'extraire la partie entière (les heures sont les décimales). Dans ce premier cas, ceci devrait faire l'affaire
Code:
=ENT(MAX(D:D))

- si les dates sont inscrites "en vrac", tu peux essayer
Code:
=ENT(RECHERCHE(9^9;D:D))

... Pour le reste, sans idée du contenu et de la structure du fichier, difficile d'en dire plus
 

rx.stephane

XLDnaute Nouveau
Re : dernière cellule non vide de ma colonne au format date

Merci Modeste,
Effectivement, joindre un fichier c'est toujours plus explicite car au regard de votre réponse je m'aperçois que ma formulation n'était pas satisfaisante (mais ça m’a permis d’apprendre 2 nouvelles fonctions) :

Chaque jour, j'alimente grâce à une macro les colonnes A, B & C de la feuille « Détails ».
Cette macro met également en forme la feuille « Synthèse » en supprimant la ligne contenant la date la + ancienne et en insérant une ligne au-dessus de TOTAL avec la date du jour qui suit le précédent et en y recopiant les fonctions des cellules du dessus, histoire d'avoir chaque jour une vue sur l'activité des 7 derniers jours.

Je n'ai aucune connaissance en VBA, j'ai construit ma macro en enregistrant chacune de mes actions et le résultat est concluant, sauf que pour le moment, après chaque export, je suis obligé de changer « à la main » le N° de cellule de D dans la fonction NB.SI.ENS
Je voudrais donc que pour chaque nouvelle journée exportée dans la feuille « Détails », dans ma fonction NB.SI.ENS de la feuille « Synthèse » la valeur de D (ou de la colonne C, si c’est plus facile), soit la date cette journée, sachant que mon export n'a pas le même nombre de ligne chaque jour et que si l'on met une formule en dur comme c'était ma 1ère intention, je me dis que tous les autres jours vont prendre les mêmes valeurs que le dernier.

Merci de me dire si le problème peut être solutionné par un ajout dans la fonction NB.SI.ENS ou bien s’il faut passer par du VBA.
 
Dernière édition:

rx.stephane

XLDnaute Nouveau
Re : dernière cellule non vide de ma colonne au format date

Bonjour Pierrot93,
J'ai vraiment besoin d'une réponse à ma question, raison pour laquelle je l'ai postée sur 2 sites.
Je ne sais pas si votre remarque est un reproche ou un clin d'oeil ;)
Si vous avez une solution à mon probléme, je suis preneur.
@ bientôt
 

Modeste

XLDnaute Barbatruc
Re : dernière cellule non vide de ma colonne au format date

Bonjour rx.stephane,
Salut Pierrot :)

Mes plus respectueuses salutations à notre tigre ... à l'oeil de lynx!

Comme je m'y suis essayé, une proposition à copier-coller en B6 de la feuille synthèse:
Code:
=SOMMEPROD((DECALER(Détails!$B$1;EQUIV($A6;Détails!$D:$D;0)-1;0;NB.SI(Détails!$D:$D;$A6))=INDEX($B$4:$M$4;COLONNES($A:A)-MOD(COLONNE();2)))*(DECALER(Détails!$H$1;EQUIV($A6;Détails!$D:$D;0)-1;0;NB.SI(Détails!$D:$D;$A6))=MOD(COLONNE()+1;2)))
... à recopier ensuite jusqu'en B12, puis l'ensemble jusqu'à la colonne M.
Son intérêt (si je ne me suis pas trompé!) est qu'il n'y aura plus à déterminer l'emplacement de la dernière date: il suffira de modifier les dates en colonne A de cette même feuille synthèse (et rien qu'elles!)

... Teste et dis-nous ...
 

rx.stephane

XLDnaute Nouveau
Re : dernière cellule non vide de ma colonne au format date

Modeste,

Un Grand, Grand merci.
Ça fonctionne à merveille.
Si jamais vous avez un peu de temps pour m'expliquer comme cette fonction est construite, ça m'aidera à progresser.
Bonne fin de week-end

PS : Promis, juré, la prochaine fois je poste un fichier dès ma 1ère demande et j'informe si j'ai fais appel à plusieurs bonnes âmes ;)
 

Modeste

XLDnaute Barbatruc
Re : dernière cellule non vide de ma colonne au format date

Re,

La clé est sans doute cette partie de la formule:
DECALER(Détails!$B$1;EQUIV($A6;Détails!$D:$D;0)-1;0;NB.SI(Détails!$D:$D;$A6)) La fonction DECALER permet de "définir" une référence à une cellule ou plage de cellules; elle prend en arguments
  • Réf (le "point de départ")
  • Lignes (le nombre de lignes de décalage)
  • Colonnes (le nombre de colonnes de décalage)
  • Hauteur(le nombre de lignes que la plage contiendra)
  • Largeur (le nombre de colonnes que contiendra la plage)


Vois les choses un peu comme un appareil photo sophistiqué (on fixe un point au départ, puis on "dévie" de quelques millimètres vers le haut ou le bas. Même chose vers la droite ou la gauche et, une fois qu'on pointe vers le bon objectif, on "zoome" pour inclure une zone plus ou moins étendue, en hauteur et en largeur)

Dans l'exemple ci-dessus:
  • le point de départ est la cellule B1 de la feuille "Détails".
  • au départ de celle-ci, on descend jusqu'à la première cellule contenant la date en A6 (le 08/02/2013) c'est ce que permet EQUIV($A6;Détails!$D:$D;0)-1.
  • on ne décale ni vers la droite, ni vers la gauche (donc on reste en colonne B)
  • on "englobe" un nombre de ligne correspondant au nombre d'occurences, en colonne D, de cette même date
    NB.SI(Détails!$D:$D;$A6)
  • la largeur n'étant pas spécifiée, elle correspond au nombre de colonnes du "point de départ" (1 dans notre cas).


Dans cet exemple, DECALER(Détails!$B$1;EQUIV($A6;Détails!$D:$D;0)-1;0;NB.SI(Détails!$D:$D;$A6)) fait donc référence à la plage B46:B62 de la feuille "Détails" ... ne reste qu'à trouver un système pour y trouver la "Zone", renseignée en ligne 4 (une colonne sur deux) de ta feuille "Synthèse".

Vois déjà si tu arrives à déchiffrer mes explications jusque là et reviens ... si tu n'as pas renoncé à m'en demander d'autres :rolleyes:
 

rx.stephane

XLDnaute Nouveau
Re : dernière cellule non vide de ma colonne au format date

Bonjour Modeste,

Avant de comprendre vos explications, il a déjà fallu que je me familiarise avec les fonctions DECALER et EQUIV et surtout la fonction SOMMEPROD qui m'a l'air d'être une fonction "miracle" d'Excel.
Je suis prêt pour la seconde partie de votre fonction, j'ai regardé la fonction MODULO mais je vous avoue que je n'ai pas trop compris son action dans votre fonction.
Merci d'avance pour le temps que vous m'accorderez.
 

Modeste

XLDnaute Barbatruc
Re : dernière cellule non vide de ma colonne au format date

Bonsoir rx.stephane, le forum,

La fonction MOD est utilisée 2 fois, dans la formule:

  • la première fois, il s'agit, dans chaque colonne, de déterminer quelle est la "zone" concernée. Comme en ligne 4, cette zone n'est renseignée qu'une colonne sur 2, la fonction INDEX($B$4:$M$4;COLONNES($A:A)) recopiée vers la droite, donnerait alternativement "PARIS 1", 0, "PARIS 2", 0, etc
    MOD(COLONNE();2) donnera, recopié vers la droite, une succession de 0 et de 1
    INDEX($B$4:$M$4;COLONNES($A:A)-MOD(COLONNE();2)) permet dès lors d'obtenir la suite redoublée de "PARIS 1", "PARIS 1", "PARIS 2", "PARIS 2", etc

  • plus loin dans la formule, MOD(COLONNE()+1;2) donne simplement des 1, 0, 1, 0, 1, etc qui correspondent aux "Journée"=1 et "Astreinte"=0. On aurait obtenu un résultat similaire avec =N(B$5="Journée") en B6, recopié à droite
 

Discussions similaires

Réponses
2
Affichages
228

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 868
dernier inscrit
pierreselo33