Bonjour à tous,
Je travaille sur VBA Excel. Je fais une boucle pour parcourir 15 cuves et à chaque cuve j'interroge une base historisée. Je collecte ces données dans une variable type personnalisé qui est défini en variable public dans un autre module.
Quand je compile mon code, j'ai une erreur: "incompatibilité de type: tableau ou type défini par l'utilisateur" sur selectionne_t_arempli(n)
En plus dans la fonction "remplir_tableau" (qui fonctionne bien) j'appelle chaque argument passé en paramètre directement dans la fonction selectionne_t_rempli(n) et je force le résultat de ces functions en boolean pour
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 For n = 0 To 14 'cette boucle fait fonctionner pour ma cuve KA100 la boucle suivante 'selectionne_t_aremplir_rempli = remplir_tableau(selectionne_t_aremplir, rs, TAG_EV_SIROPKA100, date_debut, date_fin) selectionne_t_rempli(n) = remplir_tableau(selectionne_t_aremplir(n), rs, selectionne_tag_utilise(n), date_debut, date_fin) bornesup = UBound(t_aremplir) borneinf = LBound(t_aremplir) For i = 0 To bornesup remp = 0 eventreecuve = False Select Case i Case Is = 0 And t_aremplir(i).valeur = 1 And t_aremplir(i).statut = True Case Is = 0 And t_aremplir(i).valeur = 0 And t_aremplir(i).statut = True Case Is <> 0 And t_aremplir(i).valeur = 1 And t_aremplir(i).statut = True remp = t_aremplir(i).heure If t_aremplir(i).valeur = 1 Then eventreecuve = True Else eventreecuve = False Case Is <> 0 And t_aremplir(i).valeur = 0 And t_aremplir(i).statut = True remp = t_ev_laitmais_liqa(i).heure If t_aremplir(i).valeur = 1 Then eventreecuve = True Else eventreecuve = False End Select If remp = 0 Then Else ReDim Preserve intermed(j + 1) intermed(j).cuveKA100 = True intermed(j).evcuveKA100 = eventreecuve Select Case j Case Is = 0 intermed(j).modecuveKA100 = "" Case 0 To bornesup - 1 Select Case eventreecuve Case Is = False And intermed(j - 1).evcuveKA100 = False intermed(j).modecuveKA100 = "4nonrempf" Case Is = False And intermed(j - 1).evcuveKA100 = True intermed(j).modecuveKA100 = "3nonrempd" Case Is = True And intermed(j - 1).evcuveKA100 = False intermed(j).modecuveKA100 = "1rempd" Case Is = True And intermed(j - 1).evcuveKA100 = True intermed(j).modecuveKA100 = "2rempf" End Select End Select j = j + 1 ReDim Preserve intermed(j - 1) End If Next i Next n
selectionne_t_rempli(n) [fonction typée en retour variant] et en String pour selectionne_tag_utilise(n) [fonction typée en retour Variant]
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 Public Function selectionne_tag_utilise(ByVal i As Integer) As Variant Dim t_listecuvelu() As Variant ReDim t_listecuvelu(0 To 14, 0 To 3) t_listecuvelu(0, 0) = "KA" t_listecuvelu(1, 0) = "KB" t_listecuvelu(2, 0) = "KC" t_listecuvelu(3, 0) = "KD" t_listecuvelu(4, 0) = "KF" t_listecuvelu(5, 0) = "KG" t_listecuvelu(6, 0) = "KH" t_listecuvelu(7, 0) = "KI" t_listecuvelu(8, 0) = "BA" t_listecuvelu(9, 0) = "BB" t_listecuvelu(10, 0) = "BC" t_listecuvelu(11, 0) = "BD" t_listecuvelu(12, 0) = "BE" t_listecuvelu(13, 0) = "BF" t_listecuvelu(14, 0) = "BH" For i = 0 To UBound(t_listecuvelu) selectionne_tag_utilise = CStr("TAG_EV_SIROP" & t_listecuvelu(i, 0) & "100") Next End Function
Je ne mets pas la function avec boolean car c'est équivalent au string.
Par contre, je mets la troisième en type personnalisé et je n'arrive pas à retourner le résultat de cette function dans un type personnalisé
Le type perso que j'utilise est :
Même en retour type variant ça ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Type type_tag heure As Date niveau As Boolean statut As Boolean valeur As Double End Type
Est-ce que quelqu'un pourrait m'aider à trouver une piste svp? J'aimerais vraiment faire la boucle pour éviter des tartines de codes.
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 Public Function selectionne_t_aremplir(ByVal i As Integer) As type_tag Dim t_listecuvelu() As Variant ReDim t_listecuvelu(0 To 14, 0 To 3) t_listecuvelu(0, 0) = "KA" t_listecuvelu(1, 0) = "KB" t_listecuvelu(2, 0) = "KC" t_listecuvelu(3, 0) = "KD" t_listecuvelu(4, 0) = "KF" t_listecuvelu(5, 0) = "KG" t_listecuvelu(6, 0) = "KH" t_listecuvelu(7, 0) = "KI" t_listecuvelu(8, 0) = "BA" t_listecuvelu(9, 0) = "BB" t_listecuvelu(10, 0) = "BC" t_listecuvelu(11, 0) = "BD" t_listecuvelu(12, 0) = "BE" t_listecuvelu(13, 0) = "BF" t_listecuvelu(14, 0) = "BH" For i = 0 To UBound(t_listecuvelu) t_aremplir = "t_ev_entree_" & t_listecuvelu(i, 0) & "100" t_aremplir =CType(("t_ev_entree_" & t_listecuvelu(i, 0) & "100"), type_tag) selectionne_t_aremplir = t_aremplir Next End Function
Est-ce que je devrait jouer au poupée russes sur mon type personnalisé avec plusieurs fonctions? j'aimerais éviter ça aussi.
Merci d'avance,
Emmanuel
Partager