* positionnez-vous sur C2 (avec votre formule)
* faites CTRL+X
* positionnez-vous sur E2 (une cellule de la plage du 2ième paramètre)
* faites CTRL+V
résultat, formule disparu
si vous avez besoin d'un caméra, voici un et modifiez quelque chose dans la plage A1:E4 (contenu, couleur, bordures, ...)
Bonjour Bart
J'ai vu un cas qui reproduit le problème.
Si vous déplacer la cellule formule dans une cellule contenant un résultat de la formule.
C2 déplacé en E2 (qui contient un résultat de la formule en C2 initiale).
Ci dessous une fois collé.
Résultat => PANIQUE! 😂. C'est vrai plus de formule.
Allez avouez!! C'est vicieux, non? 😄
Ce ne sont que quelques lignes de codes pour savoir si cette partie était "coupable".
En effet il faudrait contrôler si la cellule est vide avant de l'autoriser . Là on passe à autre chose.
Pour mémo ce n'est que cela.:
Option Explicit
Dim TabloToWrite
' C'est un exemple extrait de mon UDF Balance
' Copie la/les cellules sélectionnée(s) ailleurs.
' Soit dans une autre zone soit en décalage (offset)
Function Start(SelectedCells As Range, Optional Where As Range, Optional OffsetRow As Integer = 0, Optional OffsetCol As Integer = 1)
Dim Rep
Dim RangeTmp As Range
On Error GoTo ErrHandlers
' Controle si Where est absent
If TypeName(Where) = "Nothing" Then
' Si oui on utilise les offsets fournis ou leurs valeurs par défaut
Set RangeTmp = SelectedCells.Offset(OffsetRow, OffsetCol)
Else
' Si fourni on prend ce parametre
Set RangeTmp = Where
End If
' Désactive Volatile
Application.Volatile False
' Tranfert les valeurs de la selection dans le tableau
TabloToWrite = SelectedCells
' Appel la fonction d'écriture
Rep = CallWriteToCell(RangeTmp.Address(, , , , True))
' Juste pour afficher un retour. Ne sert à rien
Start = SelectedCells.Cells(1).Value
' Active Volatile
Application.Volatile True
Exit Function
ErrHandlers:
Debug.Print "Start: "; Err.Number, Err.Description, Erl
Stop
Err.Clear
Resume Next
End Function
Private Function CallWriteToCell(CopyTo As String) 'CopyFrom As Variant, CopyTo As Range)
Dim TmpRange As Range
On Error GoTo ErrHandlers
Set TmpRange = Range(CopyTo)
TmpRange.Parent.Evaluate "WriteToCellsEvaluate(" & TmpRange.Address(, , , True) & ")"
Exit Function
ErrHandlers:
Debug.Print "CallWriteToCell: "; Err.Number, Err.Description, Erl
Stop
Err.Clear
Resume Next
End Function
Private Sub WriteToCellsEvaluate(CopyTo As Range)
On Error GoTo ErrHandler
CopyTo = TabloToWrite
Exit Sub
ErrHandler:
' #If DoDebug = True Then
Debug.Print "WriteToCellsEvaluate: "; Err.Description, Err.Number, Erl
' #End If
Stop
Err.Clear
Resume Next
End Sub
Merci beaucoup pour votre aide.
Cordialement