Transformer en négatif toutes les valeurs d'une colonne

David590

XLDnaute Occasionnel
Bonjour à tous,

Et bien... tout est dans le titre :D

J'ai besoin de transformer en négatif toutes les valeurs d'une colonne

Je connais cette solution : Range("B2") = -Range("B2")

qui consiste à le faire pour une cellule, mais comment faire pour l'appliquer à la colonne complète ?
 

DoubleZero

XLDnaute Barbatruc
Re : Transformer en négatif toutes les valeurs d'une colonne

Bonjour, David590, le Forum,

Comme ceci ?

Code:
Option Explicit
Sub Négatif()
Dim c As Range
    For Each c In Range(Range("b2"), Range("b2").End(xlDown))
        If IsNumeric(c) And c > 0 Then c.Value = c.Value * -1
    Next
End Sub

A bientôt :)

P. S. : Bonjour, CHALET53
 

Pierrot93

XLDnaute Barbatruc
Re : Transformer en négatif toutes les valeurs d'une colonne

Bonjour à tous

une autre approche qui évite la boucle :
Code:
With Range("K1")
    .Value = "-1"
    .Copy
    Range("A1", Range("A65536").End(xlUp)).PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply
    .ClearContents
bonne soirée
@+

Edition : bonjour Kjin.. Aarf pas raffraichi moi...
 

job75

XLDnaute Barbatruc
Re : Transformer en négatif toutes les valeurs d'une colonne

Bonjour à tous,

Sans boucle et uniquement pour le fun :

Code:
Sub SigneMoins()
With Range("A1", [A65536].End(xlUp))
  ThisWorkbook.Names.Add "Table", .Value
  .Formula = "=IF(ISNUMBER(INDEX(Table,ROW())),-ABS(INDEX(Table,ROW())),IF(ISNA(INDEX(Table,ROW())),"""",INDEX(Table,ROW())))"
  .Value = .Value
End With
ThisWorkbook.Names("Table").Delete
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Transformer en négatif toutes les valeurs d'une colonne

Re,

Avec une formule matricielle :p c'est plus rapide et encore plus fun :

Code:
Sub SigneMoins()
With Range("A1", [A65536].End(xlUp))
  ThisWorkbook.Names.Add "Table", .Value
  .FormulaArray = "=IF(ISNUMBER(Table),-ABS(Table),IF(ISNA(Table),"""",Table))"
  .Value = .Value
End With
ThisWorkbook.Names("Table").Delete
End Sub
A+
 

David590

XLDnaute Occasionnel
Re : Transformer en négatif toutes les valeurs d'une colonne

Re,

Avec une formule matricielle :p c'est plus rapide et encore plus fun :

Code:
Sub SigneMoins()
With Range("A1", [A65536].End(xlUp))
  ThisWorkbook.Names.Add "Table", .Value
  .FormulaArray = "=IF(ISNUMBER(Table),-ABS(Table),IF(ISNA(Table),"""",Table))"
  .Value = .Value
End With
ThisWorkbook.Names("Table").Delete
End Sub
A+

Bonjour tout le monde,

Apparemment c'est ce code qui me conviendrait le mieux car rapide et surtout c'est le seul qui ne m'affiche pas de 0 si les cellules sont vide, le seul problème est qu'il ne fonctionne pas si le format de la colonne est en monétaire
J'ai d'ailleurs mis du temps pour savoir d'ou venait le problème puisqu'il fonctionnait sur mon classeur test mais pas sur mon classeur final)

Donc je vais faire un changement de format au début et à la fin du code, à moins que l'on puisse modifier quelque chose directement ?
 

job75

XLDnaute Barbatruc
Re : Transformer en négatif toutes les valeurs d'une colonne

Bonjour David590,

Utilisez .Value2 au lieu de .Value :

Code:
Sub SigneMoins()
With Range("A1", [A65536].End(xlUp))
  ThisWorkbook.Names.Add "Table", .Value2
  .FormulaArray = "=IF(ISNUMBER(Table),-ABS(Table),IF(ISNA(Table),"""",Table))"
  .Value = .Value
End With
ThisWorkbook.Names("Table").Delete
End Sub
A+
 

Discussions similaires

Réponses
21
Affichages
283

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16