VBA copie multi cellules d'un classeur sur un classeur fermé

Bonjour a tous,

Je me permet d’écrire ce message après avoir lu pas mal de sujet la dessus j'avoue que mes idées commencent a s'embrouiller.

J’aurais aime rajouter sur un vba déjà existant une fonction qui me permettrais de copier quelques cellules de différentes feuilles sur un classeur dans une autre feuilles d'un autre classeur.

Il faudrais pour cela collationner les différentes cellules ouvrir l'autre classeur et les coller sur une ligne vide ferme et enregistre le classeur.

Est ce que pour cela il ne serais pas plus simple de collationner les 9 cellules qui sont dans des feuilles différentes, faire une ligne dans un onglet de ce classeur et la coller dans le classeur fermé?

Merci d'avance

Bonjour,

tout ce qui simplifie est bénéfique. Pas forcément en temps mais des fois en compréhension.
Là si en plus tu remplaces 9 écritures (c'est gourmand ça) en une seule tu iras 9 fois plus vite.
Pour moi pas d'hésitation
(pas regardé s'il y avait une technique pour une écriture de plage dans un classeur fermé...)
eric

Oui tout a fait d'accord ..j'ai même essayer avec l'enregistrement de macro ...c'est un casse tete...mais je prend toutes les idees.

ex pour une cellule : Worksheets("tmp").Range("A1").Value = Worksheets("Feuil1").Range("D3").Value

Ca fait des heures que je planche la dessus...ca me semble coherent...

Juste la copie de mes deux cellule qui me sortent une plage...je crois que la nuit porte conseil..ou pas.

Sub CopierPlageCellulesEtEnregistrer()

    Dim ClasseurSource As Workbook
    Dim ClasseurCible As Workbook
    Dim FeuilleSource As Worksheet
    Dim FeuilleCible As Worksheet
    Dim PlageSource As Range
    Dim DerniereLigne As Long

    'Ouvre le classeur source
    Set ClasseurSource = Workbooks.Open("C:\Chemin\Vers\Le\Classeur\Source.xlsx")

    'Ouvre le classeur cible en lecture seule pour éviter de l'écraser
    Set ClasseurCible = Workbooks.Open("C:\Chemin\Vers\Le\Classeur\Cible.xlsx", True)

    'Définit la feuille source
    Set FeuilleSource = ClasseurSource.Sheets("NomDeLaFeuilleSource")

    'Définit la plage de cellules à copier
    Set PlageSource = FeuilleSource.Range("A1:B10") 'Modifier la plage selon vos besoins

    'Définit la feuille cible
    Set FeuilleCible = ClasseurCible.Sheets("NomDeLaFeuilleCible")

    'Détermine la dernière ligne utilisée dans la feuille cible
    DerniereLigne = FeuilleCible.Cells(Rows.Count, 1).End(xlUp).Row

    'Copie la plage de cellules de la feuille source à la feuille cible
    PlageSource.Copy FeuilleCible.Cells(DerniereLigne + 1, 1)

    'Enregistre et ferme le classeur cible
    ClasseurCible.Save
    ClasseurCible.Close

    'Ferme le classeur source sans l'enregistrer
    ClasseurSource.Close False
ex pour une cellule :
Worksheets("tmp").Range("A1").Value = Worksheets("Feuil1").Range("D3").Valuec'est a dire que tu met cette ligne autant de fois que tu as de cellule a copier? mais du coup il n'y a pas ce report apres une ligne puisque tu la place directement dans une cellule precise..

J'avais compris que tu voulais écrire 9 cellules dispersées sur une ligne temporaire avant écriture...
Fais ce que tu as besoin.

Par contre ouvrir le classeur cible où tu veux écrire en lecture seule, il y a un truc qui m'échappe.
eric

la ligne temporaire c’était une solution pour me simplifier la vie. si la copie directe est plus facile je suis preneur. oui c'etait une erreure l'ouverture en lecture seule c’était le fichier source que je voulais ouvrir en lecture seule.

Du coup j'ai réessayer de refaire mon code. la première partie a été faite avec l'enregistreur de macro...je pense qu'il est possible de l’alléger un peu...et la seconde partie avec mes neurones un peu fatigués de "débutant"...est ce que vous pensez que c'est cohérent?

Sub copiercoller()
'
' copiercoller Macro
'

'
    Sheets("PJ CONVENTIONNE 4").Select
    Range("G6:J6").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil4").Select
    Range("F3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("PJ CONVENTIONNE 4").Select
    Range("Q6:U6").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil4").Select
    Range("G3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("PJ CONVENTIONNE 4").Select
    Range("M3:X3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil4").Select
    Range("H3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("PJ CONVENTIONNE 4").Select
    ActiveWindow.ScrollWorkbookTabs Sheets:=-1
    Sheets("PLAN DE CHAMBRE").Select
    Range("I42").Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.ScrollWorkbookTabs Position:=xlLast
    Sheets("Feuil4").Select
    Range("I3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("PJ CONVENTIONNE 4").Select
    Range("G22:H22").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil4").Select
    Range("J3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("PJ CONVENTIONNE 4").Select
    Range("C22:D22").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil4").Select
    Range("K3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("PJ CONVENTIONNE 4").Select
    Range("I22:J22").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil4").Select
    Range("L3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("PJ CONVENTIONNE 4").Select
    Range("K22:L22").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Feuil4").Select
    Range("M3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub
Sub copcolltableau()
'
' copcolltableau Macro
'

'
    Set ClasseurCible = Workbooks.Open("C:\Users\Public\Documents\recapitulatif 2023.xlsx")
    ClasseurCible.ChangeFileAccess Mode:=xlReadWrite
    Set FeuilleSource = ClasseurSource.Sheets("Feuil4")
    Set PlageSource = FeuilleSource.Range("F3:M3")
    Set FeuilleCible = ClasseurCible.Sheets("recap")
    DerniereLigne = FeuilleCible.Cells(Rows.Count, 1).End(xlUp).Row
    PlageSource.Copy FeuilleCible.Cells(DerniereLigne + 1, 1)
    ClasseurCible.Save
    ClasseurCible.Close
    ClasseurSource.Save
    ClasseurSource.Close
End Sub
Set FeuilleSource = ClasseurSource.Sheets("Feuil4")

cette ligne me cause une erreur...pourquoi?

Bonjour,

où est Set ClasseurSource ?

Pour les questions n'ayant rien à voir avec le sujet en cours il faut démarrer un nouveau topic avec un titre en rapport.
Pense à ceux qui démarrent par une recherche avant de poster.
Un forum doit être ordonné pour être efficace...

Et fournir un classeur de travail réduit à l'essentiel pour la question augmente le taux, la rapidité et la pertinence des réponses
eric

Rechercher des sujets similaires à "vba copie multi classeur ferme"