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