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 FalseWorksheets("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 SubSet 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