Monsieur Excel
Pour tout savoir faire sur Excel !

05 novembre 2016

Copie depuis une sélection multiple

Vous avez déjà probablement constaté que, dans Excel, on ne peut pas opérer une sélection multiple, puis la copier pour aller la coller ailleurs. La macro que nous vous proposons aujourd’hui, due à Kevin Jones, résout ce problème, au moins en partie. Pour illustrer l’utilisation de cette macro, nous allons reprendre l’exercice présenté dans l’article précédent, mais nous aurions pu prendre n’importe quel autre tableau Excel.


Comme nous pouvons le voir dans la copie d’écran, nous avons sélectionné le bloc E1:E6 puis, en maintenant la touche [Ctrl] enfoncée, le bloc A2:B3. Nous avons alors exécuté la macro PressePapiers puis cliqué en A8. Nous avons enfin utilisé [Ctrl]-v pour coller le résultat en A8.

Cette macro permet donc de copier une sélection multiple !

Remarque – Nous notons une originalité dans le résultat. Les données provenant du bloc A2:B3 sont recollées en une seule colonne. Cela peut intéresser les personnes souhaitant ramener en une colonne unique des données provenant de plusieurs blocs, chacun pouvant être bidimensionnel.

En revanche, on ne peut hélas pas recoller tout cela en respectant les positions relatives des blocs originaux ! A moins qu’un lecteur particulièrement créatif de ce blog ne trouve la solution…


2 Commentaire(s):

  • Bonjour,

    Ci-joint une tentative (avec des limites) sans faire appel aux ID d'application, ni aux API Windows, du VBA Excel pur !
    CONVENTION IMPORTANTE : dans la sélection multiple rajouter EN DERNIER la cellule de destination, puis lancer la macro.
    Le principe consiste à détermine une plage-cadre, un rectangle, encadrant complètement la sélection multiple. On copie cette plage cadre sur la destination, matérialisée par la dernière cellule sélectionnée puis, sur la plage copiée, on vide les cellules non concernées par la copie.

    Attention ! cette technique est destructrice si la zone destination contient déjà des informations.
    Remarque 1 : la macro n'est valable que pour une copie sur la feuille active.

    ---------------------------------------------------------------------------

    Sub copie_multiplages()
    Dim zone As Range
    Dim copie As Range
    Dim glmin As Long
    Dim glmax As Long
    Dim gcmin As Long
    Dim gcmax As Long
    Dim cellule As Range
    Dim dl As Integer
    Dim dc As Integer


    glmin = 16000000
    gcmin = 16384

    ' Détermination des cellules haut/gauche et bas/droite de la plage-cadre
    ' glmin et glmax sont les n°s de lignes extrêmes
    ' gcmin et gcmax sont les n°s de colonnes extrêmes
    For Each zone In Selection.Areas
    With zone
    If .Address <> ActiveCell.Address Then
    With .Columns(1)
    If .Cells(.Cells.Count).Row > glmax Then glmax = .Cells(.Cells.Count).Row
    If .Cells(1).Row < glmin Then glmin = .Cells(1).Row
    End With

    With .Rows(1)
    If .Cells(.Cells.Count).Column > gcmax Then gcmax = .Cells(.Cells.Count).Column
    If .Cells(1).Column < gcmin Then gcmin = .Cells(1).Column
    End With
    End If
    End With
    Next zone

    ' copie effective de la plage cadre vers la destination (Activecell)
    ' la plage destination est un objet Range nommé "copie"
    Range(Cells(glmin, gcmin), Cells(glmax, gcmax)).Copy Destination:=ActiveCell
    Set copie = Range(ActiveCell, ActiveCell.Offset(glmax - glmin, gcmax - gcmin))

    ' Calcul des décalages Ligne/colonne entre la plage-cadre et la copie
    dl = ActiveCell.Row - glmin
    dc = ActiveCell.Column - gcmin

    ' Vidage des cellules hors sélection
    For Each cellule In copie.Cells
    If Application.Intersect(Selection, cellule.Offset(-dl, -dc)) Is Nothing Then cellule.Clear
    Next cellule
    End Sub

    ------------------------------------------------------------------------------

    By Anonymous cduigou, sur 9:41 AM  

  • Excellent suggestion !

    Cela fonctionne très bien.

    Il y a une différence cependant avec ce que j'avais proposé : vous mettez aussi dans le presse-papiers le formatage (police, style, cadres...) des cellules concernées.

    Mais il faut en effet bien faire attention à mettre en dernier dans la sélection multiple la cellule de destination !

    By Blogger Hervé Thiriez, sur 10:19 AM  

Enregistrer un commentaire

<< Accueil