VBA Saisie d'un nombre avec un point au lieu d'une virgule

Bonjour à tous,

Ma problématique est la suivante : sur un tableau structuré, je souhaiterai lors de la saisie dans les colonnes indiquées que les nombres s'écrivent avec un point et

deux chiffres après le point et non avec une virgule,

Je joins un fichier test, avec un début de proposition mais qui ne renvoi pas ce que je souhaite,

Merci d'avance pour votre aide,

Cordialement,

15test.xlsm (19.31 Ko)

Bonjour

De façon générale les nombres suivent les paramètres régionaux dans Excel.

Si tes paramètres utilisent la virgule, tes nombres avec des points deviennent des textes pour Excel

Bonjour 78Chris,

En fait ce n'est pas moi qui ferait la saisie, et l'utilisateur du futur fichier saisira certainement dans le TS le nombre avec la virgule (ou pas s'il tape 200 uniquement)

J'aimerai que les nombres écris se fasse avec un point au lieu d'une virgule (idem s'il saisit 200 je souhaiterai 200.00)

Merci d'avance pour votre aide,

Cordialement,

RE

Si le séparateur des paramètres régionaux (ou celui attribué par dérogation à Excel) est le point il suffit d’appliquer le bon format à la colonne du TS (même vide) pour avoir le nombre de décimales voulues.

Je le répète un séparateur non conforme à celui prévu par Excel forcera le nombre en texte...

Re 78Chris,

Le fait qu'Excel transforme la saisie du nombre en format texte ne me dérange pas, l'essentiel est que lors de la saisie, la virgule n'apparaisse pas et soit remplacer

par un point,

Merci d'avance,

Cordialement,

Bonjour massari59264 , 78chris ,

Tout ce que dit 78chris est plus que pertinent. Vous perdez :

  • le type du contenu (transformé en texte)
  • vous perdez de la précision -> Nombres arrondis à deux décimales
  • Vous pouvez aussi perdre des possibilité de calcul avec ces cellules modifiées

J'ai un peu de mal à comprendre le pourquoi de la chose. La finalité initiale des tableurs est la manipulation des nombres et pas celle des représentations exotiques de nombres (selon moi).

Sinon essayez :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range, x
   If Not Intersect(Target, Me.ListObjects("TEST").DataBodyRange) Is Nothing Then
      Application.EnableEvents = False
      For Each Cell In Target: Cell.NumberFormat = "@": Cell = Replace(Format(Cell.Value, "0.00"), ",", "."): Next Cell
      Application.EnableEvents = True
   End If
End Sub

Bonjour @mafraise,

Merci pour votre retour, le code fonctionne comme je le souhaite ,

mais par contre pouvez vous y ajouter ces conditions svp suite à mes tests ? :

- le déclenchement se fait uniquement pour les colonnes 3, 4 et 5 du TS (en utilisant leur position si possible plutôt que leur nom)

- l'utilisateur ne peut pas mettre deux virgules dans sa saisie (en fait il ne peut n'y avoir qu'un seul point)

- la procédure se déroule uniquement lors d'une saisie dans les colonnes 3,4 et 5 et non lors de l'actualisation de la requête associée,

Je rejoins le fichier test pour plus de compréhension,

Je prends bien en compte vos remarques quand aux limites qui s'imposent suite à cette demande,

Cordialement,

8test.xlsm (22.18 Ko)

Bonjour,
Quel serait le séparateur pour les milliers ?
Une virgule, un espace ?
Cdlt.

Bonjour Jean Eric, à tous,

Le séparateur de millier serait un espace,

Je reposte le fichier pour être plus clair dans ma démarche, qui parait farfelue.

En effet forcer Excel à mettre des points au lieu des virgules lors de la saisie de nombre (via VBA) puis passer par PQ pour faire l'inverse, mais c'est un

contournement qui pourrait me permettre de déterminer avec PQ qu'elles sont les cellules qui on été modifiées (et donc avec un point) et lancer un nouveau

traitement via PQ,

Cordialement,

7test.xlsm (23.69 Ko)

Bonjour à tous,

J'ai avancé de mon coté, et j'y suis presque mais je bloque sur deux points dans le code VBA,

Je vous joins le fichier actualisé,

Merci d'avance pour votre aide,

Cordialement,

9test.xlsm (28.21 Ko)

Bonjour massari59264

Il faudrait commencer à comprendre ce qu'est une variable objet

Pour répondre à

'NB : @Cousinhub avait utilisé le code sur la feuille Code VBA pour y parvenir sur une autre problématique mais j'ai une alerte sur la ligne : If Not Tgt Is Nothing Then

Si dans l'évènement SelectionChange vous laissez Target, alors il faut l'utiliser dans la sub
Sinon, comme ici vous pouvez le remplacer par "Tgt"

Private Sub Worksheet_SelectionChange(ByVal Tgt As Range)
  If Tgt.Address = Range("TEST[#All]").Address Then
    If Not Tgt Is Nothing Then
      Tgt.Select
    Else
      Range("TEST[E]")(1).Select
    End If
  End If
  Flag = False
End Sub

Bonjour JExceL2fr,

Merci pour votre retour, j'ai fais les modifications nécessaires suite à vos remarques,

Il ne me reste plus que le cas ou une saisie est faite de deux virgules à la place d'une ,

Cordialement,

6test.xlsm (26.26 Ko)

Bonjour à tous,

J'ai ajouté une petite condition à mon code vba, pourrais je avoir un avis sur l'écriture de celui ci, et une aide relative à la condition de saisie de deux virgules?,

Merci d'avance,

Cordialement,

9test.xlsm (27.17 Ko)

Bonjour,

Petite précision (lorsque je vois mon pseudo....)

Lorsque tu reprends un code, reprends-le dans son intégralité...

Le code que j'avais fourni (dans son contexte) :

Dim KeyCells As Range, Tgt As Range
Dim Flag As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Flag Then Exit Sub
Set KeyCells = Union(Me.Range("t_Exemple[Exemple 1]"), Me.Range("t_Exemple[Exemple 2]"))
If Not Intersect(Target, KeyCells) Is Nothing Then
    Set Tgt = Target.Offset(1)
    Flag = True
    Me.Range("t_Exemple").ListObject.QueryTable.Refresh BackgroundQuery:=False
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("t_Exemple[#All]").Address Then
    If Not Tgt Is Nothing Then
        Tgt.Select
    Else
        Range("t_Exemple[Exemple 2]")(1).Select
    End If
End If
Flag = False
End Sub

Je passe un peu moins pour un peintre....

(Tgt étant une variable "Range", bien définie)

Bonjour cousinhub ,

Bonjour, [...] Je passe un peu moins pour un peintre [...]

[humour] Juste pour te saluer, tu le fais si bien :

5618e437

Bonne après-midi [/humour]

Bonjour à tous,

Désolé Cousinhub, j'avais mal retranscris ta proposition ... d'ailleurs sur un des fichiers postés ton code apparaît dans son intégralité...

Démontrant au passage que c'est moi le peintre !

Cordialement,

Bonjour à tous,

Au vu des retours nombreux et constructifs je clos le sujet,

Merci à @Mafraise pour sa solution partielle,

Cordialement,

Rechercher des sujets similaires à "vba saisie nombre point lieu virgule"