Bonjour tout le monde,

Je travaille à l'heure actuelle sur une application multilangue (4).
Me basant sur différents messages et contributions postés sur ce forum je suis parvenu à développer mes différents formulaires en fonction de mes besoins.

Toutefois je rencontre à présent un problème en ce qui concerne l'actualisation de mes sous-formulaires. Lesdits sous-formulaires se présentent en mode "Feuille de données" - chaque formulaire présentant en guise de nom de colonne le nom du champ en question. Lorsque je laisse ces sous-formulaires en tant que formulaire indépendant l'actualisation de mes champs fonctionne parfaitement sur la base du code annexé. Dès l'instant où j'intègre ces sous-formulaires dans un autre formulaire la mise à jour ne fonctionne plus du tout. Indépendamment du code de langue choisi dans le menu principal l'application me renvoie à chaque reprise la légende du champ en question.

Pour quels motifs cette adaptation n'a t-elle plus lieu ?

Les sous-formulaires cités ci-dessus contiennent le code suivant:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
 
 
Dim valeur As Integer
 
Private Sub deutsch_Click()
cliquer (1)
End Sub
 
Private Sub français_Click()
cliquer (2)
End Sub
 
Private Sub italiano_Click()
cliquer (3)
End Sub
 
Private Sub English_Click()
cliquer (4)
End Sub
 
Private Sub Form_Open(Cancel As Integer)
cliquer (Chercher_langue)
End Sub
 
Sub cliquer(bouton As Integer)
valeur = bouton
ChangeFormReportLanguage "sfrmNouvBV", "Form", valeur
sauvegarder_langue (valeur)
End Sub
 
'Cette procédure stocke la langue dans la table Langue choisie
 
Sub sauvegarder_langue(bouton As Integer)
Dim rkt As DAO.Recordset
Set rkt = CurrentDb.OpenRecordset("Langue")
If Not rkt.EOF Then
    rkt.Edit
Else
    rkt.AddNew
End If
rkt.Fields(0).Value = bouton
rkt.Update
rkt.Close
Set rkt = Nothing
End Sub
 
'Rechecher la langue de la précédente utilisation
 
Function Chercher_langue() As Integer
Dim rkt As DAO.Recordset
Set rkt = CurrentDb.OpenRecordset("Langue")
If Not rkt.EOF Then
Chercher_langue = rkt.Fields(0).Value
Else
'choisi l'allemand par défaut
Chercher_langue = 1
End If
Set rkt = Nothing
End Function
 
Function ChangeFormReportLanguage(NomFormulaire As String, fType As String, fLangue As Integer)
 
Dim chSQL As String
Dim ctl As Control
Dim bds As DAO.Database
Dim rst As DAO.Recordset
Dim a As Long
Dim ObjectType As Object
 
On Error Resume Next
 
Set bds = CurrentDb
chSQL = "SELECT * FROM T_Langue WHERE [#Formulaire] = '" & NomFormulaire & "'"
Set rst = bds.OpenRecordset(chSQL)
 
If fType = "Form" Then
      Set ObjectType = Forms
   ElseIf fType = "Report" Then
      Set ObjectType = Reports
   Else
      Exit Function
End If
 
With rst
  ' Remplit l'objet Recordset.
  Do Until rst.EOF
 
     For Each ctl In ObjectType.Item(NomFormulaire).Controls
     ' Vérifie si le contrôle est une étiquette.
     If IsNumeric(ctl.Tag) Then
        If Val(ctl.Tag) = rst!ID Then
           Select Case fLangue
              Case 1
                ctl.Caption = rst!German
              Case 2
                ctl.Caption = rst!French
              Case 3
                ctl.Caption = rst!Italian
              Case 4
                ctl.Caption = rst!English
           End Select
           Exit For
        End If
     End If
     Next ctl
     rst.MoveNext
  Loop
  .Close
End With
 
End Function
 
Private Sub Form_Load()
cliquer (Chercher_langue)
End Sub
 
Private Sub C_langue_Click()
Dim a As Long
a = ChangeFormReportLanguage("Mainboard", "Form", Me!C_Langue)
End Sub
Pour complément:

Les éléments à traduire se trouvent dans une table destinée à cet effet et comprennent les informations suivantes:

- un Numéro ID (à saisir sous "Remarque" ou Tag en englais)
- #Formular (Indication du nom du formulaire concerné)
- TypeOfObject (précision quant à savoir s'il s'agit d'un formulaire ou d'un état)

Ladite table présente encore les informations que voici:

- ControlName (nom de contrôle de l'objet)
- French (les différents termes dans les diverses langues)
- German
- Italiano
- English

Le passage d'une langue déterminée à une autre s'effectue sur le menu principal. Ce dernier reste ouvert en arrière plan aussi longtemps que l'application est active.

J'espère avoir été clair dans mes propos. Je me tiens bien évidemment en tout temps à disposition pour de plus amples renseignements.

Amicalement

Papillon00