Mois en majuscules, mais sans accents (VBA)

YANN-56

XLDnaute Barbatruc
Bonjour à ceux qui passeront par ici.

Je charge les mois de l'année dans un ComboBox ainsi:

Code:
Private Sub UserForm_Initialize()

For i = 1 To 12 ' CHARGEMENT DES MOIS DANS UNE ANNEE, ET MISE EN MAJUSCULES
ComboBox1.AddItem Format(Format("1/" & i, "mmmm"), ">")
Next i
ComboBox1.Value = Format(Format(CDate(Date), "mmmm"), ">")

End Sub

Private Sub ComboBox1_Change()

Label1.Caption = ComboBox1.Value
Label2.Caption = Format(Format("1/" & ComboBox1.Value, "mm"), ">")
'(Ci-dessous Juillet = 7 et non 07)
'Label2.Caption = Format(Format("1/" & ComboBox1.Value, "mm"))

End Sub

Les ACCENTS me dérangent puisque le choix dans le ComboBox enregistre
le chemin d'un Dossier dont le nom est en majuscules sans accent; bien entendu!
(Comme au passage, la création des mois manquants)

Merci d'avance, si vous pouvez m'aider. Je sèche lamentablement!

Yann
 

Pièces jointes

  • MOIS.xls
    27.5 KB · Affichages: 128
  • MOIS.xls
    27.5 KB · Affichages: 129
  • MOIS.xls
    27.5 KB · Affichages: 136
Dernière édition:
G

Guest

Guest
Re : Mois en majuscules, mais sans accents (VBA)

Bonjour,

Voici une fonction trouvée sur le web:

Code:
'Fonction strtr similaire à celle de PHP
'Par Francis Hilaire
'http://www.prometee-creation.com
[EMAIL="'@param1"]'@param1[/EMAIL] => chaîne : chaîne à transformer
[EMAIL="'@param2"]'@param2[/EMAIL] => chaîne : chaîne de caractères à remplacer
[EMAIL="'@param3"]'@param3[/EMAIL] => chaîne : chaîne de caractères de remplacement
Function FormaterChaine(sChaine As String, Optional bMajuscule As Boolean = False)
    Dim c0, c1, i
    Dim Accent, noAccent
    Accent = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿ"
    noAccent = "AAAAAAACEEEEIIIIDNOOOOOOUUUUYbsaaaaaaaceeeeiiiidnoooooouuuyyby"
    For i = 1 To Len(Accent)
        
        'récupération d'un caractère
        'de la chaîne Accent à la position i
        c0 = Mid(Accent, i, 1)
        
        'Si la longueur de la chaîne noAccent dépasse celle de Accent
        'alors on remplace par rien
        If i > Len(noAccent) Then
            c1 = ""
        Else
            c1 = Mid(noAccent, i, 1)
        End If
        
        'Remplacement des caractères dans la chaîne de départ
        sChaine = Replace(sChaine, c0, c1)
        
    Next
    
    'On renvoie la chaîne sans accents
    If bMajuscule Then sChaine = UCase(sChaine)
    FormaterChaine = sChaine
    
End Function

Petit +: connais-tu la fonction MonthName(i) qui renvoie le nom d'un mois passé en paramètre?

A+
 
C

Compte Supprimé 979

Guest
Re : Mois en majuscules, mais sans accents (VBA)

Messieurs, bonjour

Sinon plus simple
Code:
Option Explicit
Private Const VMois As String = "JANVIER FEVRIER MARS AVRIL MAI JUIN JUILLET AOUT SEPTEMBRE OCTOBRE NOVEMBRE DECEMBRE"

Private Sub UserForm_Initialize()
  Dim TMois() As String, I as Integer
  TMois = Split(VMois, " ")
  ' CHARGEMENT des MOIS
  For I = 0 To 11
    Me.ComboBox1.AddItem TMois(I)
  Next I
End Sub
Ou dans un module
Code:
Option Explicit
Public Const VMois As String = "JANVIER FEVRIER MARS AVRIL MAI JUIN  JUILLET AOUT SEPTEMBRE OCTOBRE NOVEMBRE DECEMBRE"
:p:D
 
