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 -
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
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:
- EXCEL VBA - Transformation nombre en code
- Code ascii - Guide
- Liste déroulante excel - Guide
- Nombre de jours entre deux dates excel - Guide
- Mise en forme conditionnelle excel - Guide
- Word et excel gratuit - Guide
4 réponses
Bonjour,
Voilà une fonction qui permet de faire ça:
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:
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
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.
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))
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...
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))))
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))))