Sub SensAB()
ShapePlageSourceVersCelluleCible Range("b5:j23"), Range("o5")
End Sub
Sub SensBA()
ShapePlageSourceVersCelluleCible Range("o5:w24"), Range("b5")
End Sub
Sub ShapePlageSourceVersCelluleCible(PlageSource As Range, CelluleCible As Range)
Dim PlageCible As Range, xrgHaut As Range, xrgBas As Range, x As Shape, dx#, dy#, repSuppr
' plage cible (débute en CelluleCible et de mêmes dimensions que PlageSource
Set PlageCible = CelluleCible.Resize(PlageSource.Rows.Count, PlageSource.Columns.Count)
' suppression des formes de la plage cible (à confirmer)
' si pas de suppression alors on ajoute les formes de la plage A vers la Plage B, c'est une
' espèce de superposition
repSuppr = MsgBox("Voulez-vous supprimer toutes les formes ""ENTIèREMENT"" incluses" & _
" dans la zone cible ? (pas de retour possible !)", vbYesNo + vbQuestion + vbDefaultButton2)
If repSuppr = vbYes Then
repSuppr = MsgBox("CONFIRMEZ-VOUS la suppression de toutes les formes ""ENTIèREMENT"" incluses" & _
" dans la zone cible ? (pas de retour possible !)", vbYesNo + vbQuestion + vbDefaultButton2)
If repSuppr = vbYes Then
For Each x In Me.Shapes ' on supprime les formes "ENTIéREMENT" incluses dans la plage cible
If Not Intersect(x.TopLeftCell, PlageCible) Is Nothing Then
If Not Intersect(x.BottomRightCell, PlageCible) Is Nothing Then x.Delete
End If
Next x
End If
End If
' Translation à faire : dx déplacement horizontal - dy déplacement vertical
dx = PlageCible.Left - PlageSource.Left: dy = PlageCible.Top - PlageSource.Top
' déplacement des formes "ENTIéREMENT" incluses dans la plage source vers la plage cible
For Each x In Me.Shapes ' pour chaque forme x de la feuille
' si x est "ENTIéREMENT" incluse dans la plage source alors on la déplace vers la cible
If Not Intersect(x.TopLeftCell, PlageSource) Is Nothing Then
If Not Intersect(x.BottomRightCell, PlageSource) Is Nothing Then
x.Top = x.Top + dy: x.Left = x.Left + dx ' déplacement par translation (dy,dx)
x.ZOrder msoBringToFront ' la forme qu'on vient de déplacer est mise à l'avant-plan
End If: End If
Next x
End Sub