Bonjour ,
A partir d'un tableau Croisé Dynamique (TCD) je cherche le code en VBA qui me permettrai de renvoyer des valeurs sur un autre classeur à l'emplacement dédié.
Cf les pièce jointe SVP
Merci Beaucoup!!
Bonjour ,
A partir d'un tableau Croisé Dynamique (TCD) je cherche le code en VBA qui me permettrai de renvoyer des valeurs sur un autre classeur à l'emplacement dédié.
Cf les pièce jointe SVP
Merci Beaucoup!!
Bonjour à toi !
Je te propose le code suivant:
Tu dois placer cela dans ton classeur excel "TCD" et executer la macro depuis celui-ci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 Sub MoveData() Dim cell_ori As Range Dim cell_des As Range Dim Chemin As String Chemin = "C:\...\récapitulatif" With Worksheets("TCDD") 'Find "Coca cola" in the origin worksheet Set cell_ori = .Range("A:A").Find("Coca cola", LookIn:=xlFormulas, lookat:=xlWhole) 'Open the destination workbook => pas très propre mais fonctionne On Error Resume Next Set Wk = Workbooks("récapitulatif") If Err <> 0 Then Err = 0 'MsgBox "Ce fichier est fermé" Workbooks.Open Chemin Else 'MsgBox "Ce fichier est ouvert" End If 'Find "Coca cola" in the destination workbook in the correct worksheet Set cell_des = Workbooks("récapitulatif").Worksheets("Recapitulatif").Range("A:A").Find("Coca cola", LookIn:=xlFormulas, lookat:=xlWhole) 'Place the value on the right of both cells cell_des.Offset(0, 1) = cell_ori.Offset(0, 1) 'Same with the other value: Set cell_ori = .Range("A:A").Find("P&G", LookIn:=xlFormulas, lookat:=xlWhole) Set cell_des = Workbooks("récapitulatif").Worksheets("Recapitulatif").Range("A:A").Find("P&G", LookIn:=xlFormulas, lookat:=xlWhole) cell_des.Offset(0, 1) = cell_ori.Offset(0, 1) End With 'Save and clothe the Workbook 'Workbooks("récapitulatif").Close True End Sub
Elle va ouvrir le classeur "récapitulatif" et placer tes valeurs aux bons endroits à condition que:
1) Tu mettes dans "Chemin" le chemin pour accéder à "récapitulatif"
2) Tes cellules cibles (celles où se trouvent "Coca cola" et "P&G") se trouvent dans la colonne A
3) Tes fichiers et onglets s'appellent bien comme l'exemple que tu nous as donné !
Si tu veux que le classeur "récapitulatif" se ferme après avoir déplacé tes valeurs, tu as juste à décommenter la dernière ligne ! =)
Dis moi si cela fonctionne !![]()
Super!!!
Merci beaucoup !
par contre comment faire pour décaller 2 colonne plus loin les valeurs prélevé dans TCD??
Ces lignes de commande scan la colonne A entière. Si tu veux changer cette colonne ramplace seulement les "A" par ce que tu veux. Si tu veux scanner "C", place juste ".Range("C:C")". =)
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set cell_ori = .Range("A:A").Find("Coca cola", LookIn:=xlFormulas, lookat:=xlWhole)
Si ce sont les valeurs à droite de "Coca cola" et "P&G" qui sont à deux cases et que tu veux déplacer :
cell_des est la cellule de destination avec un offset de 1 colonne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part cell_des.Offset(0, 1) = cell_ori.Offset(0, 1)
cell_ori est la cellule d'origine avec un offset de 1 colonne.
Dans ce cas :
PS : je n'ai pas bien compris ce que tu voulais ! ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part cell_des.Offset(0, 1) = cell_ori.Offset(0, 3)
Merci beaucoup, c'est bien ça que je cherchais.
j'aimerais maintenant savoir comment modifier ce code pour que, au cas où je rajouterais une nouvelle société dans les données (en conséquence le TCD s'actualisera) et qu'elle n'est pas au récapitulatif, qu'elle se rajoute automatiquement avec le chiffre correspondant?
cf pièce jointe svp
Merciiiii
Si tu avais pris le temps le lire et de décortiquer le code, tu aurais pu le faire par toi même...
Donc si tu veux faire de même pour L'oréal tu rajoutes seulement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 'Ici, je set la cellule d'origine à l'endoit où je trouve "P&G" dans le classeur d'origine, dans la colonne A Set cell_ori = .Range("A:A").Find("P&G", LookIn:=xlFormulas, lookat:=xlWhole) 'Ici, je set la cellule de destination à l'endroit où je trouve "P&G" dans le workbook "récapitulatif", dans l'onglet "Recapitulatif" dans la colonne A Set cell_des = Workbooks("récapitulatif").Worksheets("Recapitulatif").Range("A:A").Find("P&G", LookIn:=xlFormulas, lookat:=xlWhole) 'Déplace ce qui se trouve à droite de 1 colonne (de la cellule origine) à la cellule qui se trouve à droite de 3 colonnes (de la cellule destination) cell_des.Offset(0, 3) = cell_ori.Offset(0, 1)
En revanche si ton nombre d'entreprises devient très grand, il faudrait p-e les staocker dans un tableau après un premier balayage mais necessite pour le coup d'avantage de code.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Set cell_ori = .Range("A:A").Find("L'oréal", LookIn:=xlFormulas, lookat:=xlWhole) Set cell_des = Workbooks("récapitulatif").Worksheets("Recapitulatif").Range("A:A").Find("L'oréal", LookIn:=xlFormulas, lookat:=xlWhole) cell_des.Offset(0, 3) = cell_ori.Offset(0, 1)
Dans la solution que je t'es proposé, c'est du "brut".
Partager