Le remplacement du point par virgule sous Worksheet_Change

Salut la communauté,

J'ai pu voir plusieurs post sur le sujet, mais je n'arrive pas à régler mon problème sous VBA.

J'ai des utilisateurs qui doivent remplir des cellules (D7,D9,B14) avec le clavier numérique pour un format de type :

0,00 (avec une virgule)

J'ai sollutionné pour certains le problème du séparateur décimal via :

Private Sub Workbook_Open() 
With Application 
.DecimalSeparator = "," 
.ThousandsSeparator = " " 
.UseSystemSeparators = False 
End With 
end sub

Mais j'ai encore des utilisateurs qui remplissent ces cellules avec le "." du clavier (ils utilisent le shift ou caps lock)

Je cherche donc pour ma feuille sous Worksheet_Change(ByVal Target As Range) à transformer automatiquement le "." en "," après saisie.

A la sélection de certaines cellules à remplir il y a un Msgbox pour aide à la saisie.

la saisie du "." provoque par calcul sur d'autres cellules un : #Valeur!

Comment faire pour l'executer à chaque sélection pour vérification ?

Un peu imbriqué comme ceci :

If Target.Cells.Address = "$D$7" Then
Selection.Replace What:=".", Replacement:=".", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End If

Sinon tout bête j'ai pensé à çà :

If Range("C12").Value = "#Valeur!" Then
MsgBox ("Une donnée est incorrect, veuillez utiliser le séparateur numérique de votre clavier"), vbExclamation
End If

Mais çà ne marche pas. Il ne reconnait pas "#Valeur!"

Merci de votre appui.

Bonjour

A tester

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Range("D7,D9,B14"), Target) Is Nothing Then
    Application.EnableEvents = False
    Target.Replace What:=".", Replacement:=".", LookAt:=xlPart, _
              SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
              ReplaceFormat:=False
    Application.EnableEvents = True
  End If
End Sub

Ce code fonctionne :

If Not Intersect(Range("B14,D7,D9,D15"), Target) Is Nothing Then
        If Target <> "" Then
            Target.Replace ".", ","
            Valeur = Target.Value
            End If
    End If

mais il efface mes symboles "euros"

et pour des données avec un taux

le 1.77% se transforme en 1700,00%

Bonjour,

Tu pourrais peut-être préciser quelles cellules sont formatées en Euros et en %.

Cdlt

Banzai64 a écrit :

Bonjour

A tester

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Range("D7,D9,B14"), Target) Is Nothing Then
    Application.EnableEvents = False
    Target.Replace What:=".", Replacement:=".", LookAt:=xlPart, _
              SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
              ReplaceFormat:=False
    Application.EnableEvents = True
  End If
End Sub

problème résolu

Merci à toi et Jean Eric d'avoir répondu

Rechercher des sujets similaires à "remplacement point virgule worksheet change"