Microsoft 365 Code pour conversion automatique km/mi en fonction du choix de l'unité

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

loulou14

XLDnaute Nouveau
Bonjour (et bonne année à tous)

Je souhaite convertir les données d'un tableau automatiquement en fonction de l'unité choisies (colonne B) pour chaque ligne du tableau
Si je choisis km, alors toutes les cellules "distances" sont converties en kilomètres
Si je choisis mi, alors toutes les cellules "distances" sont converties en miles

Je joins un fichier exemple

Merci d'avance pour votre support
 

Pièces jointes

Bonjour,
@loulou14 , sur votre navigateur en recherchant par exemple "formule excel conversion km mile"
vous aurez facilement la formule "magique" suivante qui fonctionne dans les 2 sens évidemment 😉
VB:
=CONVERT(B5; "km"; "mi")
[EDIT à 17h30]
Les distances sont-elles saisies manuellement ou le tableau est-il importé (copier-coller ou autre) ?
Sinon, un peu l'histoire de la poule ou l’œuf, les distances saisies (ou importées) devront être dans l'unité de la colonne B (unité) sinon le calcul sera systématiquement à l'envers.
Dans la solution proposée par @vgendron, puisque la fonction de conversion existe, pourqouoi ne pas l'utiliser (voir le code ci-dessous)

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, ActiveSheet.ListObjects(1).ListColumns(2).Range) Is Nothing Then Exit Sub

Application.EnableEvents = False
    With ActiveSheet.ListObjects(1)
        Unité = Target
        Select Case Unité
            Case "mi"
                '''coef = 1 / 1.60934
                coeff = Application.WorksheetFunction.Convert(1, "km", "mi")
            Case "km"
                '''coef = 1.60934
                coeff = Application.WorksheetFunction.Convert(1, "mi", "km")
            Case Else
                coef = 1
        End Select
        i = Target.Row - .Range.Row
        'MsgBox i
        For j = 3 To .ListColumns.Count
            If .HeaderRowRange(j) Like "Distance*" Then
                .DataBodyRange(i, j) = .DataBodyRange(i, j) * coef
            End If
        Next j
    End With
    
Application.EnableEvents = True
End Sub
 
Dernière édition:
Notre forum d’entraide est 100 % gratuit et le restera.
Aucune formation payante, aucun fichier à acheter, rien à vendre. Mais comme tout site, nous devons couvrir nos frais pour continuer à vous accompagner.
Soutenez-nous en souscrivant à un compte membre : c’est rapide, vous choisissez simplement votre niveau de soutien et le tour est joué.

Je soutiens la communauté et j’accède à mon compte membre

Discussions similaires

Retour