Macro copier une feuille d'un autre classeur si elle existe

Bonjour tout le monde.

J'essai de créer une macro me permettant de copier une feuille d'une autre classeur si elle existe et si elle n'existe pas qu'il ne fasse rien. Vous devez vous doutez que je n'y arrive pas....

Quelqu'un pourrait il m'aider?

Merci beaucoup

Salut,

Le fichier B reste fermé. Tu sélectionnes une feuille dans la liste du fichier A et tu lances la macro.

Si la feuille inscrite dans la cellule sélectionnée existe dans le fichier B, elle est reportée dans le fichier A. Pour l'exemple, il n'y a pas de Tabelle7 dans le fichier B.

Je suis parti du principe que les deux fichiers sont dans le même dossier.

C'est un début de piste ?

Cordialement.

Bonjour

J'ai mis les deux fichiers dans le même dossier, j'ai vérifié que les noms étaient bien ceux que tu avais utilisé mais il me met sans cesse que le fichier B est introuvable et que mon chemin d'accès est erroné. Je n'arrive donc pas a faire fonctionner ta macro qui a l'air de pourtant répondre a ma demande...

Es-tu certaine qu'un des deux fichiers n'est pas resté ouvert à l'écran alors qu'il se trouvait encore dans un fichier temporaire ?

Essaie de fermer tous les fichiers que tu as à l'écran et de les rouvrir depuis leur emplacement dans ce dossier où tu les as enregistrés.

Et puis contrôle encore une fois le nom du fichier B et son extention (.xls et non pas autre chose). Dans la macro ça correspond à la ligne

Workbooks.Open Filename:=Chemin & "\Vanessa_Classeur B.xls"

Le "Chemin" quant à lui est repris depuis le fichier A ouvert à l'écran.

Tout ça peut être contrôlé si tu lances la macro "pas-à-pas".

Amicalement.

J'ai revérifié j'ai bien fait les étapes mais il me dit toujours que le chemin n'existe pas, j'ai même essayer avec mon fichier d'origine et j'obtiens la même réponse une fois que j'ai tout remplacé (par copier coller pour être sure de ne pas faire d'erreur). Je ne vois pas d'ou peux venir cette erreur. Je joins ce que me dis excel en pièce jointe

capture d ecran 2012 11 19 a 15 44 22

Bonsoir,

Yvouille m'ayant demandé de regarder un peu ce fil, je te donne ce qu'il faut modifier

dans le code remplace cette ligne:

Workbooks.Open Filename:=Chemin & "\Vanessa_Classeur B.xls"

par :

Workbooks.Open Filename:=Chemin & ":Vanessa_Classeur B.xls"

Si ta demande est terminée, lors de ta réponse merci de cloturer le fil en cliquant sur le V vert à coté du bouton EDITER

Amicalement

Salut Dan et merci pour ton intervention.

Chez moi le code proposé passait bien. Est-ce que ça à voir avec la version utilisée (Mac) ?

Cordialement.

Merci ça fonctionne parfaitement désormais. Je vous remercie d'avoir pris le temps de me répondre

Je viens de faire l'essai d'utiliser le code proposé par Dan sur mon PC et ça bloque. Il faut donc vraiment utiliser des : sur Mac et des \ sur nos PC

En fait, le texte visible dans la copie d'écran fournie par Vanessa confirme finalement cela : Il y a partout des : aux endroits où il y a des \ dans le nom du "Chemin" chez moi.

Merci encore à Dan pour son aide et bon vent à tous les deux

Petite question supplémentaire (je suis chiante désolée) si je veux que ma copie remplace une feuille qui était dans mon classeur et qui avait le même nom je dois modifier quoi dans la macro? MERCI

Dois-je comprendre ta souhait ainsi :

"A chaque fois que je lance la macro, si une feuille du fichier A porte le même nom que la feuille à copier dans le fichier B, supprimer au préalable la feuille concernée du fichier A, quitte à ne pas trouver la correspondance dans le fichier B"

ou plutôt

"Si la feuille recherchée est trouvée dans le fichier B et qu'en plus elle existe dans le fichier A, supprimer la feuille correspondante du fichier A"

ou plutôt ................. ?????

Je t'explique ce que je cherche a réaliser.

Les feuilles qui vont se copier si elles existent dans l'autre fichier vont apparaitre dans ce classeur au fur et a mesure, et je souhaite pouvoir additionner leur données.

On m'a dit que je ne pouvais pas additionner les données de feuilles qui n'existent pas encore donc je voudrais insérer au préalable des feuilles qui auront le même nom que celle qui vont se copier et programmer la première feuille pour qu'elle additionne les données des autres. Ca serait donc plutôt

Si la feuille recherchée est trouvée dans le fichier B et qu'en plus elle existe dans le fichier A, supprimer la feuille correspondante du fichier A et la remplacer par la nouvelle

Re,

Pour Yvouille

Je viens de faire l'essai d'utiliser le code proposé par Dan sur mon PC et ça bloque. Il faut donc vraiment utiliser des : sur Mac et des \ sur nos PC

Effectivement tu l'as compris. Sur MAC il faut toujours utiliser les :

En utilisant l'instruction "Operatingsystem", voici ce que tu peux faire pour t'éviter le souci et surtout que les fichiers s'ouvrent sur l'une ou l'autre plateform

