Erreur 9

Résolu/Fermé
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 - 26 nov. 2013 à 11:55
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 29 nov. 2013 à 09:44
Bonjour,

j'ai les structures suivantes :




Type dataTab_sup
localisation As String
type_sup As String
ipAddr As String
numLicense As String
memPhi As String
dateAcqui As String
dd As String
os As String
resEcran As String
printer As String
End Type
Type local_sup
dataTab() As dataTab_sup
End Type
Type batiment_sup
nb As Integer
locals() As local_sup
End Type

'Structures pour l'automation

Type dataTab_aut
type As String
ip As String
tension As String
obs As String
End Type
Type armoire
dataTab() As dataTab_aut
End Type
Type local_aut
arms() As armoire
End Type
Type batiment_aut
locals() As local_aut
End Type
Public bat0_aut As batiment_aut
Public bat0_sup As batiment_sup



j'ai les initialisations suivantes :


'Déclaration et initialisation des structures batiments
Dim i As Integer
'boucle initialisation
For i = 1 To i = 2
bat0_sup.locals(1).dataTab(i).localisation = "0"
bat0_sup.locals(1).dataTab(i).type_sup = "0"
bat0_sup.locals(1).dataTab(i).ipAddr = "0"
bat0_sup.locals(1).dataTab(i).numLicense = "0"
bat0_sup.locals(1).dataTab(i).memPhi = "0"
bat0_sup.locals(1).dataTab(i).dateAcqui = "0"
bat0_sup.locals(1).dataTab(i).dd = "0"
bat0_sup.locals(1).dataTab(i).os = "0"
bat0_sup.locals(1).dataTab(i).resEcran = "0"
bat0_sup.locals(1).dataTab(i).printer = "0"
bat0_aut.locals(1).arms(1).dataTab(i).type = "0"
bat0_aut.locals(1).arms(1).dataTab(i).ip = "0"
bat0_aut.locals(1).arms(1).dataTab(i).tension = "0"
bat0_aut.locals(1).arms(1).dataTab(i).obs = "0"
Next i

'Gestion du nombre de batiments
bat0_sup.id = 1
bat0_aut.id = 1

j'ai l'appel de fonction suivant :

Call add_elem("bat", "sup", ligFinSup)

J'ai la fonction suivante l'erreur se situe dans l'instruction dans le if :


Private Function add_elem(elem As String, part As String, endSup As Integer)
If elem = "bat" And part = "sup" Then
MsgBox (bat0_sup.locals(1).dataTab(1).localisation)
End If


End Function

Merci d'avance,

5 réponses

Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 26/11/2013 à 12:35
Bonjour,

Que dit le message d'erreur ???

Et pourquoi ceci, aucune des structures n'a un élément id:

    bat0_sup.id = 1
bat0_aut.id = 1


«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
Modifié par winflow le 26/11/2013 à 13:20
le message d'erreur dit l'indice ne correspond pas à la sélection. Autant pour moi c'est nb au lieu de id
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
26 nov. 2013 à 13:20
j'ai mis Option Base 1 au début de la feuille de calcul
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
26 nov. 2013 à 17:44
Bonjour,

dans vos defintions de variable type, les tableaux ne sont pas definis ---->dataTab() As dataTab_sup

For i = 1 To i = 2 ca ne marche pas, mais aucune erreur, passe tout droit

For i = 1 To 2 ---> ca c'est la bonne syntaxe et si vous faites cette modif avant ce definir les tableaux, vous aurez l'erreur 9 a la premiere ligne de code apres le for i=
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
27 nov. 2013 à 12:04
avec les structures suivantes


'Structures pour la supervision

Type dataTab_sup
localisation As String
type_sup As String
ipAddr As String
numLicense As String
memPhi As String
dateAcqui As String
dd As String
os As String
resEcran As String
printer As String
End Type
Type local_sup
dataTab() As dataTab_sup
End Type
Type batiment_sup
id As Integer
locals() As local_sup
End Type

'Structures pour l'automation

