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à:
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.
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
Si je fait quelque chose comme ceci:
Pas de problème, cela fonctionne parfaitement.
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
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:
Toujours des message d'erreurs.
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)
Je suis ouvert à toutes les pistes, tant que cela n'ajoute pas une boucle for de plus (trop)...
Merci d'avance.
Partager