XL 2013 copier/coller d une selection multiple

floreli

XLDnaute Nouveau
Bonjour a tous,
pour ce premier message, je fais appelle aux personnes qui maitrisent mieux que moi VBA...Je chercher depuis une semaine sans trouver ma reponse.

je cherche a copier/coller une selection multiple (qui sera toujours la meme) d un classeur 1 feuille 1 vers un classeur X feuille 1. Ce classeur X est exactement le meme que classeur 1 sauf que je ne connais pas son nom a l avance, et qu il est vide. Mais les 2 ont la meme structure, memes noms de feuillles, ....

Donc concretement, je veux faire ca :

1/je parts d un classeur vierge.
2/je le renomme sous un nom par exemple classeur 1. je remplis ce dont j ai besoin.je sauve.
3/je reouvre mon classeur vierge 1semaine apres, je le renomme sous un nom par exemple classeur 2, mais sans le remplir.
J ai maintenant mes 2 classeurs ouverts en meme temps.
4/et je veux copier/coller une selection multiple du classeur 1 feuille 1 vers mon classeur 2 feuille 1. (les 2 feuille1 des mes 2 classeurs ont la meme structure)

je veux juste coller les valeurs et je veux que les positions ou adresses (je ne sais pas comment ont dit) des mes cellules suivent, si par exemple je veux copier range("A10:A20,F10:CG35") alors que ca aille bien coller aux memes adresses A10:A20 et F10:CG35


j ai essayé pas mal de chose, Union, Array,. ... essayé bcp de code trouvés sur des forums, rien n y fait.....je n y arrive pas. (La solution qui consiste a copier toute la feuille et ensuite effacer ne me va pas)


je suis parti dans mon idée avec 2 macros, placées dans mon classeur initial (donc qui seront aussi dans tous les classeurs pas la suite). Une macro "Copier" et une macro"Coller". Quand j ai mes 2 fichiers ouverts, je selectionne la feuille 1 du classeur 1, j active la mcaro "Copier", je selectionne la feuille 1 de mon classeur 2 et j active la macro "Coller".


j ai approximativement 1000-1500 cellules a copier/coller.

voila, j espere avoir été precis.

voici une de mes tentatives qui ne marche pas "

VB:
Sub copier()

Dim plagesmulti As Range
Dim plage1, plage2, plage....... As Range
Dim sh As Worksheet

Set sh = ThisWorkbook.Worksheets("1")
Set plage1 = Range("A5:A20")
Set plage2 = Range("C22:F32")
.......

Set plages = Array(plage1, plage2,.......)
plages.select
selection.copy

End Sub



et ma macro "COLLER"

VB:
Sub coller()

Selection.PasteSpecial PASTE:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
        
            
End Sub


merci a tous, floreli
 

Dranreb

XLDnaute Barbatruc
Il n'y a pas de variable WshSrc dans cette façon de l'écrire. C'est Me puisque c'est l'objet Worksheet où est écrit le code.
Pour avoir moins de détail dans le MsgBox vous pouvez faire comme ça :
VB:
Option Explicit
Private WithEvents AppXls As Application
Private Sub CBnCopier_Click()
   Set AppXls = Application
   End Sub
Private Sub AppXls_WorkbookActivate(ByVal Wb As Workbook)
   AppXls_SheetActivate Wb.ActiveSheet
   End Sub
Private Sub AppXls_SheetActivate(ByVal Sh As Object)
   Dim WshCbl As Worksheet, RngA As Range
   If TypeOf Sh Is Excel.Worksheet Then
      Set WshCbl = Sh
      Select Case MsgBox("Voulez vous coller dans '[" & WshCbl.Parent.Name & "]" & WshCbl.Name & "'" _
         & vbLf & "les valeurs de '[" & ThisWorkbook.Name & "]" & Me.Name & "' ?", vbYesNoCancel, "COLLER")
         Case vbYes: For Each RngA In Me.[A5:A20,C22:F32].Areas
               WshCbl.Range(RngA.Address).Value = RngA.Value
               Next RngA
         Case vbNo: Exit Sub
         End Select
      Set AppXls = Nothing: End If
   End Sub
 

floreli

XLDnaute Nouveau
Bonjour, j ai réussi a mettre en place ce que je voulais, c est a dire a dupliquer la manip sur plusieurs feuilles c est super ca marche niquel, super boulot, merci encore.

Par contre, pas hyper important, mais je n arrive pas a enlever les details des ranges dans le MsgBox. je suis parti avec la 1ere methode Sub Proposercoller.
 

Dranreb

XLDnaute Barbatruc
Mais comme montré au poste #16, j'avais décidé d'utiliser une variable RngSrc As Range parce que j'en avais besoin à deux endroits:
1 — pour en restituer l'adresse dans le MsgBox, 2 — pour le For Each RngA In RngSrc.Areas
Si on ne veut plus restituer l'adresse dans le MsgBox il vaut mieux noter seulement l'objet Worksheet dans une variable WshSrc As Worksheet et mettre l'expression de ce range seulement dans la For Each RngA In WshSrc.[…,…,…].Areas
 

Dranreb

XLDnaute Barbatruc
C'est toujours la même méthode depuis le poste #13. Mais pourquoi ne préférez vous pas la programmer dans l'objet Worksheet représentant la feuille source plutôt que dans l'objet ThisWorkbook ? Techniquement peu importe, pouvu que ce soit dans un module objet, les procédures évènements étant interdites dans un module standard, mais il faut quand même faire au plus simple, non ?
 

floreli

XLDnaute Nouveau
Merci bien pour le coup de main. ca marche impec. Le probleme est que je me suis lancé tete baisser dans l apprentissage tout seul du VBA et que je n ai pas les bases...je ne compreds pas vraiment la difference entre le fait de placer un code ici ou la. Je vois bien que ca marche ou pas, mais je ne comprends pas la difference techniquement.
j apprends tout doucement. Pour le moment je suis arrivé a ce que je voulais faire. Donc en tout cas encore une fois un grand merci. je clos le sujet !
 

Dranreb

XLDnaute Barbatruc
Alors il faut l'apprendre très vite la différence !
En gros un module de la rubrique Modules de l'explorateur de projet est dit Module standard.
Tous les modules des autres rubriques sont de modules objets, c'est à dire étroitement liés à quelque chose d'autre qu'on appelle un objet, à ne pas confondre avec ce qu'il représente. Pour un électricien l'objet qui peut l'intéresser ce n'est pas le pont roulant, qui n'est pas du tout de sa partie, c'est le boitier de commande du pont roulant. Et bien pour le programmeur c'est pareil: une feuille Excel n'est pas un objet, c'est ce que j'appelle une entité de l'application hôte, c'est l'objet Worksheet qui permet de la manipuler qui en est un.
Dans un module standard une chose Public est connue dans tout le projet et son nom doit y être unique. Le mot clé Me est interdit.
Dans un module objet une variable Public est une propriété de l'objet, et une procédure Public en est une méthode. Le mot clé Me designe l'objet auquel il est attaché.
 
Dernière édition:

Discussions similaires