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

[Résolu] Obtenir la dernière ligne d'une personne

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

N

Nico70

Guest
Bonjour,

Dans mon fichier j'utilise actuellement un système pas pratique pour obtenir la dernière demande d'une personne à l'aide matrice, malheureusement, je ne maitrise pas du tous les matrice et du coup ce système est pas super et je n'ai pas la dernière demande d'une personne mais du service (qui peut avoir plus de 1 personne).

De plus on m'a demander d'indiquer ceci mais que cela soit plus simple de modification.

Auriez vous une solution ?

Merci à vous
 

Pièces jointes

Dernière modification par un modérateur:
Re : Obtenir la dernière ligne d'une personne

Bonjour nico70,

A condition que j'aie bien compris, tu peux essayer,en E7 de la feuille "Général":
Code:
=INDEX(Personne!$C$7:$C$200;MAX(SI(Personne!$B$7:$B$200=$B7;LIGNE(Personne!$B$7:$B$200)-6)))&" le "&TEXTE(INDEX(Personne!$I$7:$I$200;MAX(SI(Personne!$B$7:$B$200=$B7;LIGNE(Personne!$B$7:$B$200)-6)));"jj/mm/aaaa")
A valider avec Ctrl+Shift+Enter

Si c'est OK, il restera à trouver un système pour éviter les messages d'erreurs ... mais une chose à la fois 🙂

Edit: Salut Robert 🙂
 
Dernière édition:
Re : Obtenir la dernière ligne d'une personne

Bonjour Nico, bonjour le forum,

Si on considère que la dernière demande est toujours placée en dernier dans l'onglet Général alors la proposition VBA ci-dessous devrait convenir.
Le code :
Code:
Sub Macro1()
Dim g As Object 'déclare la variable g (onglet Général)
Dim p As Object 'déclare la variable p (onglet Personne)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim li As Integer 'déclare la variable li (LIgne)
Dim lim As Integer 'déclare la variable lim (LIgne Maximum)

Set g = Sheets("Général") 'définit l'onglet g
Set p = Sheets("Personne") 'définit l'onglet p
dl = g.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne B de l'onglet g
Set pl = g.Range("B7:B" & dl) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    lim = 0 'réinitialise la variable lim
    'définit la recherche r (recherche cel dans la colonnne B de l'onglet p)
    Set r = p.Columns(2).Find(cel.Value, , xlValues, xlWhole)
    If Not r Is Nothing Then 'condition : si il existe au moins une occurence
        pa = r.Address 'définit l'adresse de la première occurrence trouvé
        Do 'exécute
            li = r.Row 'définit la ligne li
            If li > lim Then lim = r.Row 'si la ligne li est supérieure à la ligne maximum lim , redéfinit la ligne maximum lim
            Set r = p.Columns(2).FindNext(r) 'redéfinit la recherche r (occurrence suivante)
        Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrences ailleurs qu'en pa
    End If 'fin de la condition
    'récupère les données et les place dans la colonne E de l'onglet g
    g.Cells(cel.Row, 5).Value = p.Cells(lim, 3).Value & " le " & p.Cells(lim, 9).Value
Next cel 'prochaine cellule de la boucle
End Sub
le fichier :

[Édition]
Bonjour Modeste on s'est croisé...
 

Pièces jointes

Re : Obtenir la dernière ligne d'une personne

Bonjour Modeste et Robert,

Modeste, j'utilise actuellement ce même système sur mon fichier, moi je pourrais modifier(dans la limite de mes connaissances) mais les utilisateur , ce genre de ligne ça fait peur 😉

Robert, j'aime plutôt bien ta macro, cependant j'ai plusieurs feuilles, est-ce que ça poserais problème ?

Merci à vous deux pour vos deux solutions (et votre bonne humeur 😀)

Bon après midi !
 
Re : Obtenir la dernière ligne d'une personne

Re-bonjour,

Ce qui n'est pas clair pour moi, c'est la raison pour laquelle les utilisateurs devraient modifier!?

... Ceci dit, si tu préfères Môôssieur Robert, c'est ton choix 😀 (mais ne viens pas te plaindre après, hein)
 
