Récupérer l'Adresse de la Dernière Cellule Répondant à un Critère

Solutions Développées sous VBA
Verrouillé
admin
Site Admin
Site Admin
Messages : 344
Enregistré le : 04 oct. 2020, 20:48

Récupérer l'Adresse de la Dernière Cellule Répondant à un Critère

Message par admin »

~ ~ ~ ~ ~ ~ ~ ~
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).
  • 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 )
  • Aperçu :
    • Aperçu de l'Utilisation de la macro comme fonction :
      Image
Suivi des évolutions:
  • 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...
Modifié en dernier par admin le 08 oct. 2021, 14:42, modifié 2 fois.
Verrouillé