Dernière modification par un modérateur:

YANN-56

XLDnaute Barbatruc
Re : Mois en majuscules, mais sans accents (VBA)

Bonjour hasco

Merci pour ton aide.

Le MonthName est bien plus simple que ce j'avais fait!.. Super!

J'ai donc remplacé mon truc un peu lourd par:

" ComboBox1.AddItem MonthName(i)"

Coté "ACCENT" je peux aussi faire:

= Replace(ComboBox1.Value, "A"Â " ")…. Et c.

D'autant qu'il y a peu de lettres concernées.

Mais fervent adepte de toujours limiter le nombre de lignes,
j'avais pensé qu'il n'y avait là qu'une question de syntaxe.

Si quelqu'un trouve plus simple, je serai donc toujours preneur.

Merci hasco, tu m'as encore bien aidé... et au plaisir...

Je vais tenter de peaufiner.

Yann

P.S. Je découvre la réponse de Bruno.
Je regarde, et je reviens
 
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : Mois en majuscules, mais sans accents (VBA)

Merci Bruno.

(Au passage pardon à Hasco d'avoir oublié la majuscule à son pseudo)

Bruno, je vois là l'art d'un "Barbatruc", mais je ne suis encore que "Balbutiant"

Il y a des mots comme "Const" et "Split" qui me font mal !!! :(

Comme je n'aime pas faire sans savoir, je vais fouiller pour comprendre.

Tu m'auras, de ce pas, motivé pour en apprendre plus. :)

Bonne fin de journée à vous si sympas.

Yann
 

YANN-56

XLDnaute Barbatruc
Re : Mois en majuscules, mais sans accents (VBA)

Re Hasco, et à ceux qui passeront par ici.

Voici une solution courte qui fonctionne: :)

Code:
For i = 1 To 12 
ComboBox1.AddItem Replace(Format(Format("1/" & i, "mmmm"), ">"), "Û", "U")
Next i

Mais avec

Code:
" ComboBox1.AddItem Replace(MonthName(i), "Û", "U")

Il me refiche les majuscules en minuscules !!! ... Etonnant non?

Bon! J'ai l'air malin, mais il me manque d'ajouter à ce "Replace" la lettre "É" :confused:

Je pourrais faire moult tests, mais comme je suis un gros fainéant, je reviens donc vers vous.

Amicalement

Yann-Morbihan
 
C

Compte Supprimé 979

Guest
Re : Mois en majuscules, mais sans accents (VBA)

Re,

Mon cher Yann-56
Il y a des mots comme "Const" et "Split" qui me font mal !!!
Ca ne fait mal que la première fois ;):p:D

CONST : Une constante est un élément nommé conservant une valeur identique pendant toute l'exécution d'un programme. Il peut s'agir d'une chaîne, d'une donnée numérique, d'une autre constante ou d'une combinaison contenant des opérateurs logiques ou arithmétiques à l'exception de Is et de l'opérateur d'élévation à une puissance. Les constantes peuvent remplacer des valeurs réelles partout dans votre code.

Il y a plusieurs avantages à utiliser une constante:
Si la donnée doit être modifiée dans une macro complexe, vous n'avez plus besoin de parcourir toute la procédure pour la retrouver: il suffit de modifier la constante qui est généralement placée en début de macro ou en tête du module. Vous évitez ainsi les recherches fastidieuses et les erreurs de saisie.
Les constantes permettent aussi d'améliorer la lisibilité des macros.

Dixit Silkyroad : Utiliser les variables en VBA Excel

SPLIT : permet de transformer en tableau de base zéro à une dimension, une suite de mots séparés par un délimiteur (espace, virgule, point-virgule, etc ...)

Sinon recherche dans l'aide d'Excel, ça peut marcher ... parfois :)

A+
 

YANN-56

XLDnaute Barbatruc
Re : Mois en majuscules, mais sans accents (VBA)

Re Hasco, et encore Merci,

