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 : 342
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.

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é