EXCEL VBA - Transformation nombre en code
Résolu
laptitepero
Messages postés
19
Statut
Membre
-
laptitepero Messages postés 19 Statut Membre -
laptitepero Messages postés 19 Statut Membre -
Bonjour à tous,
Voici la question que je me pose :
J'ai une cellule 1 avec un montant à virgule ex : 45,23
Il faut que je transforme cette cellule 1 dans une autre cellule 2 en code à 16 chiffres :
0000000000004523
En fait, j'ai besoin d'une macro qui va me permettre que quelque soit le montant enregistré dans la cellule 1, celui ci est transformé sans virgule en code à 16 chiffres complété par des 0 devant.
Merci d'avance,
Péro
Voici la question que je me pose :
J'ai une cellule 1 avec un montant à virgule ex : 45,23
Il faut que je transforme cette cellule 1 dans une autre cellule 2 en code à 16 chiffres :
0000000000004523
En fait, j'ai besoin d'une macro qui va me permettre que quelque soit le montant enregistré dans la cellule 1, celui ci est transformé sans virgule en code à 16 chiffres complété par des 0 devant.
Merci d'avance,
Péro
4 réponses
-
Bonjour,
Voilà une fonction qui permet de faire ça:
Function ConvertirChaine(ByVal chaine As Variant) As String chaine = Replace(chaine, ",", "") While Len(chaine) < 16 chaine = "0" & chaine Wend ConvertirChaine= chaine End Function
chaine est le contenu de la cellule.
Si tu as "45,23" dans la cellule B1 et que tu veuilles avoir "0000000000004523" dans la cellule D2:
Range("D2").Value = ConvertirChaine(Range("B1").value)
Tu peux également l'utiliser par les fonctions personnalisées.
;o)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau -
Bonjour,
2 méthodes :
Par macro : avec le code suivant :
Ce code permet de remplacer les chiffres directement dans la cellule active. Donc sélectionner d'abord la cellule contenant 45,23 par exemple. Ne fonctionne que si le séparateur est la virgule.Sub transforme_en_16_chiffres() Dim longueur As String Dim i As Integer longueur = "0000000000000000" i = Len(Replace(ActiveCell, ",", "")) ActiveCell.NumberFormat = "@" ActiveCell = Left(longueur, 16 - i) & Replace(ActiveCell, ",", "") End Sub
Par formule :
Soit en A1, le nombre que vous souhaitez modifier, en B1 inscrire :
=GAUCHE("0000000000000000";16-NBCAR(A1*10^(NBCAR(A1)-TROUVE(",";A1))))&A1*10^(NBCAR(A1)-TROUVE(",";A1))-
-
Si tu aimes ma méthode par formule, je te réponds deux choses :
1- perso je préfères la macro de Polux
2- Flatté, mais la solution que je te propose alors est une usine à gaz. Efficace mais...
La nouvelle formule, teste si :
- il n'y a pas de virgule (ex renvoie 0000000000000036 si est écrit 36)
- il n'y a qu'un chiffre après la virgule (ex renvoie 0000000000003640 si est écrit 36,40)
la voici (attention les yeux, roulement de tambour...) :
=SI(ESTERREUR(TROUVE(",";A1));GAUCHE("0000000000000000";16-NBCAR(A1))&A1;SI(NBCAR(A1)-TROUVE(",";A1)<2;GAUCHE("0000000000000000";15-NBCAR(A1*10^(NBCAR(A1)-TROUVE(",";A1))))&A1*10^(NBCAR(A1)-TROUVE(",";A1))&0;GAUCHE("0000000000000000";16-NBCAR(A1*10^(NBCAR(A1)-TROUVE(",";A1))))&A1*10^(NBCAR(A1)-TROUVE(",";A1))))
Ce genre de formule alourdit énormément les classeurs excel il me semble, d'où mon intérêt pour les macros...
-
-
Arf, tout fonctionne bien avec ton usine à gaz, sauf que quand je rentre 23,00, ca me marque 0000000000000023 alors qu'il me faudrait 0000000000002300, une solution ? :-)
-
Salut,
Arfffffff! Utilise la macro de Polux....
Sinon :
=SI(ESTERREUR(TROUVE(",";A1));GAUCHE("0000000000000000";14-NBCAR(A1))&A1&"00";SI(NBCAR(A1)-TROUVE(",";A1)<2;GAUCHE("0000000000000000";15-NBCAR(A1*10^(NBCAR(A1)-TROUVE(",";A1))))&A1*10^(NBCAR(A1)-TROUVE(",";A1))&0;GAUCHE("0000000000000000";16-NBCAR(A1*10^(NBCAR(A1)-TROUVE(",";A1))))&A1*10^(NBCAR(A1)-TROUVE(",";A1)))) -
-
-
Function ConvertirChaine(ByVal chaine As Variant) As String If InStr(1, chaine, ",") <> 0 Then chaine = Replace(chaine, ",", "") Else chaine = chaine & "00" End If While Len(chaine) < 16 chaine = "0" & chaine Wend ConvertirChaine = chaine End Function