Copie de données d'un classeur vers un autre

TestSugar1

XLDnaute Nouveau
Bonjour,

J'ai à peu près la même problématique que dans le thread https://www.excel-downloads.com/threads/recuperer-le-nom-dun-classeur-dans-une-macro.76971/.

J'aimerais copier les données d'un fichier Adresses erronées 200902.xls vers un fichier Adresses erronées_macro.xls, dans lequel il y a des macros, et un bouton.

J'ai essayé le code suivant :
Code:
Sub Copie_données()

' Copie des données depuis le fichier Adresses erronées 200902.xls

Dim Nom As String, wb As Workbook
       
    Nom = Application.GetOpenFilename(filefilter:="Fichier Excel (*.xls),*.xls")
    If Nom = "" Then
        MsgBox "Aucun Fichier Sélectionné", vbOKOnly + vbCritical, "Intégration non réalisée"
        Exit Sub
    Else
        Workbooks.Open Filename:=Nom
    End If

Set wb = ActiveWorkbook

wb.Activate 'mais il est déjà activé, ensuite tu utilises la variable wb comme un objet "classeur"

    Sheets("Email").Select
    Sheets("Email").Copy After:=Workbooks("Adresses erronées_macro.xls").Sheets("Feuil1")
    Sheets("Feuil1").Activate
    
    'UserForm1.Show

End Sub

Le problème c'est que ça me copie bien les données du fichier source vers le fichier cible, mais dans un nouvel onglet (qui s'appelle Email).
Ce que je voudrais, ce serait copier mes données dans l'onglet existant, dans lequel j'ai le bouton de lancement de la macro.
Je suppose que c'est le Copy After qu'il faut modifier, mais quelle est la bonne syntaxe ?

Autre chose : est-il possible de ne pas mettre le nom de mon fichier cible (= fichier dans lequel se trouve cette macro = Adresses erronées_macro.xls) en dur dans le code ? Quelque chose comme "Fichier courant" ?

Et comment est-ce que je peux fermer automatiquement le fichier source une fois que j'ai fini de copier mes données ?



Merci:)
 

vbacrumble

XLDnaute Accro
Re : Copie de données d'un classeur vers un autre

Re


Voici un exemple simple avec 2 classeurs ouverts
(nommés ClasseurAA.xls et ClasseurBB.xls)

La macro ci-dessous, copie le contenu de la feuil1 du classeurBB
vers la feuille active du classeurAA

Code:
Sub copietest()
[COLOR="Green"]'Déclarations[/COLOR]
Dim Source As Workbook, Destination As Workbook
Dim f1 As Worksheet, f2 As Worksheet
Dim pf1 As Range, pf2  As Range
[COLOR="Green"]'Désignations[/COLOR]
Set Source = Workbooks("ClasseurBB.xls")
Set Destination = ThisWorkbook
Set f1 = Destination.ActiveSheet
Set f2 = Source.Sheets("Feuil1")
Set pf2 = f2.Range("A1").CurrentRegion
Set pf1 = f1.Range("A1")
[COLOR="Green"]'copie source vers destination[/COLOR]
pf2.Copy pf1
End Sub
 

TestSugar1

XLDnaute Nouveau
Re : Copie de données d'un classeur vers un autre

Re, bonjour le fil

Quel le nom de la feuille source dans le classeur source?
Le nom de de la feuille de destination dans le classeur destination ?

Pardon, je n'ai pas bien précisé.
La source est le fichier Adresses erronées 200902.xls, où la feuille s'appelle "Email".
La cible est le fichier Adresses erronées_macro.xls, où la feuilles s'appelle "Feuil1".

J'ai essayé le code que tu m'as mis en exemple, mais j'aimerais récupérer la partie demandant à l'utilisateur de sélectionner le nom du fichier source (qui pourra ainsi être déplacé ou renommé).

J'ai essayé ça :
Code:
Sub Copie_donnees()

' Copie des données depuis le fichier Adresses erronées 200902.xls : c'est l'utilisateur qui sélectionne le fichier

'Déclarations
Dim Nom As String
Dim wb As Workbook
Dim Source As Workbook, Destination As Workbook
Dim f1 As Worksheet, f2 As Worksheet
Dim pf1 As Range, pf2  As Range
       
    Nom = Application.GetOpenFilename(filefilter:="Fichier Excel (*.xls),*.xls")

'Désignations
Set Source = Workbooks(Nom)
Set Destination = ThisWorkbook
Set f1 = Destination.ActiveSheet
Set f2 = Source.Sheets("Email")
Set pf2 = f2.Range("A1").CurrentRegion
Set pf1 = f1.Range("A1")

End Sub

mais apparemment il n'aime pas mon Set Source = Workbooks(Nom)...
Quelle est la bonne syntaxe ?
 

vbacrumble

XLDnaute Accro
Re : Copie de données d'un classeur vers un autre

Re


Essayes ceci pour voir

Code:
Sub Copie_donnees()

' Copie des données depuis le fichier Adresses erronées 200902.xls : c'est l'utilisateur qui sélectionne le fichier

'Déclarations
Dim Nom As String
Dim wb As Workbook
Dim Source As Workbook, Destination As Workbook
Dim f1 As Worksheet, f2 As Worksheet
Dim pf1 As Range, pf2  As Range
       
    Nom = Application.GetOpenFilename(filefilter:="Fichier Excel (*.xls),*.xls")

MsgBox Nom
End Sub
 

vbacrumble

XLDnaute Accro
Re : Copie de données d'un classeur vers un autre

Re

Et maintenant la msgbox t'affiche quoi ?


Code:
Sub nomclasseur()
Dim Nom$
Nom = Application.GetOpenFilename(filefilter:="Fichier Excel (*.xls),*.xls")
MsgBox Split(Nom, "\")(UBound(Split(Nom, "\")))
End Sub

PS: je te laisse tester, je dois m'absenter.
 

Discussions similaires

Réponses
5
Affichages
136

Statistiques des forums

Discussions
312 338
Messages
2 087 396
Membres
103 534
dernier inscrit
Kalamymustapha