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!
'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?
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"
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.
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
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.
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!
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.
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