Déplacer des formules

Comment déplacer un groupe de cellule sans que les formules contenant des références relatives de ces cellules ne se modifient.

Si par exemple tu as la formule =moyenne(A1:A3) en B1 et que tu copies la cellule B1 sur C1, la formule devient =moyenne(B1:B3). C'est principe même des références relatives et c'est généralement ce que l'on souhaite ! Mais pas toujours... Par exemple tu peux vouloir ensuite en C1 changer moyenne par ecartype en gardant exactement les mêmes références (relatives) dans la cellule. Ici l'exemple de formule est évidemment simplifié mais quand la formule est longue, et quand il y en a beaucoup, ça devientpénible.

Pour faire ce que tu souhaites, une seule solution à la main : copier cellule par cellule le contenu de la barre de formule et le placer où tu souhaites.
Sinon hélas pas de solution toute faite dans excel.

Une astuce très pratique : pour déplacer un bloc de formules je le sélectionne puis édition/remplacer "=" par "&&&" par exemple => la formule devient du texte qu'on déplace donc sans modification. puis une fois le bloc déplacé je fais remplacer "&&&" par =

Si tu fais cela très souvent, cela vaut le coup de mettre cette macro et la fonction associée dans ton perso.xls, associé à un bouton perso :

Function RngInput(Optional Prompt As String, Optional Defaut As Range) As Range
  Const Title As String = "Saisie utilisateur"
  
  If Prompt = "" Then Prompt = "Veuillez sélectionner une ou plusieurs cellules"
  With Application
    If Defaut Is Nothing Then
      If ActiveCell Is Nothing Then
        Set RngInput = .InputBox(Prompt, Title, , , , , , 8)
      Else
        Set RngInput = .InputBox(Prompt, Title, ActiveCell.Address, , , , , 8)
      End If
    Else
      On Error Resume Next
      Set RngInput = .InputBox(Prompt, Title, Defaut.Address, , , , , 8)
    End If
  End With
End Function
Sub copieformules()
Dim ZoneDepart As String
Dim ZoneArrivee As Range
ZoneDepart = Selection.Address
Set ZoneArrivee = RngInput()
If ZoneArrivee Is Nothing Then MsgBox "Opération annulée !", 64, "Info utilisateur": Exit Sub
ZoneArrivee.Formula = Application.ConvertFormula(Range(ZoneDepart).Formula, xlA1)
End Sub

Astuce illustrée par ce classeur
fc-copierelative

Auteur :

Mots clefs associés à cette page : ,