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
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
A voir également:
- EXCEL VBA - Transformation nombre en code
- Liste déroulante excel - Guide
- Le code ascii en informatique - Guide
- Mise en forme conditionnelle excel - Guide
- Code puk bloqué - Guide
- Si et excel - Guide
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
Modifié par Polux31 le 24/03/2010 à 13:07
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
24 mars 2010 à 13:01
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.
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))
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
24 mars 2010 à 15:29
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...
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 ? :-)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
25 mars 2010 à 16:55
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))))
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))))
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
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 !
D'ailleurs j'ai mis une autre question .... "Excel, ajouter espaces à texte..."
Si tu as un peu de temps... LOL
Merci en tout cas !
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
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