XL 2016 Copier coller dans autre classeur avec autre macro

Clara87

XLDnaute Nouveau
Hello le forum,

Je reviens vers vous pour d;avoir d'autres tips.
J'essaie de faire mon bout de code de mon cote afin de pouvoir le greffer a une macro que mon collegue utilise deja.

Lorsqu'il fait tourner son traitement, j'aimerais rajouter un morceau qui viendrait recuperer les info qu'il vient d'enregistrer pour les mettre dans un fichier de suivi pour moi. ca m'evite ainsi de lui poser 100 questions, j'ai plus de visu., etc etc.

le hic est qu'il ne veut pas que je touche a son code car fonctionne tres bien. J'ai donc pense a rajouter un "CALL" macro (j'ai lu ca sur Internet).

Ci-dessous mon code (pas de jugement, je suis debutante a 100%) ;). il fonctionne au debut, mais au moment de copier la ligne... plus rien.


Call test ( que je compte glisser dans sa macro, a la fin)

------------------------------------------
Sub test()
Dim wbSource As Workbook

timestamp = Date
wbSource = ThisWorkbook
wsSource = Worksheets("Template").Select

y = Range("B65536").End(xlUp).Row

Selection.Copy

Application.DisplayAlerts = False
Set wscible = ActiveSheet
fic = le lien de mon chemin.
Workbooks.OpenText FileName:=fic, DataType:=1, Semicolon:=True, Local:=True
Set Wbcible = ActiveWorkbook
Set wscible = Sheets("Forecasts")
Application.DisplayAlerts = True


-> c'est en dessous que je ne suis pas tres fiere...
wscible.Activate
y = Range("B65536").End(xlUp).Row + 1
Cells(y, 1) = timestamp
Cells(y, 2).Activate
Selection.Paste

Auriez vous des idees pour finaliser ?

Merci beaucoup

Clara
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Les deux lignes ci-dessous ne peuvent pas fonctionner pour des objets (Workbook et Worksheet):
wbSource = ThisWorkbook
wsSource = Worksheets("Template").Select

Pour référencer des objets quelque'ils soient il faut employer le mot Set à l'initialisation de la variable objet:

Set wbSource = ThisWorkbook
Set wsSource = wbSource.Worksheets("Template")

Bonne soirée
 

Clara87

XLDnaute Nouveau
Bonjour,

Merci pour ce premier retour.

toujours un probleme sur cette ligne..

wbSource.wssource.Row(y).Copy Destination:=wbcible.wscible.Cells(65535, 2).End(xlUp)(2)

En regardant sur les onlgets, je vois que la ligne que je veux copier/coller (wbSource.wssource.Row(y).Copy) est bien selectionnee.

Mais elle n'est pas collee (object doesn't support this method).

je continue de chercher mais quelqu'un a une idee, je suis preneuse volontier :)

MErci
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Un fichier exemple anonymisé et sans données confidentielle mais avec votre macro serait le bien venu.

En attendant sachez que vous pouvez référencer les feuilles source et cible de façon plus simple sans passer par le référencement du classeur, s'il ne vous servent pas pour d'autres actions.

Chaque objet excel sachant lui-même quel est sont parent.

Set WsSource = ThisWorkbook.Worksheets("Template") ' Le .Select est inutile (sauf cas particuliers)

Employer ThisWorkbook (le classeur qui contient la macro ) est toujours préférable (toujours sauf cas particuliers) à ActiveWorkbook qui pourrait être n'importe quel classeur ouvert à un instant T. Beaucoup d'erreurs et de méprises futures seront ainsi évitées pour les utilisateurs de vos macros.

Bonne programation
 

Clara87

XLDnaute Nouveau
Hello,

j'ai cree deux fichiers, simples mais assez realiste de ce que je veux avoir.

le chemin pour recuperer le fichier cible est :
et wscible = ActiveSheet
fic = "C:\Users\" & Environ("UserName") & "\Desktop\WbCible.xlsx"

Merci !
 

Pièces jointes

  • WbSource.xlsm
    13.3 KB · Affichages: 4
  • WbCible.xlsx
    8.8 KB · Affichages: 5

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Voici la macro que vous trouverez dans le fichier joint.
Vous y trouverez une fonction personnelle pour référencer un classeur (éventuellement fermé). La fonction ouvre le classeur au besoin.
VB:
Sub Forecasts()
Dim rngSource As Range, rngDest As Range
Dim WbDestination As Workbook

'
' Référencer la dernière ligne du tableau pour copy ultérieure dans destination
With ThisWorkbook.Worksheets("Template").Range("A1").CurrentRegion
    Set rngSource = .Rows(.Rows.Count)
End With

'
' Obtenir le classeur destination
Set WbDestination = OuvrirClasseur("WbCible.xlsx", ThisWorkbook.Path)
'
' si destination ok
If Not WbDestination Is Nothing Then
   '
   '
   With WbDestination.Sheets("Forecast")
        Set rngDest = .Cells(.Rows.Count, 2).End(xlUp).Offset(1)
        rngSource.Copy rngDest
        rngDest.Offset(, -1) = Now ' date heure
   End With
   '
   ' Ferme le fichier destination avec enregistrement des modifications
   WbDestination.Close True
End If



End Sub
cordialement

Je me sauve pour l'après-midi.

A+
 

Pièces jointes

  • WbSource.xlsm
    17.4 KB · Affichages: 9

Clara87

XLDnaute Nouveau
Hello Reblochon,

Merci pour tes retours ci-dessus, ca m'a enormement aide.

Pour aller plus loin de mon mail, je souhaiterais modifier la valeur de la cellule A2 dans le fichier destination via la fonction Instr.
exemple : If InStr(Product, "AA") > 0 Then Cells(2, 1) = "Product A"

le hic est que je dois comparer de la maniere suivante :
Si product = AA , alors Product A
Si product = BB, alors Product B

Else

Je dois chercher une chaine de caractere dans table de mapping (Exp ; Product peut etre "Fromage d'Auvergne" ou "Fromage de Bourgogne", etc.)
Je souhaite uniquement la chaine " fromage" pour recuperer la valeur correspondante "Laitier" dans ma table de mapping.

aurais tu des pistes a me suggerer ?

Merci beaucoup pour tes idees et ton temps

Clara
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,
Comme la question déborde plus que largement le titre ET le sujet de votre discussion,l'idée c'est d'ouvrir une nouvelle discussion avec un fichier exemple de ce que vous avez (y compris les macros) et souhaitez (avec explications plus précises):)
Le tout anonymisé bien-sûr
A vous relire sur une autre fil
 

Discussions similaires

Statistiques des forums

Discussions
311 711
Messages
2 081 792
Membres
101 817
dernier inscrit
carvajal