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.