Type dataTab_aut
type As String
ip As String
tension As String
obs As String
End Type
Type armoire
dataTab() As dataTab_aut
End Type
Type local_aut
arms() As armoire
End Type
Type batiment_aut
locals() As local_aut
End Type
Public bat0_aut As batiment_aut
Public bat0_sup As batiment_sup




Donc avec vos remarques j'en déduit que je devais faire ceci mais cela ne fonctionne toujours pas j'ai la même erreur au même endroit

'Déclaration et initialisation des structures batiments
Dim i As Integer
'boucle initialisation
ReDim bat0_sup.locals(1)
ReDim bat0_aut.locals(1)
ReDim bat0_aut.locals.arms(1)
For i = 1 To 2
ReDim bat0_sup.locals(1).dataTab(i)
ReDim bat0_aut.locals(1).arms(1).dataTab(i)
bat0_sup.locals(1).dataTab(i).localisation = "0"
bat0_sup.locals(1).dataTab(i).type_sup = "0"
bat0_sup.locals(1).dataTab(i).ipAddr = "0"
bat0_sup.locals(1).dataTab(i).numLicense = "0"
bat0_sup.locals(1).dataTab(i).memPhi = "0"
bat0_sup.locals(1).dataTab(i).dateAcqui = "0"
bat0_sup.locals(1).dataTab(i).dd = "0"
bat0_sup.locals(1).dataTab(i).os = "0"
bat0_sup.locals(1).dataTab(i).resEcran = "0"
bat0_sup.locals(1).dataTab(i).printer = "0"
bat0_aut.locals(1).arms(1).dataTab(i).type = "0"
bat0_aut.locals(1).arms(1).dataTab(i).ip = "0"
bat0_aut.locals(1).arms(1).dataTab(i).tension = "0"
bat0_aut.locals(1).arms(1).dataTab(i).obs = "0"
Next i

'Gestion du nombre de batiments
bat0_sup.id = 1
bat0_aut.id = 1

0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
27 nov. 2013 à 17:53
Bonjour,
J'aurai du complete mon info hier.
Dans le cas de definition par type, vous devez definir directement vos tableaux, le redim ne marche pas. Exemple ci-dessous

Option Base 1
Type dataTab_sup
localisation As String
type_sup As String
ipAddr As String
numLicense As String
memPhi As String
dateAcqui As String
dd As String
os As String
resEcran As String
printer As String
End Type
Type local_sup
dataTab(2) As dataTab_sup
End Type
Type batiment_sup
id As Integer
locals(2) As local_sup
End Type

'Structures pour l'automation

Type dataTab_aut
type As String
ip As String
tension As String
obs As String
End Type
Type armoire
dataTab(2) As dataTab_aut
End Type
Type local_aut
arms(2) As armoire
End Type
Type batiment_aut
locals(2) As local_aut
End Type
Public bat0_aut As batiment_aut
Public bat0_sup As batiment_sup

Sub test()
'Déclaration et initialisation des structures batiments
Dim i As Integer
'boucle initialisation
For i = 1 To 2
bat0_sup.locals(1).dataTab(i).localisation = "0"
bat0_sup.locals(1).dataTab(i).type_sup = "0"
bat0_sup.locals(1).dataTab(i).ipAddr = "0"
bat0_sup.locals(1).dataTab(i).numLicense = "0"
bat0_sup.locals(1).dataTab(i).memPhi = "0"
bat0_sup.locals(1).dataTab(i).dateAcqui = "0"
bat0_sup.locals(1).dataTab(i).dd = "0"
bat0_sup.locals(1).dataTab(i).os = "0"
bat0_sup.locals(1).dataTab(i).resEcran = "0"
bat0_sup.locals(1).dataTab(i).printer = "0"
bat0_aut.locals(1).arms(1).dataTab(i).type = "0"
bat0_aut.locals(1).arms(1).dataTab(i).ip = "0"
bat0_aut.locals(1).arms(1).dataTab(i).tension = "0"
bat0_aut.locals(1).arms(1).dataTab(i).obs = "0"
Next i

'Gestion du nombre de batiments
bat0_sup.id = 1
bat0_aut.id = 1

