Vous voulez récupérer la dernière cellule (éventuellement vide) trouvée qui répond à un critère donné (ou testé), sous la forme d'une adresse (cell) complète, d'une colonne (lettre ou numéro), d'un numéro de ligne ou d'une plage (range).
La solution est ici: Position_Dernier (clic-droit, enregistrer sous)
Mode d'emploi:
- Intégrer la source fournie dans votre code
- Faire l'appel à la fonction : Position_Dernier (LaValeur, LeRange, Opt. LeType, Opt. LeTest, Opt. PasdInfo, Opt. VideOK)
- résultat = Position_Dernier(LaValeur, LeRange, PasdInfo:=true) :
- résultat contiendra l'adresse de la dernière cellule dont le contenu est égal à LaValeur;
- sinon : un point d'exclamation.
- résultat = Position_Dernier(LaValeur, LeRange, LeType:="LetCol", PasdInfo:=true) :
- résultat contiendra les lettres de la colonne répondant au critère;
- sinon : un point d'exclamation.
- résultat = Position_Dernier(LaValeur, LeRange, LeType:="NumCol", PasdInfo:=true) :
- résultat contiendra le numéro de la colonne répondant au critère;
- sinon : la valeur 0.
- résultat = Position_Dernier(LaValeur, LeRange, LeType:="NumLig", PasdInfo:=true) :
- résultat contiendra le numéro de la ligne répondant au critère;
- sinon : la valeur 0.
- résultat = Position_Dernier(LaValeur, LeRange, LeType:="Adresse", PasdInfo:=true) :
- résultat contiendra l'adresse (chaine de caractères) de la cellule répondant au critère;
- sinon : la valeur 0.
- résultat = Position_Dernier(LaValeur, LeRange, LeType:="Range", PasdInfo:=true) :
- résultat contiendra la plage (range) de la cellule répondant au critère;
- sinon : la valeur 0.
- résultat = Position_Dernier(LaValeur, LeRange, LeTest:="<=", PasdInfo:=true) :
- résultat contiendra le numéro de la ligne répondant au critère et au test spécifié;
- sinon : un point d'exclamation.
- résultat = Position_Dernier(LaValeur, LeRange, PasdInfo:=false) :
- Se comportera comme prévu en fonction des autres paramètres fournis;
- cette option n'a d'impact visible dans du code (hors d'une formule dans une cellule).
- résultat = Position_Dernier(LaValeur, LeRange, PasdInfo:=true) :
- Où :
- LaValeur = Chaine de Caractères ou Valeur Numérique Recherchée (ou Testée)
- LeRange = Range de Recherche (ex. sheets("onglet").range("8:8") pour la ligne 8 dans l'onglet correspondant)
- LeType = Chaine de Caractères optionnelle devant contenir "LetCol", "NumCol", "NumLig", "Adresse" et "Range" pour que le résultat soit dans le type correspondant.
- LeTest = Chaine de Caractères optionnelle devant contenir une combinaison de "<" ">" et "=" qui sera appliquée au lieu de rechercher l'exacte valeur de LaValeur
- PasdInfo = Booléen optionnel devant être à vrai pour qu'une erreur rencontrée ne soit pas signalée.
- VideOK = Booléen optionnel devant être à vrai pour qu'une cellule vide soit prise en compte dans le test
- Astuce :
- Pour appeler la fonction dans une formule, remplacer les "," par des ";" et suivre l'ordre des options :
=Position_Dernier( 1 ; C10:C20 ; ; "<>" ; vrai )
=Position_Dernier( "ABC" ; A10:AB20 ; "numCol" ; ; vrai )
- Pour appeler la fonction dans une formule, remplacer les "," par des ";" et suivre l'ordre des options :
- Aperçu :
- Aperçu de l'Utilisation de la macro comme fonction :
- Aperçu de l'Utilisation de la macro comme fonction :
- 2013.02.16 (v1.00) : Création initiale, fournit l'adresse de la dernière valeur d'un range
- 2021.03.19 (v1.10) : Remplacement de .Find() non-fonctionnelle sur colonnes masquées par une boucle For Each
- 2021.10.08 (v1.20) : Ajoute une option de test basique (/!\ en paramètre avant celui de PasdInfo)
- 2021.10.26 (v1.21) : Ajout de précisions dans la gestion des erreurs (lieu de la formule, test appliqué, valeur retournée)
- 2022.01.21 (v1.30) : Possibilité de prendre en compte des cellules vides, de retourner un range, et optimisations du traitement et de la robustesse.
- 2024.05.15 (v1.41) : Les cellules en erreur sont ignorées (ne réussissent pas le test).
- 2024.06.23 (v1.42) : Optimise le temps de traitement en remontant dans LeRange.
Une recherche simplifiée d'une "dernière" cellule sur critère...