If Application.OperatingSystem Like "*Macintosh*" Then
Workbooks.Open Filename:=Chemin & ":Vanessa_Classeur B.xls"
Else: Workbooks.Open Filename:=Chemin & "\Vanessa_Classeur B.xls"
End If

Pour VanessaF,

je veux que ma copie remplace une feuille qui était dans mon classeur et qui avait le même nom je dois modifier quoi dans la macro

Remplace le code se trouvant dans le fichier A qu'yvouille a posté par celui ci-dessous

Sub aa()
Dim Chemin As String, Feuille_Recherchée As String
Dim i As Byte
Application.ScreenUpdating = False

Chemin = ThisWorkbook.Path
Feuille_Recherchée = ActiveCell

If Application.OperatingSystem Like "*Macintosh*" Then
Workbooks.Open Filename:=Chemin & ":Vanessa_Classeur B.xls"
Else: Workbooks.Open Filename:=Chemin & "\Vanessa_Classeur B.xls"
End If
On Error Resume Next
With ThisWorkbook
     For i = 1 To .Worksheets.Count
         If .Sheets(i).Name = Feuille_Recherchée Then
             Application.DisplayAlerts = False
             .Sheets(i).Delete
             Application.DisplayAlerts = True
         Exit For
         End If
     Next
End With
ActiveWorkbook.Sheets(Feuille_Recherchée).Copy after:=Workbooks("Vanessa_Classeur A.xls").Sheets(1)
Workbooks("Vanessa_Classeur B.xls").Close
Sheets("Tabelle1").Select
Application.ScreenUpdating = True
End Sub

J'ai décloturé le fil étant donné que le problème n'est pas terminé. Si ma solution convient, merci de recloturer le fil.

Amicalement

Bonjour tout le monde,

@ Dan,

Merci pour tes informations à propos des Mac

Selon moi, avec ton code tu supprimes dans tous les cas la feuille "Recherchée" du fichier A avant de savoir si cette feuille se trouve dans le fichier B alors qu'il semble que ce n'est pas ce que désire Vanessa.

vanessaf a écrit :

Ca serait donc plutôt

Si la feuille recherchée est trouvée dans le fichier B et qu'en plus elle existe dans le fichier A, supprimer la feuille correspondante du fichier A et la remplacer par la nouvelle

Je propose donc un nouveau code qui devrait répondre à cette attente :

Sub aa()
Dim Chemin As String, Feuille_Recherchée As String
Dim i As Byte
Application.ScreenUpdating = False

Chemin = ThisWorkbook.Path
Feuille_Recherchée = ActiveCell

If Application.OperatingSystem Like "*Macintosh*" Then
Workbooks.Open Filename:=Chemin & ":Vanessa_Classeur B.xls"
Else: Workbooks.Open Filename:=Chemin & "\Vanessa_Classeur B.xls"
End If
On Error Resume Next

ActiveWorkbook.Sheets(Feuille_Recherchée).Copy after:=Workbooks("Vanessa_Classeur A.xls").Sheets(1)

Workbooks("Vanessa_Classeur B.xls").Close

With ThisWorkbook
     For i = 1 To .Worksheets.Count
         If .Sheets(i).Name = Feuille_Recherchée & " (2)" Then
             Application.DisplayAlerts = False
             .Sheets(Feuille_Recherchée).Delete
             .Sheets(Feuille_Recherchée & " (2)").Name = Feuille_Recherchée
             MsgBox ("La feuille ''" & Feuille_Recherchée & "'' a été remplacée")
             Application.DisplayAlerts = True
         Exit For
         End If
     Next
End With

Sheets("Tabelle1").Select
Application.ScreenUpdating = True
End Sub

@ Vanessa

Ce code comporte une confirmation qu'une feuille a été remplacée. Si cette fenêtre de confirmation ne te convient pas, on peu bien entendu la supprimer.

Cordialement.

Re,

Pour Yvouille, Tu as raison mais le code que tu donnes va provoquer un souci.

Tu ne pourras copier ta feuille du classeur B vers le A avant d'avoir vérifié que le nom de ta feuille de B n'existe déjà en A.

Essaie plutôt ceci :

Sub aa()
Dim Chemin As String, Feuille_Recherchée As String
Dim i As Byte
Application.ScreenUpdating = False

Chemin = ThisWorkbook.Path
Feuille_Recherchée = ActiveCell

If Application.OperatingSystem Like "*Macintosh*" Then
Workbooks.Open Filename:=Chemin & ":Vanessa_Classeur B.xls"
Else: Workbooks.Open Filename:=Chemin & "\Vanessa_Classeur B.xls"
End If
On Error Resume Next
With ActiveWorkbook
     For i = 1 To .Worksheets.Count
         If .Sheets(i).Name = Feuille_Recherchée Then
             Application.DisplayAlerts = False
             ThisWorkbook.Sheets(Feuille_Recherchée).Delete
             Application.DisplayAlerts = True
         Exit For
         End If
     Next
    .Sheets(Feuille_Recherchée).Copy after:=Workbooks("Vanessa_Classeur A.xls").Sheets(1)
End With
Workbooks("Vanessa_Classeur B.xls").Close
Sheets("Tabelle1").Select
Application.ScreenUpdating = True
End Sub

Amicalement

Merci de votre aide vous êtes vraiment très fort!!!

Rechercher des sujets similaires à "macro copier feuille classeur existe"