XL 2016 VBA : mettre 0 en fin de nombre

Yücel

XLDnaute Junior
Bonsoir,

Je souhaiterai que les chiffres de la colonne E soit au format "000 000" mais avec les zéro en fin de nombre et non en début.

Exemple :
615 = 615 000
4456 = 445 600
61 = 610 000

Merci d'avance !

Yücel.
 
Solution
@Yücel

je propose le fichier Excel ci-dessous.
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 5 Then Exit Sub
    If IsEmpty(.Value) Then Exit Sub
    If Not IsNumeric(.Value) Then Exit Sub
    Application.EnableEvents = 0
    .NumberFormat = "#,##0"
    .HorizontalAlignment = 4: .IndentLevel = 1
    .Value = Val(Left$(.Value & "00000", 6))
    Application.EnableEvents = -1
  End With
End Sub
a) regarde aussi ce qu'il se passe quand tu effaces un nombre avec
la touche Suppression. ;)

b) les valeurs texte sont ignorées, et ne font pas planter la sub...

soan

XLDnaute Barbatruc
Inactif
Bonsoir Yücel, mapomme,

a) formule en F1, à tirer vers le bas : =CNUM(GAUCHE(E1 & "00000";6))

b) format de cellule, 1er onglet Nombre :

* choisir Nombre
* Nombre de décimales : 0
* cocher : Utiliser le séparateur de milliers ( )


en E1 : 615 ➯ en F1 : 615 000
en E2 : 4456 ➯ en F2 : 445 600
en E3 : 61 ➯ en F3 : 610 000

vrais nombres, grâce à CNUM(), donc : alignés à droite

@mapomme : tu as raison : pas un format ; mais faut ruser ! ;)


soan
 
Dernière édition:

Yücel

XLDnaute Junior
Bonsoir Mapomme, Soan,

C'est un petit fichier de comptabilité que j'essaye de mettre en place.

Soan, peut-on avoir ce même résultat mais avec du VBA qui modifiera autom??
Car lorsque je vais taper le compte 615 il faut que la cellule se transforme en 615 000 afin d'éviter des erreurs dans mon tableau.

En vous remerciant !
 

Yücel

XLDnaute Junior
Bonsoir Mapomme, Soan,

C'est un petit fichier de comptabilité que j'essaye de mettre en place.

Soan, peut-on avoir ce même résultat mais avec du VBA qui modifiera automatiquement la colonne E ??
Car lorsque je vais taper le compte 615 il faut que la cellule se transforme en 615 000 afin d'éviter des erreurs dans mon tableau.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re à tous,

Voir le fichier joint. Tapez un entier dans la colonne E.
Le code est dans le module de la feuille "Feuil1".
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   Application.EnableEvents = False
   If Target.Column = 5 And Target.Count = 1 Then Target = Val(Left(Target & "000000", 6))
   Application.EnableEvents = True
End Sub

edit : corrigé après la remarque de soan.
 

Pièces jointes

  • Yücel - 6 chiffres- v1.xlsm
    14.3 KB · Affichages: 10
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Une version qui accepte les valeurs texte, les nombres avec virgules et les entiers (positifs ou négatifs); seuls ces derniers seront modifiés.

Le code :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Column = 5 And Target.Count = 1 Then
      If Target = "" Then Exit Sub
      If IsNumeric(Target) Then
         If Int(Abs(Target)) = Abs(Target) Then
            Application.EnableEvents = False
            Target = Sgn(Target) * Val(Left(Abs(Target) & "000000", 6))
            Application.EnableEvents = True
         End If
      End If
   End If
End Sub
 

Pièces jointes

  • Yücel - 6 chiffres- v2.xlsm
    15.5 KB · Affichages: 4
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@Yücel

je propose le fichier Excel ci-dessous.
VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 5 Then Exit Sub
    If IsEmpty(.Value) Then Exit Sub
    If Not IsNumeric(.Value) Then Exit Sub
    Application.EnableEvents = 0
    .NumberFormat = "#,##0"
    .HorizontalAlignment = 4: .IndentLevel = 1
    .Value = Val(Left$(.Value & "00000", 6))
    Application.EnableEvents = -1
  End With
End Sub
a) regarde aussi ce qu'il se passe quand tu effaces un nombre avec
la touche Suppression. ;)

b) les valeurs texte sont ignorées, et ne font pas planter la sub

----------------------------------------------------------------------------------------

c) format de nombre avec 0 décimales et séparateur de milliers :
mis automatiquement

c'est ce qui te permet d'avoir « 615 000 » au lieu de « 615000 »,
donc les nombres sont plus lisibles ; ce qui est particulièrement
important en comptabilité, pour pouvoir lire plus facilement
des colonnes entières de chiffres !

d) alignement à droite et retrait de 1 : mis automatiquement

le retrait de 1 est utile pour éviter que le nombre saisi soit collé tout contre
le bord droit de la cellule (qu'il y aie une bordure droite ou non) ➯ c'est plus aéré,
et donc plus lisible.

----------------------------------------------------------------------------------------

cependant, c) et d) sont inutiles si tu les fait manuellement (au préalable) pour
toute la colonne E ; ou au moins pour la plage des nombres tu fais la saisie ;
par exemple : pour E5:E200 ; si c'est dans un tableau structuré, alors les lignes
ajoutées auront le même format et alignement que ceux de la ligne précédente
➯ le format et l'alignement pour la cellule E de la ligne qui a été ajouté seront
ok, de façon automatique. :)

mettre le format de nombre et l'alignement par VBA est utile uniquement
si la plage de saisie des nombres n'a pas été faite correctement dès le
départ, mais bien sûr, sans ton fichier, je ne peux pas le savoir ! :rolleyes:

----------------------------------------------------------------------------------------

je n'ai rien fait pour des nombres négatifs car dans ton post #4, tu as noté :
« C'est un petit fichier de comptabilité » ; or en compta, dans une colonne
Débit ou une colonne Crédit, on saisit uniquement des nombres positifs.

----------------------------------------------------------------------------------------

si tu as besoin d'une adaptation pour ton vrai fichier, n'hésite pas
à me la demander ; à te lire pour avoir ton avis.


soan
 

Pièces jointes

  • Exo Yücel.xlsm
    13.9 KB · Affichages: 2
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@Yücel

Lis d'abord mon post #13 précédent.

pour le fun, j'ajoute quand même cette autre version,
pour la saisie de nombres entiers positifs et négatifs.

VB:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 5 Then Exit Sub
    If IsEmpty(.Value) Then Exit Sub
    If Not IsNumeric(.Value) Then Exit Sub
    Application.EnableEvents = 0
    .NumberFormat = "#,##0"
    .HorizontalAlignment = 4: .IndentLevel = 1
    .Value = Val(Left$(.Value & "00000", 7 + (Sgn(.Value) = 1)))
    Application.EnableEvents = -1
  End With
End Sub
mais ne pas s'en servir pour une colonne unique de conversion euros/francs,
puisque là, la conversion est faite par une formule ➯ c'est pas une saisie !


pour la saisie de nombres avec virgule, voir le post #11 de @mapomme.


soan
 

Pièces jointes

  • Exo Yücel.xlsm
    14 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
312 273
Messages
2 086 699
Membres
103 372
dernier inscrit
BibiCh