EXCEL VBA - Transformation nombre en code

Résolu/Fermé
laptitepero Messages postés 19 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 9 avril 2010 - 24 mars 2010 à 12:25
laptitepero Messages postés 19 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 9 avril 2010 - 25 mars 2010 à 19:54
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
A voir également:

4 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 24/03/2010 à 13:07
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
24 mars 2010 à 13:01
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))
0
laptitepero
24 mars 2010 à 14:08
Pijaku, j'aime bcp ta méthode par formule, seulement, si mon nombre est avec un zéro à la fin, par exemple 39,40, la formule fait apparaître 0000000000000394 alors qu'il me faudrait : 0000000000003940...
As-tu une solution pour ça ?
Merci d'avance
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
24 mars 2010 à 15:29
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...
0
laptitepero
25 mars 2010 à 16:08
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 ? :-)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
25 mars 2010 à 16:55
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))))
0
laptitepero Messages postés 19 Date d'inscription jeudi 11 décembre 2008 Statut Membre Dernière intervention 9 avril 2010
25 mars 2010 à 19:54
Super !! Ca marche nikel !
D'ailleurs j'ai mis une autre question .... "Excel, ajouter espaces à texte..."
Si tu as un peu de temps... LOL
Merci en tout cas !
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
25 mars 2010 à 16:35
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
0