Re : Obtenir la dernière ligne d'une personne

Bonjour, salut Modeste et Robert,

ce genre de ligne ça fait peur

Tu as tout à fait raison, j'ai aussi été comme cela, peur face à l'inconnue !
Mais rassures-toi, cela n'a duré que le temps (du début) de ma puberté.
Dès que j'avais compris comment cela fonctionnait, je ne m'en suis plus privé.

En pièce jointe une proposition (merci Modeste) qui devrait rassurer d'éventuels septiques
 

Pièces jointes

Re : Obtenir la dernière ligne d'une personne

Re²,

@ hoerwind: tu m'as fait peur 😉 j'ai cru un instant que tu t'étais lancé à corps perdu dans le VBA et que tu avais créé une fonction personnalisée (ce qui aurait été une bonne idée) ... la formule nommée en est une autre (de bonne idée!)
 
Re : Obtenir la dernière ligne d'une personne

Bonjour le fil, bonjour le forum,

Si le nom en colonne A est le même que celui de l'onglet auquel il se rapporte, le code ci-dessous devrait convenir :
Code:
Sub Macro1()
Dim g As Object 'déclare la variable g (onglet Général)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim s As Object 'déclare la variable s (onglet Service)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim li As Integer 'déclare la variable li (LIgne)
Dim lim As Integer 'déclare la variable lim (LIgne Maximum)

Set g = Sheets("Général") 'définit l'onglet g
dl = g.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne B de l'onglet g
Set pl = g.Range("B7:B" & dl) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    Set s = Sheets(cel.Offset(0, -1).Value) 'définit l'onglet s (génère une erreur si cet onglet n'existe pas)
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err = 0 'annule l'erreur
        MsgBox "le texte en colonne A ne correspond pas à un onglet existant !" 'message
        cel.Offset(0, -1).Select 'sélectionne la cellule contenant l'erreur
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
    On Error GoTo 0
    lim = 0 'réinitialise la variable lim
    'définit la recherche r (recherche cel dans la colonnne B de l'onglet s)
    Set r = s.Columns(2).Find(cel.Value, , xlValues, xlWhole)
    If Not r Is Nothing Then 'condition : si il existe au moins une occurence
        pa = r.Address 'définit l'adresse de la première occurrence trouvé
        Do 'exécute
            li = r.Row 'définit la ligne li
            If li > lim Then lim = r.Row 'si la ligne li est supérieure à la ligne maximum lim , redéfinit la ligne maximum lim
            Set r = s.Columns(2).FindNext(r) 'redéfinit la recherche r (occurrence suivante)
        Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrences ailleurs qu'en pa
    End If 'fin de la condition
    'récupère les données et les place dans la colonne E de l'onglet g
    g.Cells(cel.Row, 5).Value = s.Cells(lim, 3).Value & " le " & s.Cells(lim, 9).Value
Next cel 'prochaine cellule de la boucle
End Sub
Le fichier :
 

Pièces jointes

Re : Obtenir la dernière ligne d'une personne

Bonjour,

Excusez moi pour ma réponse tardive, je vous remercie pour votre aide (et votre courage !)

Re-bonjour,

Ce qui n'est pas clair pour moi, c'est la raison pour laquelle les utilisateurs devraient modifier!?

... Ceci dit, si tu préfères Môôssieur Robert, c'est ton choix 😀 (mais ne viens pas te plaindre après, hein)

Tu ma fait sourire avec ton message, gros jaloux va ! 😛
Il ne doivent pas le modifier mais tu les connais, il touche toujours à tous ! (et casse toujours tous... 🙁 ) je suis la seul personnes qui modifie les variable (ou macro) mais eux utilise et remplisse le fichier ^^




En effet tu à l'air d'avoir tous compris 😱, si tu aime donner des cours ma boite à mp est dispo 😀
Merci !


Oui le nom sera toujours identique à la colonne A.

Merci !

Je vais voir pour l'adapter à mon fichier et je vous recontact les gens 😉

Merci encore beaucoup, pour votre travail, votre courage et votre sympathie ! changez rien 🙂
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
6
Affichages
448
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…