End Sub
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
28 nov. 2013 à 07:44
je ne connais pas le nombre de cases que comportera le tableau à l'avance comment faire ?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
28 nov. 2013 à 07:48
Bonjour,

En utilisant une variable qui servira d'index du tableau et de redimensionner le tableau au fur et à mesure avec l'instruction:
ReDim Preserve monTab(index)
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
28 nov. 2013 à 08:00
ça je le met où dans le code ? dans le Type ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
28 nov. 2013 à 09:31
Bonjour Polux31,

pour des variable de type Type end type, sauf erreur de ma part le redim ne marche pas, je vais reverifie quand meme


winflow:

En attendant, vous pouvez dimensionner vos tableaux dans le définitions Type end Type a des valeurs 1000 ou plus, ça ne dérange pas.
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
28 nov. 2013 à 09:58
C'est pas très propre mais si j'ai pas le choix ....
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
28 nov. 2013 à 10:14
Re,

J'ai trouve, ce n'est pas le redim qui pose probleme, c'est vos declarations de variables. J'ai retester redim sur des declarations de variable type end type et ca marche (heureusement, c'est fait pour). Je regarde de plus pres vos declarations de variables type, il faut peut-etre simplifie.

A+
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
28 nov. 2013 à 10:17
Bonjour Polux31,

le redim sur des variables declarees par des type end type c'est OK, pour winflow le probleme vient des declarations de variable
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
28 nov. 2013 à 10:36
c'est quoi le problème dans mes déclarations dans ce cas ?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
28 nov. 2013 à 19:20
Bonsoir F894009,

J'ai déjà employé cette forme, mais en fait ce n'est pas la structure, qui est un Type de variable, que l'on redimensionne mais le tableau du type de la structure.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
29 nov. 2013 à 09:44
Bonjour Polux31,

Sur une déclaration simple, c'est ok, mais la c'est une succession de définition en tableaux (trois niveaux). C'est la seule solution que j'ai trouve, parce qu'en général dans ce genre de définition type end type les dimensions des tableaux sont écrites directement (c'est ce que je fais).

Bye
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
28 nov. 2013 à 11:00
Re,

Une variable declaree en double dataTab() dans local_sup et armoire

pas de simplification, redim en boucle pour redimensionner les tableaux (un peu curieux, mais ca marche)

code modifie: j'ai fait des boucle pour tester le remplissage des tableaux, y a pas d'erreur

Option Base 1

Type dataTab_sup
localisation As String
type_sup As String
ipAddr As String
numLicense As String
memPhi As String
dateAcqui As String
dd As String
os As String
resEcran As String
printer As String
End Type

Type local_sup
dataTab() As dataTab_sup
End Type

Type batiment_sup
nb As Integer
locals() As local_sup
End Type

Public bat0_sup As batiment_sup

'Structures pour l'automation
Type dataTab_aut
type As String
ip As String
tension As String
obs As String
End Type
'Attention au declaration de variables identiques
'Type armoire
' dataTab() As dataTab_aut ------>local_sup
'End Type

Type armoire
dataTab_A() As dataTab_aut
End Type

Type local_aut
arms() As armoire
End Type

Type batiment_aut
locals() As local_aut
End Type

Public bat0_aut As batiment_aut


Sub test()
'Déclaration et initialisation des structures batiments
Dim i As Integer
'boucle initialisation

i = 2

ReDim Preserve bat0_sup.locals(i)
ReDim Preserve bat0_aut.locals(i)

For x = 1 To i
ReDim Preserve bat0_sup.locals(x).dataTab(i)
ReDim Preserve bat0_aut.locals(x).arms(i)
Next x

For x = 1 To i
For y = 1 To i
ReDim Preserve bat0_aut.locals(x).arms(y).dataTab_A(i)
Next y, x

