EXCEL VBA - Transformation nombre en code

Résolu
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

4 réponses

  1. Polux31 Messages postés 7219 Statut Membre 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
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. 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
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  3. 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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. laptitepero Messages postés 19 Statut Membre
       
      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
  4. Polux31 Messages postés 7219 Statut Membre 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