Copie à la suite

bonjour,

Je fais appel a vous car j'essaie de créer une amcro qui copie des données d'un fichier excel à un autre.

Jusque là, ok,

Cependant je rencontre 2 problèmes, malgrès ma macro, ma ligne source ne se colle pas à la première ligne vide du fichier qui reçoit la ligne.

2eme points : mon classeur receveur (classeur2) s'ouvre en lecture seule, et donc il m'est impossible de le fermer et de le sauvegarder par macro....

voici mon code :

Sub commandClick_1()

Application.DisplayAlerts = False 'desactive les message d'alerte
Application.ScreenUpdating = False ' desactive l'affichage des manip a l'ecran

Dim classeurSource As Workbook, classeurDestination As Workbook 'définition des variables

'ouvrir le classeur source (en lecture seule)
Set classeurSource = ThisWorkbook
'définir le classeur destination
Set classeurDestination = Application.Workbooks.Open("N:\essais macro\Classeur2.xlsm", , True)

'copier les données de la "Feuil1" du classeur source vers la "Feuil1" du classeur destination
classeurSource.Sheets("Feuil1").Range("A1:AJ1").Copy classeurDestination.Sheets("Feuil1").Cells.Range("A65535").End(xlUp)

'fermer le classeur source
Dim nom As String
    nom = Range("E1") & "_" & ActiveWorkbook.Name
    'changer le chemin du repertoire d'enregistrement en remplaçant ActiveWorkbook.Path par le chemin souhaité
    ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom
    rep = MsgBox("Votre base de données est sauvegardée sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur")

End Sub

Merci par avance pour voter aide

Bonjour,

C'est toi qui l'a écrit ainsi dans ton code !

Tu ouvres ton classeur en lecture seule (supprime donc tous les arguments après le nom du fichier !)

Tu définis le collage sur la dernière ligne occupée (.Offset(1) pour aller à ligne suivante !)

Maaaaa !!

ça marche du feu de Dieu !! Merci Merci !!

J'abuse si je te demande une ligne pour enregistrer les modifications du classeur destination et le fermer dans la foulée ?

J'ai essayé avec saveAs, saVe, etc... rien n'y fait !

En tout cas merci encore !

Bonjour,

Il y avait quelques autres anomalies (restes d'éléments antérieurs probablement...)

Sub commandClick_1()
    Dim wbD As Workbook, nom As String
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Set classeurDestination = Workbooks.Open("N:\essais macro\Classeur2.xlsm")
    With wbD.Worksheets("Feuil1")
        ThisWorkbook.Worksheets("Feuil1").Range("A1:AJ1").Copy .Range("A65535").End(xlUp)(2)
        nom = .Range("E1") & "_" & wbD.Name
    End With
    wbD.SaveCopyAs wbD.Path & "\" & nom
    MsgBox "Votre base de données est sauvegardée sous le nom : " & nom, vbInformation, _
     "Copie sauvegarde classeur"
    wbD.Close True
End Sub

La dernière ligne ferme le classeur en l'enregistrant.

Cordialement.

Merci beaucoup pour ce retour

J'ai essayé de comprendre mes erreurs par rapport aux modifications que tu as apporté, je ne comprend pas le (2) après le :

" End(xlUp )"

Je suis vraiment novice ( et c'est peu de le dire), mais du coup j''aimerai comprendre, histoire qu'à la prochaine je sache me débrouiller

en tout cas ça marche niquel !

Encore Merci !

Bonjour,

C'est la même chose que .Offset(1).

End(xlUp) renvoie la dernière cellule occupée. La cellule renvoyée est .Cells(1) ou (1) par définition, ou (A1 selon le type d'écriture).

En mettant (2) [ou .Cells(2)] tu renvoies la cellule de la ligne suivante.

De même quand tu mets .Offset(1).

Et tu aurais le même résultat en ajoutant .Range("A2").

Petit test :

Sub test()
    MsgBox ActiveSheet.Range("C5").Cells(-3, -1).Address
End Sub

La réponse qui sera renvoyée est : $A$1...

Cordialement.

Rechercher des sujets similaires à "copie suite"