For i = 1 To 2
For j = 1 To 2
bat0_sup.locals(i).dataTab(j).localisation = "0"
bat0_sup.locals(i).dataTab(j).type_sup = "0"
bat0_sup.locals(i).dataTab(j).ipAddr = "0"
bat0_sup.locals(i).dataTab(j).numLicense = "0"
bat0_sup.locals(i).dataTab(j).memPhi = "0"
bat0_sup.locals(i).dataTab(j).dateAcqui = "0"
bat0_sup.locals(i).dataTab(j).dd = "0"
bat0_sup.locals(i).dataTab(j).os = "0"
bat0_sup.locals(i).dataTab(j).resEcran = "0"
bat0_sup.locals(i).dataTab(j).printer = "0"
For k = 1 To 2
bat0_aut.locals(i).arms(j).dataTab_A(k).type = "0"
bat0_aut.locals(i).arms(j).dataTab_A(k).ip = "0"
bat0_aut.locals(i).arms(j).dataTab_A(k).tension = "0"
bat0_aut.locals(i).arms(j).dataTab_A(k).obs = "0"
Next k, j, i

'Gestion du nombre de batiments
'bat0_sup.ID = 1
'bat0_aut.ID = 1


'J 'ai l'appel de fonction suivant :

'Call add_elem("bat", "sup", ligFinSup)


End Sub

'J 'ai la fonction suivante l'erreur se situe dans l'instruction dans le if :
Private Function add_elem(elem As String, part As String, endSup As Integer)
If elem = "bat" And part = "sup" Then
MsgBox (bat0_sup.locals(1).dataTab(1).localisation)
End If


End Function

A+
-1
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
28 nov. 2013 à 13:35
dans ce cas même problème avec locals que j'ai remplacé par local_s et local_a même chose effectivement pour dataTab dataTab_s et dataTab_a. il n'y a qu'une seule armoire qu'un seul local donc on aurait le code suivant :


'Redimensionnement des tableaux
For x = 1 To i
ReDim Preserve bat0_sup.local_s(x).dataTab_s(i)
ReDim Preserve bat0_aut.local_a(x).arms(x).dataTab_a(i)
Next x
'Initialisation des structures
For j = 1 To 2
bat0_sup.local_s(1).dataTab_s(j).localisation = "0"
bat0_sup.local_s(1).dataTab_s(j).type_sup = "0"
bat0_sup.local_s(1).dataTab_s(j).ipAddr = "0"
bat0_sup.local_s(1).dataTab_s(j).numLicense = "0"
bat0_sup.local_s(1).dataTab_s(j).memPhi = "0"
bat0_sup.local_s(1).dataTab_s(j).dateAcqui = "0"
bat0_sup.local_s(1).dataTab_s(j).dd = "0"
bat0_sup.local_s(1).dataTab_s(j).os = "0"
bat0_sup.local_s(1).dataTab_s(j).resEcran = "0"
bat0_sup.local_s(1).dataTab_s(j).printer = "0"
bat0_aut.local_a(1).arms(1).dataTab_a(j).type = "0"
bat0_aut.local_a(1).arms(1).dataTab_a(j).ip = "0"
bat0_aut.local_a(1).arms(1).dataTab_a(j).tension = "0"
bat0_aut.local_a(1).arms(1).dataTab_a(j).obs = "0"
Next j


Qui ne fonctionne pas ...
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
28 nov. 2013 à 14:26
Re,

Avez-vous regarde le code que j'ai utilise pour redimensionner les tableaux !!!!!!!!!!!
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
28 nov. 2013 à 14:33
Oui mais votre code comporte plusieurs armoires et plusieurs locals tant dit qu'il y a 1 armoire et un local donc le code se simplifie en celui que j'ai posté précédemment
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 702
28 nov. 2013 à 14:46
Re,
s'il n'y a qu'un local et une armoire, pourquoi vous utilisez des tableaux ?????
0
winflow Messages postés 156 Date d'inscription mercredi 7 avril 2010 Statut Membre Dernière intervention 17 mars 2015 22
28 nov. 2013 à 14:50
parce que ce sont les deux structures de base... Par la suite, j'utiliserais les types défini convenablement pour le moment je voulais savoir comment avoir accès à justement une donnée de cette structure de base ...
0