XL 2013 VBA - convertisseur automatique

Sooophie

XLDnaute Nouveau
Bonjour,

Je cherche à convertir automatiquement les valeurs rentrées dans un tableau :


A B C D​
1 10 mm in
2 20 mm in
3 ...

J'ai rentré dans Sheet1 le code suivant, j'ai fait plusieurs test et je sais que mon private sub marche, mais quand j'appelle la macro4 rien en se passe :

Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Count > 1 Then Exit Sub

If Not Intersect(Target, Range("A1:A3")) Is Nothing Then

Call Macro4

MsgBox "Les cellules sont converties en impériales."

End If
End Sub


Private Sub Macro4()

''Je ne sais pas comment appeler ma cellule modifiée dans cette Macro, au départ j'avais mis Active.Row, mais ça ne modifie rien en revanche le code est réalisé jusqu'au bout. En mettant Target.Row, j'ai un bogage du code''

ro = Target.Row: co = Target.Column
b = Val(Cells(ro, co))
b = b / 25.4
Cells(ro, co + 2) = b

End Sub
 

JCGL

XLDnaute Barbatruc
Bonjour à tous,

Bienvenue sur XLD

Peux-tu essayer :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A1:A3")) Is Nothing Then
        ro = Target.Row: co = Target.Column
        b = Val(Cells(ro, co))
        b = b / 25.4
        Cells(ro, co + 2) = b
        MsgBox "Les cellules sont converties en impériales."
    End If
End Sub

A+ à tous
 

Paf

XLDnaute Barbatruc
Bonjour Sooophie, JCGL,


Mais pourquoi mettre la macro à part ça fonctionne pas ?

Parce que la macro ne sait pas sur quelle cellule agir.

Une solution parait de préciser la cellule à l'appel de la macro

dans Private Sub Worksheet_Change(ByVal Target As Range):
Code:
Call Macro4(Target)
' ou directement : Macro4 Target

et modifier Macro4 comme , par exemple:
Code:
Sub Macro4(Cible As Range)

Cible.Offset(, 2) = Cible.Value / 25.4

End Sub

A+
 

Discussions similaires