Récupération sur 2 variables, les unités et les décimales

Leskwal

XLDnaute Occasionnel
Bonsoir le forum

Voila ma question.

En VBA :

Je crée 2 variables.

AVANT_VIRGULE et APRES_VIRGULE

De la cellule A1 à B10 sur feuil1

si un chiffre est entré en A1 comme :

6.29374 alors : après analyse :

AVANT_VIRGULE = 6 et

APRES_VIRGULE = 29 (et non 29374 ) je ne prends en considération que les centièmes...

Bien sûr

les 2 variables sont remises à 0 lorsqu'une autre cellule est activée.

Donc si j'entre en B8 la valeur :

10,56814

alors :

AVANT_VIRGULE = 10 et

APRES_VIRGULE = 56

J'espère avoir été clair...:)

Merci pour vos réponses

Cordialement

Pascal
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Récupération sur 2 variables, les unités et les décimales

Bonjour Leskwal,

Une version v2

Les deux variables ont été déclarées de type long dans Module1. Si le nombre est négatif, alors les variables sont négatives et/ou nulles.

La reconstitution du nombre de départ (arrondi au centième) peut s'écrire:
VB:
AVANT_VIRGULE + APRES_VIRGULE / 100#

Pour le test, on affiche les deux variables et la reconstitution du nombre. On peut supprimer la ligne correspondante contenant MsgBox. On a utilisé l'évènement SelectionChange pour le test.

Le code dans le module de code de Feuil1:
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim plage As Range, x, s
  AVANT_VIRGULE = 0: APRES_VIRGULE = 0
  Set plage = Intersect(Target, Range("a1:b10"))
  If Not plage Is Nothing Then
    If IsNumeric(plage(1, 1).Value) Then
      x = Abs(plage(1, 1).Value): s = Sgn(plage(1, 1).Value)
      AVANT_VIRGULE = s * Int(x): APRES_VIRGULE = s * (Int(100 * x) Mod 100)
    End If
  End If
  MsgBox AVANT_VIRGULE & " , " & APRES_VIRGULE & _
      " , reconstitution : " & AVANT_VIRGULE + APRES_VIRGULE / 100#
End Sub

Edit: bonjour job75 :)
 

Pièces jointes

  • Leskwal-decoupage valeur v2.xls
    34 KB · Affichages: 17
Dernière édition:

job75

XLDnaute Barbatruc
Re : Récupération sur 2 variables, les unités et les décimales

Bonjour Leskwal, mapomme,

Une solution qui fonctionne quel que soit le séparateur décimal de l'ordi :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s, AVANT_VIRGULE, APRES_VIRGULE
If IsNumeric(CStr(Target(1))) Then
  s = Split(Target(1), Mid(1 / 10, 2, 1))
  AVANT_VIRGULE = s(0)
  If UBound(s) > 0 Then APRES_VIRGULE = Left(s(1) & 0, 2)
End If
MsgBox AVANT_VIRGULE & vbLf & APRES_VIRGULE 'pour tester
End Sub
Noter que AVANT_VIRGULE et APRES_VIRGULE sont déclarées Variant, donc sont initialisées Empty au départ.

Edit : ajouté le test IsNumeric.

A+
 
Dernière édition:

Leskwal

XLDnaute Occasionnel
Re : Récupération sur 2 variables, les unités et les décimales

Merci à vous 2.

Les 2 soluces fonctionnent parfaitement

Juste : pour le code de Mapomme je l'ai mis en : Worksheet_Change et non en Worksheet_SelectionChange.

Encore un GRAND Merci, j'vais adapter ces 2 codes à mes besoins. :)

Très Cordialement

Pascal
 

job75

XLDnaute Barbatruc
Re : Récupération sur 2 variables, les unités et les décimales

Re,

Si l'on veut juste tronquer les décimales :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x
If IsNumeric(CStr(Target(1))) Then
  x = Format(Target(1), "0.000")
  x = Left(x, Len(x) - 1)
End If
MsgBox x 'pour tester
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : Récupération sur 2 variables, les unités et les décimales

Re,

Pour finir, une autre solution pour tronquer :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x
If IsNumeric(CStr(Target(1))) Then x = Application.RoundDown(Target(1), 2)
MsgBox x 'pour tester
End Sub
A+
 

Leskwal

XLDnaute Occasionnel
Re : Récupération sur 2 variables, les unités et les décimales

Re

En fichier joint un mixe de vos propositions.

Je rencontre quand même un petit problème sur la zone de traitement.

Quand je tape des données dans le tableau, elles sont traitées. En revanche quand c'est hors tableau, les valeurs sont détruites.

Comment définir cette zone où seul le traitement aura lieu ? :rolleyes:


Encore Merci

Pascal
 

Pièces jointes

  • TTT_VALEURS_CEL_EX_02_XLD.xlsm
    17.6 KB · Affichages: 22

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Récupération sur 2 variables, les unités et les décimales

Bonjour Leskwal,

[...] Je rencontre quand même un petit problème sur la zone de traitement.

Quand je tape des données dans le tableau, elles sont traitées. En revanche quand c'est hors tableau, les valeurs sont détruites.

Comment définir cette zone où seul le traitement aura lieu ? [...]

Je pense que le endif de la condition "If Not Application.Intersect(Target, Range("ZONE_de_SAISI")) Is Nothing"est mal placé. A vue de nez (pas creusé), je le placerai juste avant l'instruction "Application.EnableEvents = True". A tester.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 307
Messages
2 087 097
Membres
103 468
dernier inscrit
TRINITY