Autres Copie dans le presse-papier d'une sélection multiple

Renaud22

XLDnaute Junior
Bonjour à tous,

J'aurais besoin qu'on m'aide à concevoir un code VBA afin de permettre la copie, dans le presse-papier, d'une sélection multiple.

Dans un des fichier ci-joints (Classeur1.xlsm), plusieurs tableaux sont représentés avec différentes valeurs.

Par exemple, pour le tableau 3-5KVA, j'aimerais qu'une macro puisse copier la plage P4-P31 ainsi que la cellule Q35 dans le presse-papier. Une fois la cellule D48 sélectionnée dans l'autre fichier ci-joint (Classeur2.xlsm), et en activant "coller", les valeurs du tableau 3-5KVA seront copiées (colonnes D et E).

Un autre exemple est donné avec le tableau 150-167,5 KVA (Classeur1.xlsm) et les colonnes F et G (Classeur2.xlsm). Je pourrai adapter le code VBA pour tous les tableaux du Classeur1.xlsm. Le nom des classeurs peut varier.

En vous remerciant par avance pour votre précieuse aide.

Salutations,

Renaud22.
 

Pièces jointes

  • Classeur1.xlsm
    26.9 KB · Affichages: 4
  • Classeur2.xlsm
    119.4 KB · Affichages: 3

Renaud22

XLDnaute Junior
Bonjour job75,
On peut choisir l'emplacement de la copie en fonction de la cellule sélectionnée dans Classeur2.xlsm, soit D48 ou F48, ou H48 ou J48, ... Dans le Classeur2.xlsm, la cellule D48 a été sélectionnée et la copie de la plage P4-P31 ainsi que la cellule Q35 a été effectuée. Notez bien, le nom du fichier cible peut varier.
 

job75

XLDnaute Barbatruc
Ouvrez Classeur1.xlsm et voyez le code :
VB:
Dim mem1, mem2 'mémorise les variables

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Areas.Count <> 2 Then Exit Sub
Dim n, test1 As Boolean, test2 As Boolean
For n = 1 To 2
    If Target.Areas(n).Count = 28 And Target.Columns.Count = 1 Then test1 = True: mem1 = Target.Areas(n)
    If Target.Areas(n).Count = 1 Then test2 = True: mem2 = Target.Areas(n)
Next
If Not test1 And test2 Then mem1 = Empty
End Sub

Sub Coller()
'se lance par les touches Ctrl+M
If IsEmpty(mem1) Then Exit Sub
ActiveCell.Resize(28) = mem1
ActiveCell(32, 2) = mem2
End Sub
Sélectionnez la plage P4: P31 et touche Ctrl enfoncée sélectionnez Q35.

Puis ouvrez Classeur2,.xlsm, sélectionnez D48 et touches Ctrl+M.
 

Pièces jointes

  • Classeur1.xlsm
    33.3 KB · Affichages: 4
  • Classeur2.xlsm
    110.8 KB · Affichages: 2
Dernière édition:

Renaud22

XLDnaute Junior
Bonjour job75,
Votre macro fonctionne très bien lorsqu'on ouvre les deux fichiers dans une même session Excel dans deux fenêtres différentes. J'utilise plusieurs écrans et j'ouvre habituellement une session Excel sur un écran (Classeur1.xlsm) et une autre session Excel sur un autre écran (Classeur2.xlsm). Est-ce possible de copier les données avec cette configuration de deux écrans?
 

patricktoulon

XLDnaute Barbatruc
re
sur deux cessions distinct là oui il faut passer par le clipboard
ou mettre la sub coller dans le classeur 2
ce qui n'est pas envisageable vu que les classeur peuvent varier
d'ailleurs si le classeur1 doit varier aussi alors les macros devront être dans le xlb ou un complément (addins)
bref plus d'informations sur ces points seraient les bien venues
 

Renaud22

XLDnaute Junior
re
sur deux cessions distinct là oui il faut passer par le clipboard
ou mettre la sub coller dans le classeur 2
ce qui n'est pas envisageable vu que les classeur peuvent varier
d'ailleurs si le classeur1 doit varier aussi alors les macros devront être dans le xlb ou un complément (addins)
bref plus d'informations sur ces points seraient les bien venues
Je comprends la difficulté que constitue toutes ces opérations. En réalité, le fichier source (Classeur1.xlsm) contrairement à ce que j'ai écris, ne change pas de nom, mais uniquement le fichier cible (Classeur2.xlsm). Déjà, l'aide que vous m'avez apporté est très précieuse et je vous en remercie.
 

job75

XLDnaute Barbatruc
Bonjour Renaud22, Patrick, le forum,

J'ai ouvert une 2ème instance d'Excel en cliquant sur l'icône Excel du menu Démarrer, touche Alt enfoncée.

Effectivement il est impossible depuis cette instance de lancer la macro Coller du fichier source.

A+
 

patricktoulon

XLDnaute Barbatruc
Bonjour @job75
il y a peut être une solution
ajouter deux items au menu contextuel des cells peut etre
le onAction des boutons "copier spé" et "coller spé" avec chemin classeur explicite
exemple
dans le module thisworkbook
VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
CommandBars("Cell").Reset
End Sub

Private Sub Workbook_Open()
additemmenucell
End Sub

Private Sub Workbook_Activate()
additemmenucell
End Sub

Private Sub Workbook_Deactivate()
Application.CommandBars("Cell").Controls(2).Enabled = True
End Sub

dans un module standard
VB:
Sub additemmenucell()
   Dim bout As CommandBarControl
   With CommandBars("Cell")
        .Reset
        Set bout = .Controls.Add(msoControlButton, , , 1, True)
        With bout
            .Caption = "copier la colonne"
            .FaceId = 5378
            .OnAction = ThisWorkbook.Name & "!copyspecial"
        End With
        Set bout = .Controls.Add(msoControlButton, , , 2, True)
        With bout
            .Caption = "coller la copie"
            .FaceId = 5378
            .OnAction = ThisWorkbook.Name & "!collespecial"
       .Enabled = False
       End With

    End With
End Sub

Sub copyspecial()
    MsgBox "on copie"
End Sub
Sub collespecial()
    MsgBox "on colle"
End Sub

bien sur le bouton coller est enbled uniquement sur un autre classeur
parti de là on pourrait même se passer du clip et utiliser des variables tableaux
demo.gif
 

Pièces jointes

  • exemplecopycolle2classeurs.xlsm
    15.9 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
314 718
Messages
2 112 177
Membres
111 452
dernier inscrit
christine64