Erreur 9

Résolu
winflow Messages postés 179 Statut Membre -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
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,
--
Cordialement

Winflow

5 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
    1. winflow Messages postés 179 Statut Membre 22
       
      le message d'erreur dit l'indice ne correspond pas à la sélection. Autant pour moi c'est nb au lieu de id
      0
    2. winflow Messages postés 179 Statut Membre 22
       
      j'ai mis Option Base 1 au début de la feuille de calcul
      0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. winflow Messages postés 179 Statut Membre 22
       
      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
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
    3. winflow Messages postés 179 Statut Membre 22
       
      je ne connais pas le nombre de cases que comportera le tableau à l'avance comment faire ?
      0
    4. Polux31 Messages postés 7219 Statut Membre 1 204
       
      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
    5. winflow Messages postés 179 Statut Membre 22
       
      ça je le met où dans le code ? dans le Type ?
      0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. winflow Messages postés 179 Statut Membre 22
       
      C'est pas très propre mais si j'ai pas le choix ....
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. winflow Messages postés 179 Statut Membre 22
       
      c'est quoi le problème dans mes déclarations dans ce cas ?
      0
    2. Polux31 Messages postés 7219 Statut Membre 1 204
       
      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
    3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    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
    1. winflow Messages postés 179 Statut Membre 22
       
      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
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Avez-vous regarde le code que j'ai utilise pour redimensionner les tableaux !!!!!!!!!!!
      0
    3. winflow Messages postés 179 Statut Membre 22
       
      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
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      s'il n'y a qu'un local et une armoire, pourquoi vous utilisez des tableaux ?????
      0
    5. winflow Messages postés 179 Statut Membre 22
       
      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