Récupérer la valeur d'une cellule du nom de la colonne
Bonsoir,
Je récupère actuellement dans mon appli la valeur d'une cellule à partir du numéro de ligne et numéro de colonne comme suit :
strSujet = Cells(ActiveCell.Row, 10) ici colonne 10.
Lorsqu'un utilisateur insère une colonne avant la colonne 10 ma valeur se trouvera en colonne 11 et non plus 10.
Peut-on récupérer celle valeur avec le nom de colonne et non le numéro de la colonne?
Dans ce cas quelque soit l'insertion de colonne je n'aurai plus besoin de changer le numéro de colonne dans le code.
Merci d'avance pour toute aide
Cordialement
Bonjour cheickna
Il suffit de nommer la colonne avec un nom explicite
Ensuite vous n'avez plus qu'à faire
strSujet = Cells(ActiveCell.Row, Range("NomColonne").Column)
A+
Bonjour,
Avant que j'utilise systématiquement les tableaux structurés, je m'étais fait une fonction pour rechercher des colonnes dans une ligne de titre. L'avantage était de vérifier leur présence avant de lancer une procédure souvent longue à partir d'extractions SAP dont le nom des colonnes pouvaient changer à chaque fois....
Option Explicit
Public MessagePresenceColonnes As String
Public ColSujet As Integer, ColX As Integer
Sub ChercherLesColonnes()
MessagePresenceColonnes = "Absence colonne : " & Chr(10)
ColSujet = ColonnePosition(Sheets("Feuil1"), 10, "Info 10")
ColX = ColonnePosition(Sheets("Feuil1"), 10, "Info 50")
MsgBox "Colonne recherchée : Info 10 , colonne : " & ColSujet
If MessagePresenceColonnes <> "Absence colonnes : " & Chr(10) Then
MsgBox MessagePresenceColonnes
End If
End Sub
Function ColonnePosition(ByVal FeuilleEnCours As Worksheet, ByVal LigneTitre As Long, ByVal TitreRecherche As String)
Dim CtrI As Long, NbColPosition As Long
Dim AireTitre2 As Range
ColonnePosition = 0
With FeuilleEnCours
NbColPosition = .Cells(LigneTitre, .Columns.Count).End(xlToLeft).Column
Set AireTitre2 = .Range(.Cells(LigneTitre, 1), .Cells(LigneTitre, NbColPosition))
For CtrI = 1 To AireTitre2.Count
Select Case Mid(AireTitre2(CtrI).Value, 1, Len(TitreRecherche))
Case TitreRecherche
ColonnePosition = AireTitre2(CtrI).Column
Exit For
End Select
Next
Set AireTitre2 = Nothing
End With
If ColonnePosition = 0 Then
MessagePresenceColonnes = MessagePresenceColonnes & TitreRecherche & Chr(10)
End If
End Function
Dans une utilisation classique, les tableaux structurés changent la donne et simplifient la recherche.
Deux façons de faire :
- Soit par rapport à l'onglet.
- Soit relativement au tableau structuré.
Sub RechercheColonneDansTableau()
ColSujet = Range("t_Infos[Info 10]").Column
MsgBox "Position par rapport à l'onglet : " & ColSujet
ColSujet = Sheets("Feuil2").ListObjects("t_Infos").ListColumns("Info 10").Index
MsgBox "Position par rapport au tableau structuré : " & ColSujet
End Sub
Nb : Avec des tableaux structurés, c'est très rare que j'utilise encore les colonnes dans une boucle, il est beaucoup plus simple de travailler avec des Ranges de colonnes.
- Messages
- 4'092
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Comme dit par BrunoM45, le plus simple est d'affecter un nom à votre colonne. L'instruction peut être plus raccourcie:
strSujet = Range("nom_colonne")(ActiveCell.Row)
Par ailleurs, l'utilisation d'un tableau structuré vous permettra d'utiliser nativement le nom de ses colonnes via la classe ListObject qui lui est associée avec la propriété ListColumns.
Bonsoir
Merci beaucoup à vous Eric et Bruno. J'ai essayé les propositions mais je n'arrive pas à faire fonctionner.
J'ai créé un 3ème onglet dans le fichier exemple préparé par Eric et j'ai créé une macro pour tester 3 syntaxes.
Les deux premières instructions retournent un code erreur 400
La troisième renvoi le message d'erreur suivant : "L'indice n'appartient pas à la sélection"
Merci d'avance pour vos aides
Bonjour Cheickna,
A ce que je vois vous mélanger beaucoup de choses
Dans le code fourni, le nom de la feuille doit être "Feuil3" et le nom du tableau "LISTE_PE"
voici le fichier corrigé
A+
Bonsoir Bruno,
Merci pour votre message.
Effectivement, vous avez raison, j'avais fais une confusion entre les noms du tableau et de la feuille.
Merci beaucoup, ça fonctionne
Bon week-end