Microsoft 365 Déplacer cellules en gardant mise en forme source et cible (via VBA)

mjuju

XLDnaute Nouveau
Bonjour,

Je souhaite déplacer des cellules en gardant la mise en forme de la source et de la cible.
Cela revient à un couper / collervaleurs mais il est impératif de rester sur une action sélection->déplacement sans actions intermédiaires.

Nous avons une série de classeur où nous souhaiterions appliquer ce VBA. Je mets en PJ l'un d'eux.
Généralement, on sélectionne plusieurs lignes de la colonne J, K, L, M que l'on déplace en C, D, E, F... (par exemple: J138:M142 déplacés en C146:F150 ou
J158:M158 déplacé en C151:F151 ou J160 en C169).

J'ai bien peur que ma demande ne soit possible: jusqu'à présent personne n'a trouvé la solution pour cette action précise!

Merci par avance,

Mjuju
 

Pièces jointes

  • Test.xlsx
    136.3 KB · Affichages: 7

TooFatBoy

XLDnaute Barbatruc
Si je considère M20 comme cellule source avec fond rouge et A2 comme cellule cible en fond bleu
Je veux juste déplacer M20 en A2 mais que la MEF de M20 reste en rouge et A2 reste en bleu
Dans ce cas, je pense qu'il suffit de :
- copier la Plage Source,
- puis faire un collage spécial pour ne coller que les valeurs dans la Plage Cible,
- puis nettoyer le contenu de la Plage Source.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Cela revient à un couper / collervaleurs mais il est impératif de rester sur une action sélection->déplacement sans actions intermédiaires.
Pouvez vous préciser ce que vous entendez par là ? Parce qu'il n'y a quand même pas beaucoup à faire : Sélectionner un groupe, Ctrl+X, en sélectionner un autre, Ctrl+V c'est tout.
Si vous voulez pouvoir en faire moins, il faut expliquer ce que qu'il faut garder.
Si vous voulez simplement sélectionner tour à tour des groupes de cellules et qu'une fois sur deux il coupe l'avant dernière et la colle dans la dernière c'est possible mais il faudrait à mon avis quand même au moins un bouton de commande permettant d'annuler la dernière sélection si elle n'était pas bonne.
Ou peut être mieux: la sélection normale est toujours enregistrée et un clic droit la copie et colle par valeur.
 

Dranreb

XLDnaute Barbatruc
Une ébauche de ma dernière proposition :
VB:
Option Explicit
Private RngSel As Range, RngCut As Range, Valeur
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Not RngSel Is Nothing Then
      Set RngCut = RngSel
      Valeur = RngCut.Value
      End If
   Set RngSel = Target
   End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Rem: Exécute d'abord aussi Worksheet_SelectionChange, finalisant ainsi la définition de RngCut et de Valeur.
   On Error Resume Next
   RngCut.ClearContents
   If IsArray(Valeur) Then
      Target.Resize(UBound(Valeur, 1), UBound(Valeur, 2)).Value = Valeur
   Else: Target.Value = Valeur: End If
   Cancel = Err = 0
   End Sub
Mais ça mériterait peut être en tête de la feuille un ToggleButton ActiveX indiquant que le dispositif est en service, et bien sûr quelques instructions inhibitrices supplémentaires si sa Value est False …
 

mjuju

XLDnaute Nouveau
Bonjour.
Pouvez vous préciser ce que vous entendez par là ? Parce qu'il n'y a quand même pas beaucoup à faire : Sélectionner un groupe, Ctrl+X, en sélectionner un autre, Ctrl+V c'est tout.
Si vous voulez pouvoir en faire moins, il faut expliquer ce que qu'il faut garder.
Si vous voulez simplement sélectionner tour à tour des groupes de cellules et qu'une fois sur deux il coupe l'avant dernière et la colle dans la dernière c'est possible mais il faudrait à mon avis quand même au moins un bouton de commande permettant d'annuler la dernière sélection si elle n'était pas bonne.
Ou peut être mieux: la sélection normale est toujours enregistrée et un clic droit la copie et colle par valeur.
Ce tableau est utilisé en déplaçant les cellules.
Par exemple :
une cellule en K10 en fond bleu bordure noir avec le texte: "exemple"
une cellule en D34 en fond rouge bordure grise sans texte
Je veux déplacer K10 en D34, je dois avoir en D34 le texte "exemple" avec un fond rouge et bordure gris. En K10 il y aurait le fond bleu bordure noir sans le texte
Ca revient à un couper/collervaleur. Mais l'utilisation de ce tableau se fait pas déplacement des cellules
Merci
 

Dranreb

XLDnaute Barbatruc
Voulez-vous dire par glisser/déposer du cadre de la plage ? L'ennui c'est que ça effectue déjà un coupé/collé de la plage avec son format. Une macro détectant le changement des deux plages ne saurait reconstituer leurs formats d'origine après coup. Pour l'instant j'ai seulement la solution par clic droit sur la cellule du coin haut gauche de la plage d'arrivée.
 

vgendron

XLDnaute Barbatruc
Hello

j'ai parcouru rapidement le fil,
il me semble que @TooFatBoy avait eu l'idée..
VB:
Sub deplace()
    Set ZoneToMove = Application.InputBox("Sélectionnez la zone à déplacer", Type:=8)
    Set ZoneDest = Application.InputBox("Sélectionnez la zone cible", Type:=8)
    
    ZoneDest.Resize(ZoneToMove.Rows.Count, 4) = ZoneToMove.Value
    ZoneToMove.ClearContents
End Sub

ici, la MEF cible n'est pas modifiée, pas plus que celle de la zone source (elle est juste vidée)
 

Dranreb

XLDnaute Barbatruc
Je joins un classeur qui échange sur tous les classeurs ouverts les valeurs de la dernière plage sélectionnée et de celles de la plage de même taille dont la cellule du coin haut gauche est sélectionnée par un clic droit.
 

Pièces jointes

  • ClicDroitÉchange.xlsm
    38.6 KB · Affichages: 4

TooFatBoy

XLDnaute Barbatruc
il me semble que @TooFatBoy avait eu l'idée..
Oui, mais il y a une condition à respecter :
Cela revient à un couper / collervaleurs mais il est impératif de rester sur une action sélection->déplacement sans actions intermédiaires.

J'avoue que je ne comprends pas ce que ça veut dire...
Faut-il ajouter une ligne au menu contextuel ???
 

Dranreb

XLDnaute Barbatruc
Moi non plus je n'avais pas compris ce que ça voulait dire.
J'avais fini par supposer que ça signifiait par glisser/déposer du cadre de la sélection.
Mais comme dit, ça je ne sais pas le transformer après coup en couper/coller des valeurs seules.
D'ailleurs vaut-il sans doute mieux garder cette opération standard tel quel mais plutôt ajouter une possibilité supplémentaire : l'échange des valeurs seules lors d'un clic droit ça n'existait pas encore.
 

Statistiques des forums

Discussions
315 093
Messages
2 116 140
Membres
112 669
dernier inscrit
Guigui2502