dimanche 2 septembre 2012

Convertir des € en K€

Bon, convertir des € en K€, ce n’est pas difficile du tout, il suffit de diviser par mille.
Soit.

Oui mais : si on a une grande plage de valeurs à convertir ?
Bon, pas trop difficile : on saisit la valeur 1000 dans une cellule vide à quelque part, on copie cette cellule, on sélectionne toute la plage de données, on fait Edition / Collage spécial / Valeurs + Multiplication, et voilà. Ca marche pour une colonne entière ou même pour plusieurs colonnes contiguës.

Oui mais : si on a plusieurs plages non-contiguës ?
Bon, c’est un peu fastidieux mais c’est gérable : on fait la même chose plusieurs fois !

Oui mais : si on doit faire cette manip à intervalles réguliers ?
Là ça devient pénible.


La macro ci-dessous fait ce travail.


En la plaçant dans un classeur de macros personnelles et en lui attribuant un raccourci clavier, on exécute en une fraction de seconde ces divisions par mille, sur de grandes plages de données et même simultanément sur plusieurs plages.

Sub DiviserParMille()
 Dim c As Range
 For Each c In Selection
  If Not IsEmpty(c) And IsNumeric(c) And Not c.HasFormula Then
     c.Value = c.Value / 1000
  End If
 Next
End Sub


Que dit-on dans cette macro ?

1. On parcourt une par une les cellules sélectionnées :
 For Each c In Selection
 (ce qui, d'ailleurs, fonctionne aussi si la sélection est faite de plusieurs plages de cellules.)

2. pour chaque cellule, on teste trois choses :
  - si la cellule n’est pas vide : Not IsEmpty(c)
     (si elle est vide, ce n’est pas pertinent d’y faire quoi que ce soit ;
     du reste, faire un calcul sur une valeur inexistante provoquerait une erreur !)
  - si la cellule contient bien une valeur numérique : IsNumeric(c)
     (si la valeur n’est pas numérique, vouloir faire une division dessus provoque une erreur)
  - si la cellule ne contient pas de formule : Not c.HasFormula
     (la division ne peut se faire que sur une valeur ;
     sinon, c’est la formule qu’il s’agit de modifier pour qu’elle effectue elle-même la division !)

3. si ces trois conditions sont vérifiées, alors on remplace la valeur de la cellule par cette valeur divisée par 1000 :
     c.Value = c.Value / 1000

Et voilà !

Aucun commentaire:

Enregistrer un commentaire