EXCEL VBA - Transformation nombre en code

Résolu
laptitepero Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
laptitepero Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   1 204
 
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   Statut Modérateur Dernière intervention   2 761
 
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
 
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   Statut Modérateur Dernière intervention   2 761
 
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
 
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   Statut Modérateur Dernière intervention   2 761
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   1 204
 
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