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

capture
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.

capture1

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.

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 Le nom de la feuille, avec le nom du tableau

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

Rechercher des sujets similaires à "recuperer valeur nom colonne"