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

  • Initiateur de la discussion Initiateur de la discussion mjuju
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Bonjour mjuju, le forum,

Sélectionnez les cellules que vous voulez en colonnes J:M et exécutez cette macro :
VB:
Sub Transfert()
Dim c As Range
ActiveCell.Activate 'au cas où Selection n'est pas un Range
For Each c In Selection
    If Not Intersect(c, [J:M], ActiveSheet.UsedRange) Is Nothing And Not Cells(c.Row, 10).Validation Is Nothing Then c(1, -6) = c
Next
End Sub
Faites au besoin une sélection multiple (touche Ctrl enfoncée).

A+
 
La macro précédente n'est pas fameuse, utilisez celle-ci :
VB:
Sub Transfert()
Dim r As Range
ActiveCell.Activate 'au cas où Selection n'est pas un Range
Set r = Intersect(Selection, [J:M], ActiveSheet.UsedRange)
If r Is Nothing Then Exit Sub
For Each r In r 'si sélection multiple
    If Not Cells(r.Row, 10).Validation Is Nothing Then r(1, -6) = r
Next
End Sub
Elle va bien même si l'on sélectionne toutes les cellules de la feuille active.
 
Ha d'accord j'ai compris 🙂 Ce n'est pas tout à fait ce que je souhaitais car les lignes ne se reportent pas forcement sur la même ligne.
Ca peut être:
J138:M142 déplacés en C146:F150 ou
J158:M158 déplacé en C151:F151 ou
J160 en C169 ou
inversement (des cellules des colonnes C D E F à des cellules de colonnes J K L M)

C'est pour ça que je cherche une solution qui s'applique sur n'importe quelle source à n'importe quelle cible, d'autant plus que je veux appliquer ce VBA à d'autres classeurs qui ont une mise en page totalement différent.
Les pistes que j'ai essayé sans succès:
Sélections source-> si déplacement = couper -> déplacement cible= coller valeurs
ou
Sélections source->déplacement -> garder mise en forme des cellules cibles et des cellules sources
 
les lignes ne se reportent pas forcement sur la même ligne.
Ca peut être:
J138:M142 déplacés en C146:F150 ou
J158:M158 déplacé en C151:F151 ou
J160 en C169 ou
inversement (des cellules des colonnes C D E F à des cellules de colonnes J K L M)
Utilisez ces 2 macros :
VB:
Sub SelectCF()
'se lance par le raccourci Ctrl+C
Dim r As Range, lig&, decal&, dest As Range
ActiveCell.Activate 'au cas où Selection n'est pas un Range
Set r = Intersect(Selection, [C:F], ActiveSheet.UsedRange)
If r Is Nothing Then Exit Sub
lig = Abs(Int(Val(InputBox("Numéro de ligne du collage :"))))
If lig = 0 Then Exit Sub
decal = lig - Selection(1).Row
For Each r In r 'si sélection multiple
    Set dest = r(1, 8).Offset(decal)
    If Not Cells(r.Row, 3).Validation Is Nothing And Not Cells(dest.Row, 10).Validation Is Nothing Then dest = r
Next
End Sub

Sub SelectJM()
'se lance par le raccourci Ctrl+J
Dim r As Range, lig&, decal&, dest As Range
ActiveCell.Activate 'au cas où Selection n'est pas un Range
Set r = Intersect(Selection, [J:M], ActiveSheet.UsedRange)
If r Is Nothing Then Exit Sub
lig = Abs(Int(Val(InputBox("Numéro de ligne du collage :"))))
If lig = 0 Then Exit Sub
decal = lig - Selection(1).Row
For Each r In r 'si sélection multiple
    Set dest = r(1, -6).Offset(decal)
    If Not Cells(r.Row, 10).Validation Is Nothing And Not Cells(dest.Row, 3).Validation Is Nothing Then dest = r
Next
Hello TooFatBoy.
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour