Programmation VBA majuscule
Résolu
laeti_1364
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
ALS35 Messages postés 1033 Date d'inscription Statut Membre Dernière intervention -
ALS35 Messages postés 1033 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je ne suis pas très douée en programmation vba mais j'ai plus ou moins réussi à avoir ce que je voulais. J'ai réussi à convertir les chiffres monétaire en lettres, seulement tout se met en majuscule sauf "centimes" et il ne me met pas le "ET" entre les euros et les centimes. Pour être plus claire je vous donne un exemple.
actuellement dans mon fichier 32,56€ = TRENTE DEUX EUROS CINQUANTE SIX centimes
le résultat que j'aimerai avoir = TRENTE DEUX EUROS ET CINQUANTE SIX CENTIMES
Voici la fonction
Merci d'avance à ceux qui prendront le temps de m'aider.
Je ne suis pas très douée en programmation vba mais j'ai plus ou moins réussi à avoir ce que je voulais. J'ai réussi à convertir les chiffres monétaire en lettres, seulement tout se met en majuscule sauf "centimes" et il ne me met pas le "ET" entre les euros et les centimes. Pour être plus claire je vous donne un exemple.
actuellement dans mon fichier 32,56€ = TRENTE DEUX EUROS CINQUANTE SIX centimes
le résultat que j'aimerai avoir = TRENTE DEUX EUROS ET CINQUANTE SIX CENTIMES
Voici la fonction
Function chiffrelettre(s) Dim a As Variant, gros As Variant a = Array("", "UN", "DEUX", "TROIS", "QUATRE", "CINQ", "SIX", "SEPT", _ "HUIT", "NEUF", "DIX", "ONZE", "DOUZE", "TREIZE", "QUATORZE", "QUINZE", "SEIZE", "DIX SEPT", _ "DIX HUIT", "DIX NEUF", "VINGT", "VINGT ET UN", "VINGT DEUX", "VINGT TROIS", "VINGT QUATRE", _ "VINGT CINQ", "VINGT SIX", "VINGT SEPT", "VINGT HUIT", "VINGT NEUF", "TRENTE", "TRENTE ET UN", _ "TRENTE DEUX", "TRENTE TROIS", "TRENTE QUATRE", "TRENTE CINQ", "TRENTE SIX", "TRENTE SEPT", _ "TRENTE HUIT", "TRENTE NEUF", "QUARANTE", "QUARANTE ET UN", "QUARANTE DEUX", "QUARANTE TROIS", _ "QUARANTE QUATRE", "QUARANTE CINQ", "QUARANTE SIX", "QUARANTE SEPT", "QUARANTE HUIT", _ "QUARANTE NEUF", "CINQUANTE", "CINQUANTE ET UN", "CINQUANTE DEUX", "CINQUANTE TROIS", _ "CINQUANTE QUATRE", "CINQUANTE CINQ", "CINQUANTE SIX", "CINQUANTE SEPT", "CINQUANTE HUIT", _ "CINQUANTE NEUF", "SOIXANTE", "SOIXANTE ET UN", "SOIXANTE DEUX", "SOIXANTE TROIS", _ "SOIXANTE QUATRE", "SOIXANTE CINQ", "SOIXANTE SIX", "SOIXANTE SEPT", "SOIXANTE HUIT", _ "SOIXANTE NEUF", "SOIXANTE DIX", "SEPTANTE", "SEPTANTE ET UN", "SEPTENTE DEUX", _ "SEPTENTE QUATRE", "SEPTANTE CINQ", "SEPTANTE SIX", "SEPTANTE SEPT", _ "SEPTANTE HUIT", "SEPTANTE NEUF", "QUATRE-VINGTS", "QUATRE-VINGT UN", _ "QUATRE-VINGT DEUX", "QUATRE-VINGT TROIS", "QUATRE-VINGT QUATRE", "QUATRE-VINGT CINQ", _ "QUATRE-VINGT SIX", "QUATRE-VINGT SEPT", "QUATRE-VINGT HUIT", "QUATRE-VINGT NEUF", _ "NONANTE", "NONANTE ET UN", "NONANTE DEUX", "NONANTE TROIS", _ "NONANTE QUATRE", "NONANTE CINQ", "NONANTE SIX", "NONANTE SEPT", _ "NONANTE HUIT", "NONANTE NEUF") gros = Array("", "billions", "milliards", "millions", "mille", "EUROS", "billion", _ "milliard", "million", "mille", "Euro") sp = Space(1) chaine = "00000000000000" centime = s * 100 - (Int(s) * 100) s = Str(Int(s)): lg = Len(s) - 1: s = Right(s, lg): lg = Len(s) If lg < 15 Then chaine = Mid(chaine, 1, (15 - lg)) Else chaine = "" s = chaine + s 'billions au centaines gp = 1 For k = 1 To 5 x = Mid(s, gp, 1): c = a(Val(x)) x = Mid(s, gp + 1, 2): d = a(Val(x)) If k = 5 Then If t2 <> "" And c & d = "" Then mydz = "Euros" & sp: GoTo fin If t <> "" And c = "" And d = "un" Then mydz = "un Euros" & sp: GoTo fin If t <> "" And t2 = "" And c & d = "" Then mydz = "d'Euros" & sp: GoTo fin If t & c & d = "" Then myct = "": mydz = "": GoTo fin End If If c & d = "" Then GoTo fin If d = "" And c <> "" And c <> "un" Then mydz = c & sp & "cents " & gros(k) & sp: GoTo fin If d = "" And c = "un" Then mydz = "CENT " & gros(k) & sp: GoTo fin If d = "un" And c = "" Then myct = IIf(k = 4, gros(k) & sp, "un " & gros(k + 5) & sp): GoTo fin If d <> "" And c = "un" Then mydz = "cent" & sp If d <> "" And c <> "" And c <> "un" Then mydz = c & sp & "cent" + sp myct = d & sp & gros(k) & sp fin: t2 = mydz & myct t = t & mydz & myct mydz = "": myct = "" gp = gp + 3 Next d = a(centime) If t <> "" Then myct = IIf(centime = 1, " centime", " centimes") If t = "" Then myct = IIf(centime = 1, " centime d'Euro", " centimes d 'Euro") If centime = 0 Then d = "": myct = "" chiffrelettre = t & d & myct End Function
Merci d'avance à ceux qui prendront le temps de m'aider.
A voir également:
- Majuscule vba
- É majuscule - Guide
- Majuscule - Guide
- Code ascii de a majuscule - Guide
- Mettre en majuscule - Guide
- Touche majuscule inversée ✓ - Forum Clavier
2 réponses
Bonjour,
Programme compliqué !
Essaie de remplacer les deux dernières instructions par celles-ci :
Cordialement
Programme compliqué !
Essaie de remplacer les deux dernières instructions par celles-ci :
Dim e As String If centime = 0 Then d = "": myct = "": et = "" Else e = " et " chiffrelettre = UCase(t & e & d & myct)
Cordialement
Bonjour,
C'est normal puisque "centimes" est en minuscules.
Le sujet est traité ici, mais pas en VBA:
https://forums.commentcamarche.net/forum/affich-37516117-convertir-des-chiffres-en-lettres-avec-une-unique-formule
C'est normal puisque "centimes" est en minuscules.
Le sujet est traité ici, mais pas en VBA:
https://forums.commentcamarche.net/forum/affich-37516117-convertir-des-chiffres-en-lettres-avec-une-unique-formule
Bonjour, j'ai un petit soucis au niveau du VBA.
Par exemple, lorsque j'ai un montant de 178,00€ il m'écris "UN CENT SEPTANTE HUIT EUROS" J'aimerai qu'il écrive uniquement "CENT SEPTANTE HUIT EUROS"
Par exemple, lorsque j'ai un montant de 178,00€ il m'écris "UN CENT SEPTANTE HUIT EUROS" J'aimerai qu'il écrive uniquement "CENT SEPTANTE HUIT EUROS"
Function chiffrelettre(s) Dim a As Variant, gros As Variant a = Array("", "UN", "DEUX", "TROIS", "QUATRE", "CINQ", "SIX", "SEPT", _ "HUIT", "NEUF", "DIX", "ONZE", "DOUZE", "TREIZE", "QUATORZE", "QUINZE", "SEIZE", "DIX SEPT", _ "DIX HUIT", "DIX NEUF", "VINGT", "VINGT ET UN", "VINGT DEUX", "VINGT TROIS", "VINGT QUATRE", _ "VINGT CINQ", "VINGT SIX", "VINGT SEPT", "VINGT HUIT", "VINGT NEUF", "TRENTE", "TRENTE ET UN", _ "TRENTE DEUX", "TRENTE TROIS", "TRENTE QUATRE", "TRENTE CINQ", "TRENTE SIX", "TRENTE SEPT", _ "TRENTE HUIT", "TRENTE NEUF", "QUARANTE", "QUARANTE ET UN", "QUARANTE DEUX", "QUARANTE TROIS", _ "QUARANTE QUATRE", "QUARANTE CINQ", "QUARANTE SIX", "QUARANTE SEPT", "QUARANTE HUIT", _ "QUARANTE NEUF", "CINQUANTE", "CINQUANTE ET UN", "CINQUANTE DEUX", "CINQUANTE TROIS", _ "CINQUANTE QUATRE", "CINQUANTE CINQ", "CINQUANTE SIX", "CINQUANTE SEPT", "CINQUANTE HUIT", _ "CINQUANTE NEUF", "SOIXANTE", "SOIXANTE ET UN", "SOIXANTE DEUX", "SOIXANTE TROIS", _ "SOIXANTE QUATRE", "SOIXANTE CINQ", "SOIXANTE SIX", "SOIXANTE SEPT", "SOIXANTE HUIT", _ "SOIXANTE NEUF", "SEPTANTE", "SEPTANTE ET UN", "SEPTENTE DEUX", _ "SEPTENTE QUATRE", "SEPTANTE CINQ", "SEPTANTE SIX", "SEPTANTE SEPT", _ "SEPTANTE HUIT", "SEPTANTE NEUF", "QUATRE-VINGTS", "QUATRE-VINGT UN", _ "QUATRE-VINGT DEUX", "QUATRE-VINGT TROIS", "QUATRE-VINGT QUATRE", "QUATRE-VINGT CINQ", _ "QUATRE-VINGT SIX", "QUATRE-VINGT SEPT", "QUATRE-VINGT HUIT", "QUATRE-VINGT NEUF", _ "NONANTE", "NONANTE ET UN", "NONANTE DEUX", "NONANTE TROIS", _ "NONANTE QUATRE", "NONANTE CINQ", "NONANTE SIX", "NONANTE SEPT", _ "NONANTE HUIT", "NONANTE NEUF") gros = Array("", "billions", "milliards", "millions", "mille", "EUROS", "billion", _ "milliard", "million", "mille", "Euro") sp = Space(1) chaine = "00000000000000" centime = s * 100 - (Int(s) * 100) s = Str(Int(s)): lg = Len(s) - 1: s = Right(s, lg): lg = Len(s) If lg < 15 Then chaine = Mid(chaine, 1, (15 - lg)) Else chaine = "" s = chaine + s 'billions au centaines gp = 1 For k = 1 To 5 x = Mid(s, gp, 1): c = a(Val(x)) x = Mid(s, gp + 1, 2): d = a(Val(x)) If k = 5 Then If t2 <> "" And c & d = "" Then mydz = "Euros" & sp: GoTo fin If t <> "" And c = "" And d = "un" Then mydz = "un Euros" & sp: GoTo fin If t <> "" And t2 = "" And c & d = "" Then mydz = "d'Euros" & sp: GoTo fin If t & c & d = "" Then myct = "": mydz = "": GoTo fin End If If c & d = "" Then GoTo fin If d = "" And c <> "" And c <> "un" Then mydz = c & sp & "cents " & gros(k) & sp: GoTo fin If d = "" And c = "un" Then mydz = "CENT " & gros(k) & sp: GoTo fin If d = "un" And c = "" Then myct = IIf(k = 4, gros(k) & sp, "un " & gros(k + 5) & sp): GoTo fin If d <> "" And c = "un" Then mydz = "cent" & sp If d <> "" And c <> "" And c <> "un" Then mydz = c & sp & "cent" + sp myct = d & sp & gros(k) & sp fin: t2 = mydz & myct t = t & mydz & myct mydz = "": myct = "" gp = gp + 3 Next d = a(centime) If t <> "" Then myct = IIf(centime = 1, " centime", " centimes") If t = "" Then myct = IIf(centime = 1, " centime d'Euro", " centimes d 'Euro") Dim e As String If centime = 0 Then d = "": myct = "": et = "" Else e = "et " chiffrelettre = UCase(t & e & d & myct) End Function
Bonjour,
1) C'est parce que tes valeurs définies sont en majuscule
(a = Array("", "UN", "DEUX", "TROIS", "QUATRE", "CINQ", "SIX", "SEPT", _ )
et que le code vba compare avec la chaîne en minuscule "un"
Soit tu passes toutes tes valeurs en minuscules, ce qui est plus juste à mon avis (et tant qu'à faire en mettant les traits d'union), soit tu places l'instruction
2) tu as un autre souci pour les valeurs inférieures à 1 euro avec le mot et qui est ajouté à tort
Remplace l'avant dernière instruction par :
Cordialement
1) C'est parce que tes valeurs définies sont en majuscule
(a = Array("", "UN", "DEUX", "TROIS", "QUATRE", "CINQ", "SIX", "SEPT", _ )
et que le code vba compare avec la chaîne en minuscule "un"
Soit tu passes toutes tes valeurs en minuscules, ce qui est plus juste à mon avis (et tant qu'à faire en mettant les traits d'union), soit tu places l'instruction
Option Compare Texten début de module qui permet de s’affranchir des minuscules et majuscules
2) tu as un autre souci pour les valeurs inférieures à 1 euro avec le mot et qui est ajouté à tort
Remplace l'avant dernière instruction par :
If centime = 0 Then d = "": myct = "": e = "" Else If t <> "" Then e = "et "
Cordialement
Belle journée à vous