VBA remplacer nombre par son opposé

Bonsoir le forum

Dans un fichier fourni par un logiciel de paie, j'obtiens des chiffres "négatifs" ayant la particularité d'avoir le signe "-" en dernière position, donc non utilisable directement dans Excel.

Par ex : 57.44-

J'ai donc construit une petite macro pour y remédier, mais celle-ci me renvoie 'Erreur d'exécution S : Argument ou appel de procédure incorrect"

Sub livrepaie()

With Sheets("08.17 HR")

For lig = 21 To 1000

If Right(Cells(lig, 12), 1) = "-" Then Cells(lig, 12).Value = Left(Cells(lig, 12), (Len((Cells(lig, 12)) - 1) * -1))

Next lig

End With

End Sub


Désolé, ma demande est partie sans que je puisse finir ma phrase...

Je me permets de joindre un bout du fichier en question.

Si quelqu'un peut m'aider à résoudre cette anomalie ?

Merci d'avance

MichaelH

Bonsoir,

essayez ceci :

If Right(Cells(lig, 12), 1) = "-" Then Cells(lig, 12).Value = CDbl(Left(Cells(lig, 12), Len(Cells(lig, 12)) - 1)) * (-1)

CDBL permet de transformer la variable Texte issue du Left en nombre et on le multiplie par -1 pour le rendre négatif

@ bientôt

LouReeD

Bonjour

Il y des confusions dans ta formule... tente ça :

If Right(Cells(lig, 12), 1) = "-" Then Cells(lig, 12).Value = 0 - Left(Cells(lig, 12), Len(Cells(lig, 12)) - 1)

@LouReed... doublé j'étais en train de répondre en même temps que toi, donc autre proposition

Bravo et grand merci LouReed

Et merci à NCC 1701 aussi !

Merci de vos merci !

NCC 1701, vous serez plus rapide sur le prochain post !

@ bientôt

LouReeD

Bonsoir, Bonsoir à tous !

Sub livrepaie()
    Dim v#, n%, i%
    With Sheets("08.17 HR")
        n = .Range("L" & .Rows.Count).End(xlUp).Row
        Application.ScreenUpdating = False
        For i = 9 To n
            If Right(.Cells(i, 12), 1) = "-" Then
                v = Val(Replace(.Cells(i, 12), ",", "."))
                .Cells(i, 12) = -v
            End If
        Next i
    End With
End Sub

Cordialement.

(re)

@LouReed

nous verrons

@MICHAELH

Merci à toi pour les tiens

@MFerrand

Bonjour

J'espère que tu en as terminé avec les aléas de ces derniers jours

@MFerrand

Bonjour

J'espère que tu en as terminé avec les aléas de ces derniers jours

J'en ai encore quelques uns en réserve ! Je vois ça les prochains jours.

Merci à toi.

Bonsoir,

si je comprend bien, à vous deux Maréchal et NCC 1701 on a de quoi faire de jolie "Sub" !

@ bientôt

LouReeD

Bonjour le forum,

la formule qui m'a été fournie récemment sur le forum marche parfaitement :

If Right(Cells(lig, 12), 1) = "-" Then Cells(lig, 12).Value = CDbl(Left(Cells(lig, 12), Len(Cells(lig, 12)) - 1)) * (-1)

mais j'essaye de l'étendre également aux colonnes avec une variable, avec le code suivant, mais ça ne fonctionne pas :

Sub livrepaie()

With Sheets("MOIS")

For lig = 21 To 1000

For col = 1 To 25

If Right(Cells(lig, col, 1) = "-" Then Cells(lig, col).Value = CDbl(Left(Cells(lig, col), Len(Cells(lig, col)) - 1)) * (-1)

Next lig

Next col

End With

End Sub

Si quelqu'un peut m'aider à résoudre ce problème de syntaxe ?

Je joins un extrait du fichier en question

merci d'avance !

MichaelH

17extrait.xlsx (24.95 Ko)

bonjour,

proposition de correction

Sub livrepaie()
    With Sheets("MOIS")
        For lig = 21 To 1000
            For col = 1 To 25
                If Right(Cells(lig, col), 1) = "-" Then Cells(lig, col).Value = CDbl(Left(Cells(lig, col), Len(Cells(lig, col)) - 1)) * (-1)
            Next col
        Next lig
    End With
End Sub

Mais oui, mais c'est bien sûr !

Merci bcp à toi

MichaelH

Rechercher des sujets similaires à "vba remplacer nombre oppose"