Bonsoir,
j'ai rédigé une fonction qui renvoie le jour de la semaine dans une langue choisie parmi une liste de langues :
Pour pouvoir utiliser commodément cette fonction, je charge un ComboBox avec les noms de toutes les langues répertoriées dans la fonction :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 Function NomJourSemaineTrip$(Optional fecha As Date, Optional ChxLangue As Byte, Optional NomLangue As Boolean = False, Optional NbItems As Boolean = False) 'Renvoie le jour de la semaine correspondant à une date '- fecha : une date '- ChxLangue : choix de la langue. Ex : 1 --> Afrikaans | 2 --> Alabama | 3 --> Albanais |... '- NomLangue : si omis ou False --> nom du jour de la semaine dans la langue choisie ' si True --> nom de la langue choisie '- NbItems : si True --> nombre de langues répertoriées dams la fonction '- transcription : si True --> vérifie si la langue choisie est dans un alphabet ésotérique (grec, cyrillique...) et recherche sa transcription latinisée 'ATTENTION ! Après toute modification, ne pas oublier de mettre à jour "NbLangues" & les "Case" de "latinisation" Dim langue, NbLangues As Byte, latinisation Select Case ChxLangue Case 1: langue = Array("Sonndag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag", "Afrikaans") Case 2: langue = Array("Nihtahollo", "Nihta a" & ChrW(620) & ChrW(620) & "ámmòona", "Nihta atòkla", "Nihta atótchìina", "Nihta istóstàaka", "Nihta istá" & ChrW(620) & ChrW(620) & "àapi", "Nihtahollosi", "Alabama") Case 3: langue = Array("E diel", "E hënë", "E martë", "E mërkurë", "E enjte", "E premte", "E shtunë", "Albanais") Case 4: langue = Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Allemand") Case 5: langue = Array("Sonndich", "Mendich", "Denschdich", "Mittich", "Donnerschtich", "Fraidich", "Samschdich", "Allemand (Bavarois)") End Select NbLangues = 5 'nombre de langues répertoriées dans la fonction If NbItems Then NomJourSemaineTrip = NbLangues 'nombre total de langues répertoriées dans la fonction ElseIf NomLangue Then NomJourSemaineTrip = langue(7) 'langue choisie Else NomJourSemaineTrip = langue(Weekday(fecha) - 1) 'jour de la semaine, correspondant à la date "fecha", dans la langue choisie (Option Base 0) End If End Function
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Private Sub UserForm_Initialize() 'Ouverture de l'UserForm "UF_JS" Dim dico As Object, ListeLangues, NbItems As Byte, i As Byte Set dico = CreateObject("Scripting.Dictionary") 'le dictionnaire NbItems = NomJourSemaineTrip(, , , True) 'nombre de langues répertoriées dans la fonction "NomJourSemaineTrip" 'Dresse un tableau avec la liste des langues répertoriées dans la fonction "NomJourSemaineTrip" ReDim ListeLangues(NbItems) For i = 1 To NbItems ListeLangues(i) = NomJourSemaineTrip(, i, True) Next 'Dresse la liste des items du ComboBox "ComboBox_LanguesProposées" For i = 1 To UBound(ListeLangues) 'rempli le dictionnaire ("dico") avec les éléments de la matrice "ListeLangues" (Option Base 0) dico(ListeLangues(i)) = "" Next ComboBox_LanguesProposées.List = dico.keys 'charge la liste du ComboBox "ComboBox_LanguesProposées" à partir du dictionnaire ComboBox_LanguesProposées.ListIndex = Array_Pos(ListeLangues, [LangueActuelle]) - 1 'sélection de la dernière langue choisie mémorisée dans la cellule nommée "LangueActuelle" End Sub
La fonction marche très bien, le ComboBox se charge très bien, seulement persiste un problème : si je choisis le dernier item (ici "Allemand (Bavarois)"), le nom du jour de la semaine dans cette langue apparaît bien après fermeture du formulaire, mais si je veux réouvrir le formulaire pour accéder au ComboBox, ça plante avec ce message (traduit de l'espagnol) :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Function Array_Pos(tableau, recherche) 'Connaître la position d'un item dans un Array '- tableau : une matrice '- recherche : un item de l'Array Dim i Array_Pos = -1 'par défaut, la valeur n'a pas été trouvée dans le tableau For i = LBound(tableau) To UBound(tableau) If tableau(i) = recherche Then 'la valeur a été trouvée Array_Pos = i Exit For End If Next End Function
Erreur 13
Les types ne coïncident pas
Comment y remédier ?