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 :

Pointer ou trouver une colonne par son nom dans un tableau strucutré [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Points : 51
    Points
    51
    Par défaut Pointer ou trouver une colonne par son nom dans un tableau strucutré
    Bonjour à tous,

    ça fait un bail, ou deux... J'espère que vous allez tous bien.
    Me revoici avec un problème à résoudre:
    J'ai un classeur à destination de clients à réalisé, il y a des données à transférer de tableau à tableau selon des cas différents.
    Dans un tableau "source" j'ai des données "en vrac", en gros pour chaque jours , il y a deux lignes, la premières est le nom du "Produit" la seconde, sa "quantité".
    Dans le tableau de destination les entêtes sont les noms de produit, la première colonne de chaque tableau est une date.
    Je ne trouve pas de solution autre pour trouver la colonne du tableau cible que de passer par une boucle for, le problème, c'est qu'à ce stade, je suis déjà dans deux boucle for imbriqués. Il faut vraiment éviter une troisième imbrication...
    Je pensais à quelque chose de ce goût là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub testNeueu()
        fillTabDest, Date, "MAIS", 6
    End sub
     
    Sub fillTabDest(ddate, Produit, Qte)
        Dim tabName
        tabName = "T_Rapport_" & MonthName(Month(ddate)) & "_" & Year(ddate)
        Set cellule = Range(tabName).Find(What:=ddate)
        ligne = cellule.Row - cellule.ListObject.Range.Row
        Set cellule = Nothing
        Range(tabName & "[" & produit & "]").Item(ligne) = Qte
    End Sub
    Je récupère bien la ligne en fonction de la date, mais je trouve pas de moyen de concaténer une chaine comprenant le nom du tableau ainsi que l'entête de la colonne.
    Si je fait quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    Sub fillTabDest(ddate, Produit, Qte)
        Dim tabName
        tabName = "T_Rapport_" & MonthName(Month(ddate)) & "_" & Year(ddate)
        Set cellule = Range(tabName).Find(What:=ddate)
        ligne = cellule.Row - cellule.ListObject.Range.Row
        Set cellule = Nothing
     
        Range("T_Rapport_Mars_2022[MAIS]").item(ligne) = 6
     
    End sub
    Pas de problème, cela fonctionne parfaitement.
    J'ai aussi essayé avec des Find pour récupérer la position de la colonne, mais j'ai toujours des "Nothing", même avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Set colonne = Range(tabName).Find(produit, LookIn:=xlValues, LookAt:=xlWhole)
    'ou 
    Set colonne = Range(tabName).Rows(0).Find(produit, LookIn:=xlValues, LookAt:=xlWhole)
    Toujours des message d'erreurs.

    Je suis ouvert à toutes les pistes, tant que cela n'ajoute pas une boucle for de plus (trop)...

    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Points : 51
    Points
    51
    Par défaut
    Bon, j'suis un gros boulet
    Dans le paramètre de ma fonction de test, il y avait un espace après l'apostrophe...
    Donc:

    Pour récupérer le numéro de colonne par son entête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        colonne = Range(tabName).ListObject.ListColumns(produit).index
    Pour écrire une valeur dans une ligne de la colonne ciblé par son entête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        Range(tabName & "[" & produit& "]").Item(ligne) = Qte
    Merci à Philippe Tulliez qui a donné cette réponse ici le 16/02/2022, 15h46, et merci à tous pour votre travail.

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

Discussions similaires

  1. [XL-2007] comment trouver une colonne dans une BD par son nom via VBA
    Par chikitin dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/06/2010, 08h52
  2. [POI] Appeler une cellule par son nom
    Par Galak extra dans le forum Documents
    Réponses: 9
    Dernier message: 17/06/2008, 14h33
  3. [VB6] Appeler une procedure par son nom.
    Par kenn dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 24/05/2006, 09h29
  4. Accéder à une propriété par son nom
    Par Neilos dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/09/2005, 21h34

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