IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Connaitre le N° de colonne à partir d'un entête de table référencée [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut Connaitre le N° de colonne à partir d'un entête de table référencée
    Bonjour,
    Je travaille avec une table référencée et des USF.
    Ma table va être amenée à être modifiée par des ajouts de colonnes.
    Aujourd'hui, pour remplir ma table, à partir du USF, j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Range("TbData[#Totals]").Select 
    'Insertion d'une ligne avant celle des totaux
    Set LR = Selection.ListObject.ListRows.Add(AlwaysInsert:=True)
    LR.Range.Cells(1, 1) = TbxNom
    LR.Range.Cells(1, 2) = CInt(TbxNb)  'CINt = entier
    'Etc...
    mon problème c'est que si demain j'ajoute une colonne entre ma colonne "Nom" et ma colonne "Nb", il va falloir que je modifie tout mon code pour changer Cells(1, 2) par Cells(1, 3) et ainsi de suite pour les colonnes suivantes.
    Donc au lieu d'écrire Cells(1, 2), je voudrais quelque chose comme Cells(1, Fonction(NumCol(Range("NomTb[NomCol]")).
    Est-ce que quelqu'un peut m'aider svp ?
    D’avance merci et bonne fête à tous

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 970
    Par défaut
    Bonjour
    Connaitre le N° de colonne à partir d'un entête de table référencée
    depuis le titre vu que j'ai pas arrivé à comprendre ta demande :
    pour alimenter un combo avec les entêtes de ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Initialize()
    Dim I As Long, nbColonnes As Long
        nbColonnes = Cells(1, Columns.Count).End(xlToLeft).Column
        For I = 1 To nbColonnes
            If Cells(1, I) <> "" Then Me.ComboBox1.AddItem Cells(1, I)
        Next
    End Sub
    Pour connaitre le numéro de colonne choisie avec un combo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set Dc = Sheets("feuil1").Rows(1).Find(ComboBox1.Value)
    C = Dc.Column
    Columns(C).Select
    Selection.Insert Shift:=xlToRight 'ou bien à gauche avec xlToLeft
    si ça t'arrange ça tant bien si non merci d'expliquer davantage ta demande et si c'est nécessaire joindre un ptit fichier test avec données fictives
    BONNE JOURNEE

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 138
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Les méthodes Find ou WorksheetFunction.Match permettent de connaître le numéro de ligne ou de colonne d'une valeur cherchée.
    Cependant avec un tableau structuré il est possible de connaître le numéro de la colonne d'une étiquette en utilisant la référence structurée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox Range("T_Client[[#Headers],[Nom]]").Column
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    Bonjour BENNASR et Philippe,
    Merci pour vos réponses.
    Je vais essayé d'être plus clair :
    je connais mon N° de ligne et le nom de la colonne à incrémenter ; comment préciser ce numéro de ligne en utilisant le titre de la colonne concernée du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("TbData[famille]").activerow
    Je vous envoie mon fichier
    Merci encore pour votre aide
    Fichiers attachés Fichiers attachés

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 970
    Par défaut
    bonjour
    pas sure d'avoir comprendre
    essayez avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CbtOk_Click()
    Dim LR As ListRow, Lg As Integer
    Range("TbData[#Totals]").Select
    Set LR = Selection.ListObject.ListRows.Add(AlwaysInsert:=True)
    Lg = ActiveCell.Row
    Cells(Lg, "B") = TbxNom.Value
    Cells(Lg, "C") = CInt(TbxNb)
    Cells(Lg, "D") = CSng(TbxCourses)
    Cells(Lg, "E") = CSng(TbxVisit)
    Unload UsfData
    End Sub

  6. #6
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    BENNASR, merci pour ta réponse.

    Mon problème, c'est justement de ne pas préciser colonne B, C, D, E, mais colonne [famille], [Nb Personne], [courses] et [visites], car si j'inserre une nouvelle colonne entre C et D et que je l'appelle NbCourse, avec ta solution, je suis obligée de réaffecter tout mon code, comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CbtOk_Click()
    Dim LR As ListRow, Lg As Integer
    Range("TbData[#Totals]").Select
    Set LR = Selection.ListObject.ListRows.Add(AlwaysInsert:=True)
    Lg = ActiveCell.Row
    Cells(Lg, "B") = TbxNom.Value
    Cells(Lg, "C") = CInt(TbxNb)
     
    Cells(Lg, "D") = CInt(TbxNbCourse)
    Cells(Lg, "E") = CSng(TbxCourses)
    Cells(Lg, "F") = CSng(TbxVisit)
    Unload UsfData
    End Sub
    Alors que si je peux travailler avec les noms colonne, je n'ai qu'une nouvelle ligne à écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Lg,NbCourse) = CSng(TbxCourses)
    Sans me préoccuper de l'endroit ou l'insertion a été faite, ni quelles sont les autres colonnes impactées
    Merci

  7. #7
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 970
    Par défaut
    voir avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CbtOk_Click()
    Dim LR As ListRow, Lg As Integer
    Dim col As Integer
    Range("TbData[#Totals]").Select
    Set LR = Selection.ListObject.ListRows.Add(AlwaysInsert:=True)
    Lg = ActiveCell.Row
    col = Range("TbData[famille]").Column
    Cells(Lg, col) = TbxNom.Value
    '
    '
    '
    Unload UsfData
    End Sub

  8. #8
    Nouveau candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Par défaut Réponse à completer
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Les méthodes Find ou WorksheetFunction.Match permettent de connaître le numéro de ligne ou de colonne d'une valeur cherchée.
    Cependant avec un tableau structuré il est possible de connaître le numéro de la colonne d'une étiquette en utilisant la référence structurée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MsgBox Range("T_Client[[#Headers],[Nom]]").Column
    merci pour cette réponse qui donne le numéro de la colonne dans la feuille.
    Et pour le numéro de la colonne dans le tableau avez vous une solution?

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 138
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Et pour le numéro de la colonne dans le tableau avez vous une solution?
    La réponse que j'ai donnée était pour un tableaux structuré donc je ne comprends pas trop la question mais peut-être parlez vous de plage de cellules "classique".
    Si c'est le cas, voir la réponse que je viens de donner dans cette discussion https://www.developpez.net/forums/d2.../#post11815143

    [EDIT]
    Pour trouver le n° de colonne d'un tableau structuré c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ColumnNumber = Range("t_Client").ListObject.ListColumns("Nom").Index
    Exemple pour le tableau structuré nommé t_Result (illustration plus bas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
      Const TableName As String = "t_Result"
      Const LookupValue As String = "Vendeur"
      Dim ColumnNumber As Integer
      ColumnNumber = Range(TableName).ListObject.ListColumns(LookupValue).Index
      MsgBox "Le n° d'index colonne du tableau nommé " & TableName & " est : " & ColumnNumber
    End Sub
    Nom : 220216 dvp ListObject N° de colonne.png
Affichages : 1061
Taille : 22,7 Ko

    [EDIT 2]
    Au temps pour moi.
    Je me suis fourvoyé dans ma première réponse en proposant MsgBox Range("T_Client[[#Headers],[Nom]]").Column, car effectivement, le n° de colonne renvoyé est celui de la feuille et pas du tableau.
    Comme en VBA, je n'utilise jamais cette syntaxe et que le tableau qui m'a servi de test commençait à la colonne A, je n'ai pas pu voir mon erreur.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Nouveau candidat au Club
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Janvier 2020
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en technologies

    Informations forums :
    Inscription : Janvier 2020
    Messages : 2
    Par défaut Bon complément
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ColumnNumber = Range("t_Client").ListObject.ListColumns("Nom").Index
    Merci pour cette réponse rapide et pertinente qui complète parfaitement votre proposition précédente.
    Pour ma part je tournais autour mais sans grand succès.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Copier coller une colonne à partir de la saisie d'une référence
    Par Melanie7 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 05/11/2018, 11h52
  2. [Excel] Création de colonne à partir de données SGBD
    Par Toxick dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 31/10/2006, 08h30
  3. Créer plusieurs colonnes à partir d’une seule
    Par jeje22 dans le forum Access
    Réponses: 5
    Dernier message: 12/09/2006, 16h31
  4. [VBA-E] Intervertion de colonnes à partir d'un fichier
    Par Echizen1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/06/2006, 17h57
  5. Réponses: 2
    Dernier message: 05/05/2006, 08h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo