Attribute VB_Name = "Colonne_du_Nom_v120" '---------------------------------------------------------------------------------------- ' Procédure_____: Colonne_du_Nom ' Date__________: 21/01/2022 ' Auteur________: www.CapLSS.com - https://www.caplss.com/viewtopic.php?t=214 ' Objet_________: Retourner la première colonne trouvée d'un entête dans une zone ' Référence_____: Fonction générique à l'initialisation ' Appel_________: Colonne_du_Nom(LeNom, LeRange, Opt. LeType, Opt. PasdInfo) ' Retour________: N° de Colonne, Lettre, Adresse ou Range. Vide avec erreur sinon. ' Options_______: Si LeType := "NumCol", retourne le Numéro de Colonne (par défaut) ' Options_______: Si LeType := "LetCol", retourne les Lettres de colonne ' Options_______: Si LeType := "Adresse", retourne l'adresse complète ' Options_______: Si LeType := "Range", retourne le range de la position ' Options_______: Si PasdInfo := true, n'Affiche pas de message si colonne non trouvée ' Compatibilité_: (2003-2019)Office (11.0-16.0)Excel (+)32-bit (+)64-bit ' Statut________: (x)Validé ()En attente validation ()En cours développement '---------------------------------------------------------------------------------------- ' 2012.01.14 v1.00 DEV Création initiale, fournit soit le numéro de colonne, soit les lettres de la colonne. ' 2021.03.19 v1.10 BUG La fonction .Find() n'est pas (plus) fonctionnelle sur colonnes masquées. ' FIX Refonte complète, compatibilité Office 2019 et Excel 17. ' 2021.01.17 v1.11 DEV Améliore la fiabilité de la fonction dans le passage de paramètres(Byval forcé) ' 2022.01.21 v1.20 DEV Améliore la robustesse en général et sous VBA7 en particulier ' DEV Optimise la zone de recherche passée en paramètre ' DEV Ajoute la possibilité de retourner un Range Option Explicit Function Colonne_du_Nom(ByVal LeNom As String, ByVal LeRange As Range, Optional ByVal LeType As String = "NumCol", Optional ByVal PasdInfo As Boolean = False) As Variant ' ' Memo : Fonction .Find non fonctionnelle sur cellules masquées (xlvalues ou xlFormulas) ' Colonne_du_Nom = Empty Dim c As Range ' Limitation de la plage Set LeRange = Intersect(LeRange, LeRange.Parent.UsedRange) ' Recherche LeNom For Each c In LeRange ' Trouvé première occurrence ? If c.Value = LeNom Then ' Format de sortie spécifique ? Select Case UCase(LeType) Case "ADRESSE" ' Adresse Colonne_du_Nom = c.Address Case "LETTRES", "LETCOL" ' Compatibilité v1.10 ' Sous forme de lettres Colonne_du_Nom = c.Address Colonne_du_Nom = Mid(Colonne_du_Nom, 2, InStr(2, Colonne_du_Nom, "$") - 2) Case "NUMCOL", "" ' Compatibilité Fonction ' Numéro de Colonne (Choix par Défaut) Colonne_du_Nom = c.Column Case "RANGE" ' Range Set Colonne_du_Nom = c Case Else ' Choix inconnu MsgBox "Le Type : " & LeType & ", passé en argument est inconnu. Les choix possibles sont : Adresse, Range, LetCol et NumCol (par défaut)", Buttons:=vbCritical, Title:="Argument Incorrect" End Select ' Sortie anticipée Exit For End If Next c ' Message ? (par défaut, si erreur) If (IsEmpty(Colonne_du_Nom) And PasdInfo = False) Then MsgBox "Impossible de trouver la colonne nommée (" & LeNom & ") dans l'onglet [" & LeRange.Worksheet.Name & "] et la zone " & LeRange.Address, Buttons:=vbCritical, Title:="Colonne non Trouvée" End If ' End Function