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 :

Retourner la valeur texte d'un header d'un tableau strcuturé [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut Retourner la valeur texte d'un header d'un tableau strcuturé
    Bonjour à tous,

    Je suis nouveau en VBA (depuis seulement qq jours) et ce que je recherche est peut être très simple mais après 2 jours de recherche je ne trouve toujours pas la solution... C'est pourquoi je me permets d'écrire ici.

    Je suis en train de développer un Userform en VBA pour remplir une base de données excel qui est en tableau structuré. Je vous veux le code dynamique c'est pourquoi je galère un peu sinon j'aurai déjà la solution !

    Pour éviter de mettre toutes les colonnes de mon tableau, je vous mets ici un exemple simple avec seulement 4 colonnes.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim Targetrow As Integer
    Dim colnum As Integer
    Dim x As String
     
    Targetrow = Application.CountA(Range("sevea[mission code]").Value) + 1
    colnum = Application.Match(sevea[[#header],[mission code]], Range("Sevea[#Headers]"), 0) (dans excel j'ai défini la variable sevea[[#header],[mission code]]=Deal_Stage)
     
    'Range("Deal_Stage").Offset(Targetrow, colnum).Value = TextBox1
     
    Unload Me
     
    End Sub
    J'aimerais que mon colnum soit dynamique, c'est à dire que si je change le nom de ma colonne dans mon tableau excel, je veux que ma macro marche toujours sans avoir à modifier le code. C'est pourquoi je veux retourner le numéro de la colonne qui correspond au nom de la colonne mais cela ne marche pas. Ça marche que si je mets:
    colnum = Application.Match("mission code", Range("Sevea[#Headers]"), 0)

    Une solution à me proposer???

    Merci beaucoup pour votre aide!! :-)

    Cyril

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    c'est un peu vague ton enoncé

    comment veux tu récupérer quoi que ce soit avec match si tu dois éventuellement changer les noms des colonnes
    un tableau structurése créé avec un header(ou pas) et tu le touche plus sinon tu change les noms dans le code avec
    ca n'a plus vraiment l'aspect dynamique tout ca

    un range (colonne entière) s'obtient par

    exemple je veux les colonnes (nom et prénom)du tableau "t_contacts"

    si elle sont contiguës
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Range("t_Contacts[[Nom]:[Prénom]]").Address   '.column
    si elle ne sont pas contigues
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox union(range("t_Contacts[nom]"),range("t_contacts[prénom]")).address
    tu veux l'entete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set entete = range("t-contact[#Headers]")
    msgbox entete.address
    libre a toi de faire un find ou autre mais entre nous c'est inutile
    tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set macolonne=Range("t_Contacts[" & mavariable &"]")
    if macolonne is nothing then
     
    else
     
    endif
    c'est la un avantage certain avec les tableaux structurés et toi tu voudrais le travailler comme un range classique alors que tu a la possibilité de cibler directement une ligne ou colonne
    je dirais qu'alors ce tableaux ne t'est pas nécessaire

    bref tu veux la list des entêtes de ton tableau dans un string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tabl = Application.Index(Range("t_Contacts[#headers]").Value, 0, 0)
    MsgBox Join(tabl, ",")
    mais entre nous c'est passer par un chemin a rallonge pour chopper ta colonne
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut
    Bonjour Patrick et merci de ta réponse rapide!

    En fait ça ne résout pas vraiment mon problème mais peut être que je me prends la tête pour rien.

    J'ai surement pas été clair dans mon énoncé désolé!

    En fait je veux simplement pourvoir mettre dans mon match cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    colnum = Application.Match("sevea[[#header],[mission code]]", Range("Sevea[#Headers]"), 0)
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    colnum = Application.Match("mission code", Range("Sevea[#Headers]"), 0)
    ma première ligne de code ne marche pas car il n'accepte pas "sevea[[#header],[mission code]]" comme argument mais seulement du texte. l'avantage de pouvoir mettre "sevea[[#header],[mission code]]" c'est que si je change le nom de ma colonne dans mon tableau, la macro marchera toujours...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut
    En fait j'ai essayé les différentes formules et avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tabl = Application.Index(Range("t_Contacts[#headers]").Value, 0, 0)
    MsgBox Join(tabl, ",")
    J'ai toutes les entêtes de mon tableau, moi j'aimerais simplement comme me retourne juste le nom de la première colonne: "t_Contacts[[#headers],[nom de la premiere colonne]]"

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox range("montstructuré[#all]").cells(1).value
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox range("montstructuré[#Headers]").cells(1).value
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2019
    Messages : 5
    Par défaut
    Merci Patrick, ça me retourne bien la valeur souhaitée!

  7. #7
    Invité de passage
    Homme Profil pro
    ouvrier
    Inscrit en
    Avril 2025
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2025
    Messages : 1
    Par défaut
    Bonjour,
    En cherchant sur internet je suis tombé sur ce post qui correspondait à mon problème.
    J'ai utilisé ce code :
    Citation Envoyé par patricktoulon Voir le message
    re
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set macolonne=Range("t_Contacts[" & mavariable &"]")
    if macolonne is nothing then
     
    else
     
    endif
    Mais malheureusement il ne fonctionne pas vraiment car lorsque macolonne n'est pas déjà définie avec le nom mavariable on obtient une erreur :
    'La Methode Range de l'objet Global a échoué'
    Je ne comprends donc pas pourquoi ce code effectue un test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if macolonne is nothing then
    Merci d'éclairer ma Lanterne.

  8. #8
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 028
    Par défaut
    Salut

    L'idéal est de créer ton propre post en expliquant ce que tu souhaites faire. Tu peux, dans ton nouveau sujet, mettre le lien vers la discussion. Ça évite de déterrer de vieux message avec beaucoup de réponse et qui ont la mention "Sujet Résolu" et que les membres du forum risquent d'ignoré de ce fait.

    Dans ton nouveau sujet, précise ce que souhaites tu faire exactement.

    Dans le code que tu pointes, il faut que mavariable contienne le nom de la colonne que tu souhaites pointer.

    Si ce code est encadré de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On error resume next [... Les ligne de code] On error goto 0
    , tu n'auras pas d'erreur si la colonne n'existe pas. Par contre MaColonne sera nothing, c'est pourquoi il teste dans la foulée le contenu de MaColonne.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  9. #9
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 485
    Par défaut
    Bonsoir à tous,
    Au niveau des Headers nous avons la possibilité d’appliquer un format qui va nous permettre d'avoir un vrai nom de colonne, et un nom de colonne Affiché.
    Si par exemple je nomme les trois colonnes de mon tableau "ID", "Name", "Adresse".
    Je peux par exemple changer le libellé de la troisième pour quelle affiche "Adresse du chantier." en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feil1.ListObject("vt_Data").HeaderRowRange().NumberFormat = "0;"""";"""";""" & "Adresse du chantier." & """"
    Et pour retrouver le vrai nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feil1.ListObject("vt_Data").HeaderRowRange().NumberFormat =  "@"
    Cela vous permet de travailler toujours avec les mêmes noms de colonnes dans votre projet.

    Lidée vient de Laurent Ott Dans son blog https://laurent-ott.developpez.com/t...aux-Structures
    Jean-Paul sous Office 365 et Windows 10/11 (Intel I7 16Go)

    Si vous avez trouvé réponse à votre question penser à la passer en :resolu: Vous avez aimé la discussion alors un :plusser: fait toujours plaisir.
    Le savoir n'a de valeur que s'il est partagé.
    La vérité de demain se nourrit de l'erreur d'hier. Antoine de Saint-Exupéry

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    827
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 827
    Par défaut
    Bonjour @ tous
    Autre possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Range("Tableau1[#Headers]").Columns(3).NumberFormat = "0;"""";"""";""" & "Adresse du chantier." & """"
        Range("Tableau1[#Headers]").Columns(3).NumberFormat = "@"

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

Discussions similaires

  1. Fonction qui retourne plusieurs valeurs !
    Par casafa dans le forum C++
    Réponses: 20
    Dernier message: 23/04/2014, 16h56
  2. Réponses: 6
    Dernier message: 20/09/2012, 09h39
  3. Réponses: 1
    Dernier message: 22/10/2009, 14h34
  4. [ComboBox] Retourner une valeur différente de ComboBox.Text
    Par nicolas.pied dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/02/2007, 20h01
  5. Retourner une valeur avec une fonction
    Par stephtbest dans le forum ASP
    Réponses: 4
    Dernier message: 31/10/2003, 16h37

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