Copie de cellules entre fichiers en utilisant le CODENAME

Bonjour

j'arrive a copié les données d'un fichier a un autre, si je connais la position (sheets(1)) ou le nom ("toto") de la feuille de destination exemple :

'copie a partir du fichier source wb_s
Workbooks(wb_s).Sheets(1).Range("B17:C50").Copy
'collage des valeurs sur le fichier active premier onglet
ActiveWorkbook.Sheets(1).Range("B17").PasteSpecial Paste:=xlPasteValues
'autre exemple : 
'copie a partir du fichier source wb_s
Workbooks(wb_s).Sheets("source").Range("B17:C50").Copy
'collage des valeurs sur le fichier active premier onglet
ActiveWorkbook.Sheets("Toto").Range("B17").PasteSpecial Paste:=xlPasteValues

pour ma culture et des raisons pratiques je voudrais pouvoir faire la même chose avec les codename des feuilles ex : Feuil1.

les fichiers seront utilisés par d'autres personnes qui peuvent renommer les feuilles ou changer l'ordre des feuilles. (je sais que je pourrais verouiller le classeur pour que cela ne se produise pas, mais c'est pas le but de ma question....)

exemple

Workbooks(wb_s).Feuil1.Range("B17:C50").Copy

ActiveWorkbook.Feuil1.Range("B17").PasteSpecial Paste:=xlPasteValues

mais cela ne marche pas...

il me semble avoir vu passer un code il y a quelques jours utilisant les codesname justement, j'ai fait l'erreur de ne pas le mettre dans les favoris et maintenant je n'arrive pas a remettre la main dessus....

si vous savez je suis preneur...

Merci

fred

Bonjour,

C'est quoi wb_s ?

Le nom du classeur ?

Si c'est un workbook mettre wb_s.Feuil1....

eric

Bonjour,

le CodeName est exploitable directement uniquement pour les feuilles de calculs du classeur contenant le code.

Sinon il faut scanner le CodeName de chaque feuille :

Sub Demo()
     Dim Ws As Worksheet
For Each Ws In ActiveWorkbook.Worksheets
      If Ws.CodeName = "Feuil1" Then Exit For
Next

If Ws Is Nothing Then Beep: Exit Sub
Ws.[B17:C50].Value = Feuil1.[B17:C50].Value
            Set Ws = Nothing
End Sub

Bonjour Eric

oui Wb_s est le nom du fichier source et non pas un workbook... exemple : Wb_s = "fichier_source.xlsx"

cela veut dire qu'il faut déclarer un workbook au préalable ???

je viens de faire l'essai suivant

Dim wb As Workbook
Set wb = Workbooks(Wb_s)
wb.Feuil1.Range("A1").Copy

et j'ai encore une erreur "propriété ou méthode non gérée par cet objet"

j'ai l'impression que je m'y prend mal...

merci de ton aide

Fred

Edit @ marc

dans mon test ci dessus, le fichiers source est le fichier contenant le code justement. j'attends tes précisions complémentaire

merci

Le code de mon précédent message illustre une copie du classeur contenant le code vers le classeur actif …

Marc L, tu ne voulais pas dire :

For Each Ws In Workbooks(wb_s).Worksheets plutôt ?

eric

Merci a vous deux.

c'est bon ça marche ...

@eric non c'est bien cela (enfin je crois...) si j'ai bien compris les explications de Marc, il faut vérifier l'existence de la feuille Feuil1 dans le fichier ne contenant pas le code mais il faut que le fichier ne contenant pas le code soit le fichier actif à ce moment là...

fred

Non Eric !

Car un CodeName seul fait de facto référence à une feuille de calculs du classeur contenant le code même s'il n'est pas actif …

Fred, j'ai juste repris ton exemple du classeur actif !

Évidemment il peut être remplacé par un élément de la collection Workbooks

Et précision sur ta réponse à Eric : c'est le CodeName "Feuil1" qui est cherché et pas le nom de la feuille

car elle a été renommée en "Toto" dans ton exemple initial !

A la création d'un classeur : Worksheets(1). = Worksheets("Feuil1"). = Feuil1.

Mais attention, Worksheets seul fait référence à ActiveWorkbook (sauf si le code est situé dans le module du classeur)

tandis que Feuil1 fait référence à ThisWorkbook

Oui oui marc c'était exactement cela que je recherchais...

merci

@+

fred

Ok, je pensais que c'était le classeur de la macro qui était actif.

eric

Rechercher des sujets similaires à "copie entre fichiers utilisant codename"