Changement le signes des cellules - VBA

Bonjour,

J'aimerais créer une macro vba qui permet d'échanger le signe d'une sélection de cellules (du plus au moins ou inversement). J'aimerais que ma formule détecte si la cellule contient une formule ou une valeur. Toutefois, je n'arrive pas à faire marcher la macro pour la formule, quand j'active la macro, les cellules contenant des formules ne changent pas de signe.

Quelqu'un aurait une idée de l'erreur du script suivant ?

Dim rng As Range

Dim cell As Range

Dim x As String

If Application.Selection.Cells.Count >= 1 Then

Set rng = Selection

Else: Exit Sub

End If

For Each cell In rng.Cells

If cell.HasFormula = True Then

x = cell.Formula

x = "=-(" & Right(x, Len(x) - 1) & ")"

Else

If cell.Value <> 0 Then cell.Value = -cell.Value

End If

Next cell

End Sub

Merci d'avance pour votre aide !

Salut WonderX

Pour la formule, il te manque juste

cell.Value = x

Bonjour,

cell.Formula plutôt non ?

eric

PS : mais tu ne la lances qu'une seule fois ta macro ?

Parce que là tu vas empiler les

-(-(-(-(-(formule)))))

à n'en plus finir

Eriic,

"Cell.Value" fonctionne aussi

Bonjour Eric et Bruno,

Merci pour votre aide, cela fonctionne très bien !

En effet, cela empile les *(-1), je n'ai pas trouvé mieux pour le moment. Avec les valeurs, il suffit de faire "-cell.value" donc c'est beaucoup plus simple qu'avec les formules.

Si vous avez une idée, je suis preneuse...

Salut WonderX

Si j'ai bien compris, voici un code qui ne te posera pas le souci

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim Rng As Range, Cel As Range
  Dim sForm As String

  If Application.Selection.Cells.Count >= 1 Then
    Set Rng = Selection
  Else: Exit Sub
  End If

  For Each Cel In Rng.Cells
    If Cel.HasFormula = True Then
      sForm = Cel.Formula
      If Mid(sForm, 2, 1) = "-" Then
        sForm = "=" & Mid(sForm, 4)
        sForm = Left(sForm, Len(sForm) - 1)
      Else
        sForm = "=-(" & Right(sForm, Len(sForm) - 1) & ")"
      End If
      Cel.Value = sForm
    Else
      If Cel.Value <> 0 Then Cel.Value = -Cel.Value
    End If
  Next Cel

End Sub

@+

Bonjour,

Cela fonctionne parfaitement ! Merci beaucoup, grâce à vous je découvre la fonction mid que je ne connaissais pas sur vba

Rechercher des sujets similaires à "changement signes vba"