Cet "Ucase" j'aurais eu du mal à le trouver.
Preuve de l'énormité de ce que j'ai encore à apprendre!

Voici donc ce qui fonctionne à merveille grâce à ton aide:

Code:
Private Sub UserForm_Initialize()

For i = 1 To 12
ComboBox1.AddItem Replace(Replace(UCase(MonthName(i)), "Û", "U"), UCase("É"), "E")
Next i

ComboBox1.Value = Format(Format(CDate(Date), "mmmm"), ">")

End Sub

Private Sub ComboBox1_Change()
Label1.Caption = ComboBox1.Value
End Sub

Je n'ai pas adapté le mois présent (Of course on va attendre le mois d'Août)

Que tu préfères la solution de Bruno, je veux bien le concevoir,
mais pour les raisons dont j'ai parlé ci-dessus je conserve la tienne.

Je joins donc mon Classeur corrigé avec un grand :)

Bonne fin de journée.

Yann
 

Pièces jointes

  • MOIS_1.xls
    31 KB · Affichages: 88
G

Guest

Guest
Re : Mois en majuscules, mais sans accents (VBA)

Re Yann,

sauf que le ucase n'est pas necessaire chez toi, je l'ai utilisé dans le débogueur pour tester ma formule et comme je ne me rappelle plus du code du é majuscule j'ai mis UCase("é") mais toi tu peux mettre "É" seulement!:D

A+
 

YANN-56

XLDnaute Barbatruc
Re : Mois en majuscules, mais sans accents (VBA)

Re Bruno

Je vais analyser (Même si cela ne fait mal que la première fois) :mad:

J'aime ton humour, et j'apprécie beaucoup le mal que tu te donnes à partager ce que tu sais!

C'est tout à ton honneur, et je me sens redevable de prendre la peine de m'y pencher.
(Sans connotation autre que l'apprentissage de VBA)

Promis je vais le faire. (C'est ma cousine Constante qui va être contente!!! :))

Merci pour ce coup de pouce.

Bien amicalement, c'est vraiment sympa de ta part.

Yann
 

YANN-56

XLDnaute Barbatruc
Re : Mois en majuscules, mais sans accents (VBA)

Re Hasco,

Merci pour la précision.

Mais cette fois je ne pige pas ton explication sur "Ucase"

Il faut avouer aussi que je n'ai pas encore fouillé dans F1
ni testé sans ce dernier.

Je ne doute pas que tu l'aies déjà, mais je joins un Classeur
(Un peu beaucoup en désordre) avec les codes Ascii que
j'ai utilisés pour mes majuscules avec Accent.

Amicalement

Yann
 

Pièces jointes

  • CODES_ASCII.zip
    17.1 KB · Affichages: 46

Fo_rum

XLDnaute Accro
Re : Mois en majuscules, mais sans accents (VBA)

Salut

...
Cet "Ucase" j'aurais eu du mal à le trouver.
Preuve de l'énormité de ce que j'ai encore à apprendre!
...


Ce n’est pas une énormité quand il est bien placé :

Code:
Private Sub UserForm_Initialize()

For I = 1 To 12
  ComboBox1.AddItem UCase(Replace(Replace(MonthName(I), "û", "U"), "é", "E"))
Next I

ComboBox1.Value = Format(Format(CDate(Date), "mmmm"), ">")

End Sub


Si tu veux apprendre un autre gros mot, tu peux utiliser « Array ».
Code:
Option Explicit

Private Sub UserForm_Initialize()
  Dim n As Byte 
  For n = 0 To 11
    ComboBox1.AddItem Array("JANVIER", "FEVRIER", "MARS", "AVRIL", "MAI", "JUIN", "JUILLET", "AOUT", "SEPTEMBRE", "OCTOBRE", "NOVEMBRE", "DECEMBRE")(n)
  Next
End Sub
 

Discussions similaires

Réponses
3
Affichages
349

Statistiques des forums

Discussions
312 538
Messages
2 089 396
Membres
104 157
dernier inscrit
STEPH62110