Trouver la fonction la plus récente

  • Initiateur de la discussion Initiateur de la discussion escalibur
  • 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 !

escalibur

XLDnaute Occasionnel
Bonsoir.

Je souhaiterais avoir la fonction la plus récente pour des salariés, qu'ils soient présents ou qu'ils aient quittés l'entreprise. La fonction DECALER me permet d'atteindre le résultat mais pas de manière systématique.

En effet, il faut selon les circonstances que les cellules vides soient vides ou comprenant un espace (tabulation dans la cellule). Pour mieux me faire comprendre, je vous joins un fichier excel. Si quelqu'un a une idée qui me permette d'avoir un résultat correct (en colonne P) en toutes circonstances, je serais preneur. en vous remerciant par avance.
 

Pièces jointes

Re : Trouver la fonction la plus récente

Bonsoir Escalibur, bonsoir le forum,

Si une solution VBA te convient, ton fichier modifié en pièce jointe avec le code ci-dessous :
Code:
Sub Macro1()
Dim O As Object 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim LI As Integer 'déclare la variable LI (Ligne)

Set O = Sheets("Feuil1") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne 1 (=A) de l'onglet O
For LI = 3 To DL 'boucle des ligne 3 à DL
    'si la cellule en colonne A n'est pas vide, revoie en colonne 16 (=P)
    'la valeur de la première cellule non vide de la ligne en allant vers la gauche
    If O.Cells(LI, 1).Value <> "" Then O.Cells(LI, 16).Value = O.Cells(LI, 16).End(xlToLeft).Value
Next LI 'prochaine ligne de la boucle
End Sub

J'ai effacé toutes les cellules contenant un espace au préalablement... Clique sur le bouton Fonctions à coté de l'année...
Le fichier :
 

Pièces jointes

Re : Trouver la fonction la plus récente

Bonjour Robert.
Merci bcp pour votre réponse rapide et intéressante qui plus est.
J'ai ajouté des fonctions pour faire des tests et j'ai supprimé la ligne 7 qui était vide.
Cela fonctionne sauf sur les 2 dernières lignes.
Par ailleurs, j'aurais souhaité que le résultat s'affiche sans qu'il soit nécessaire d'activer "manuellement" la macro.
Si comme Robert d'autres personnes ont des pistes, je vous en remercie par avance. Bonne journée.
 
Re : Trouver la fonction la plus récente

Bonjour Robert.
Merci bcp pour votre réponse rapide et intéressante qui plus est.
J'ai ajouté des fonctions pour faire des tests et j'ai supprimé la ligne 7 qui était vide.
Cela fonctionne sauf sur les 2 dernières lignes.
Par ailleurs, j'aurais souhaité que le résultat s'affiche sans qu'il soit nécessaire d'activer "manuellement" la macro.
Je vous joins le fichier pour faire apparaitre les erreurs.
Si comme Robert d'autres personnes ont des pistes, je vous en remercie par avance. Bonne journée.
 

Pièces jointes

Re : Trouver la fonction la plus récente

Bonjour Escalibur, bonjour le forum,

je ne comprends pas. Je prends ta version 01.1, j'efface le contenu de la colonne P et je lance la macro et tout est correct ! pourquoi chez toi ça ne l'est pas ?
Comme tu voulais quelque choses d'automatique je te propose une V02 avec le code sur l'événement Change de l'onglet Feuil1 ci-dessous :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)

DL = Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée Dl de la colonne 1 (=A) de l'onglet
'si le changement a lieu dans la colonne 1 (=A), redéfinit la dernière ligne éditée Dl de la colonne 1 (=A) de l'onglet
If Target.Column = 1 Then DL = Cells(Application.Rows.Count, 1).End(xlUp).Row
Set PL = Range("D3:O" & DL) 'définit la plage PL
If Application.Intersect(PL, Target) Is Nothing Then Exit Sub 'si le changement a lieu ailleurs que dans la plage PL, sort de la procédure
'si la cellule en colonne A de la ligne de la cellule modifiée n'est pas vide, récupère en colonne P la valeur de la première cellule non vide en allant vers la gauche
If Cells(Target.Row, 1).Value <> "" Then Cells(Target.Row, 16).Value = Cells(Target.Row, 16).End(xlToLeft).Value
End Sub

Il agira chaque fois que tu modifieras, dans une ligne, la fonction... Il ne faut que des cellules absolument vides, pas de cellules contenant d'espaces !
Le fichier :
 

Pièces jointes

Re : Trouver la fonction la plus récente

Bonjour escalibur, Robert,

Une autre solution avec la formule matricielle (à valider par Ctrl + Maj + Entrée) à saisir dans P3 et à tirer vers le bas :
Code:
=DECALER(D3;;MAX(COLONNE(D3:O3)*(D3:O3<>""))-COLONNE(D3))

A+
 
Re : Trouver la fonction la plus récente

Bonsoir. Merci à Robert et à mromain pour les réponses.
Nikel la solution VBA. Chapeau pour la recherche !
Concernant votre fonction mromain, je l'ai testé mais elle ne fonctionne pas. cela doit venir de moi.

Erreur : je ne faisais pas crtl maj enter comme vous me l'aviez précisé. C'est parfait. Cela marche.

Merci bcp. Bonne soirée.
 
Dernière édition:
- 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

R
Réponses
4
Affichages
744
romain.tre
R
S
Réponses
2
Affichages
725
stephanebon
S
P
Réponses
0
Affichages
572
pitio
P
C
Réponses
6
Affichages
2 K
celinetoulouse
C
Retour