Sub Dollars()
Dim RgSel As Range, Rg As Range
Set RgSel = Selection
For Each Rg In RgSel: Dollars1Cel Rg: Next Rg
End Sub
Private Sub Dollars1Cel(ByVal Rg As Range)
Dim Lig As Long, Col As Long, ZOrg As String, ZRés As String, PDéb As Long, PFin As Long, _
P As Long, C As String * 1, ZAlp As String
ZOrg = Rg.FormulaR1C1: ZRés = ZOrg
Lig = Rg.Row
Col = Rg.Column
PDéb = InStr(ZRés, "[")
While PDéb > 0
PFin = InStr(PDéb, ZRés, "]")
ZAlp = ""
P = PDéb
Do
P = P - 1
C = Mid$(ZRés, P, 1)
If C = LCase(C) Then Exit Do
ZAlp = C & ZAlp
Loop
If ZAlp = "R" Then
ZRés = Left(ZRés, PDéb - 1) & Lig + Mid$(ZRés, PDéb + 1, PFin - PDéb - 1) & Mid$(ZRés, PFin + 1)
ElseIf ZAlp = "C" Or ZAlp = "RC" Then
ZRés = Left(ZRés, PDéb - 1) & Col + Mid$(ZRés, PDéb + 1, PFin - PDéb - 1) & Mid$(ZRés, PFin + 1)
Else
PDéb = PDéb + 1
End If
PDéb = InStr(PDéb, ZRés, "[")
Wend
If ZRés <> ZOrg Then
On Error Resume Next
Application.Calculation = xlCalculationManual
If Rg.HasArray Then
Rg.CurrentArray.FormulaArray = ZRés
If Err Then MsgBox "Range(" & Rg.CurrentArray.Address(True, True) & ").FormulaArray =" _
& vbLf & """" & ZRés & """ ==> erreur " & Err.Number & " :" _
& vbLf & Err.Description, vbExclamation, "Mettre les ""$""."
Else
Rg.FormulaR1C1 = ZRés
If Err Then MsgBox "Range(" & Rg.Address(True, True) & ").FormulaR1C1 =" _
& vbLf & """" & ZRés & """ ==> erreur " & Err.Number & " :" _
& vbLf & Err.Description, vbExclamation, "Mettre les ""$""."
End If
Application.Calculation = xlCalculationAutomatic
On Error GoTo 0
End If
End Sub