Problème d'affectation de structure

Résolu
cs_kazouu Messages postés 4 Date d'inscription vendredi 15 avril 2011 Statut Membre Dernière intervention 18 avril 2011 - 15 avril 2011 à 11:06
cs_kazouu Messages postés 4 Date d'inscription vendredi 15 avril 2011 Statut Membre Dernière intervention 18 avril 2011 - 18 avril 2011 à 11:33
Bonjour à tous,

Je suis actuellement en stage et je travaille sur un logiciel simulant les orbites de satellites, leur couverture etc.
Une structure CSatellite a donc été créée contenant plusieurs attributs. Mon problème apparaît lorsque je souhaite affecter dans une variable un satellite déjà existant à l'aide d'une fonction getsat. En effet lors de l'affectation je me retrouve avec ma variable sattest qui contient "Nothing" alors que le satellite demandé existe.

Est-ce qu'il y aurait une manière spécifique de faire une telle affectation ?

méthode getsat:
Public Function getsat(satid As Integer) As CSatellite
    Dim i As Integer
    Set getsat = Nothing
    If SATELLITES(0) Is Nothing Then Exit Function
    For i = 0 To UBound(SATELLITES)
        If SATELLITES(i).satid = satid Then
            Set getsat = SATELLITES(i)
            Exit For
        End If
    Next i
End Function


l'affectation:
Dim sattest As CSatellite
sattest = getsat(1)


A noter que SATELLITES() est un tableau de satellites et le satellite dont l'id est 1 existe dans ce tableau.

Merci d'avance pour votre aide et bonne journée à tous.

PS: Si la méthode de codage n'est pas très "propre", c'est tout à fait normal, ce code est issu de multiples migrations depuis un code original fait par un non-informaticien.

4 réponses

cs_kazouu Messages postés 4 Date d'inscription vendredi 15 avril 2011 Statut Membre Dernière intervention 18 avril 2011
18 avril 2011 à 11:33
Bon ben c'est bon problème résolu, il suffisait de mettre un Set devant l'affectation su getsat() ...

Set sattest = getsat(1)


Tout ça pour ça, vivement la fin de la migration vers VB.NET.

Merci quand même pour ta réponse.
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 avril 2011 à 11:48
Salut

Comment est défini ta structure ?
A mon avis, ce test est incorrect : If SATELLITES(0) Is Nothing
Un élément de structure ne peut pas être Nothing (réservé aux objets)
C'est surement ça qui bloque ta recherche si, par hasard, tu as un méchant "On Error Resume Next" qui traine quelque par (à bannir absolument et à n'utiliser que dans des cas où tu t'attends à ce que l'instruction qui suit puisse générer une erreur puis, aussitôt après, remettre un "On Error Goto 0" pour annuler le Resume automatique qui masque tout, y compris les erreurs qui te permettraient de debuguer toi même).

Supprime donc ce test, il ne sert à rien, et modifie ta boucle :
For i = LBound(SATELLITES) To UBound(SATELLITES)

Pense au débogage pour suivre ce que ton programme fait :
- F9 sur une ligne de code
Le programme s'y arrêtera au prochain passage
Survole avec la souris tes variables pour visualiser leur contenu, ou va dans la fenêtre de debogage (Ctrl-G) et tape
? maVariable
pour qu'elle s'inscrive dans la fenêtre.
- F8 (VB6) ou F10 (.Net) pour avancer d'une ligne de code
- F5 pour continuer normalement

Vala
Jack, =fr MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_kazouu Messages postés 4 Date d'inscription vendredi 15 avril 2011 Statut Membre Dernière intervention 18 avril 2011
15 avril 2011 à 13:37
Merci pour la rapidité de ta réponse,

j'ai enlevé le if et modifié le for, j'ai aussi modifié les 4 "On Error Resume Next" qui traînaient. Mais l'erreur apparaît toujours, il me dit que la variable objet ou la variable bloc With est non définie.

Avec la touche F8 j'ai suivi le programme, il passe dans la boucle une première fois mais pas dans le if, normal. Au second passage, il passe dans le if, passe la ligne de l'affectation, sort de la boucle, mais au final la variable sattest contient "Nothing".

Voilà le début de la déclaration de CSatellite:
Option Explicit

' Data that belongs in the DB
'* @brief ID of the satellite (IDSat)
Private id As Integer
'* @brief Name of the satellite (Name)
Private name As String
'* @brief constellation or nothing
Private cons As CConstellation
'* @brief Propagator of the satellite (Propagator)
Private Propagator As String
'* @brief Color of the satellite
Private color As Long
'* @brief Forward and backward tracksize of the satellite (ForwardTrackSize, BackTrackSize)
Private fTrackSize As Integer
Private bTrackSize As Integer
'* @brief Display of the satellite is active? (blnFootprint)
Private footprint As Boolean

' New data for the DB
'* @brief Primary direction in words
Private primDir As String
'* @brief Primary axis ("x", "y", "z", "-x", "-y", "-z")
Private primAxis As String
'* @brief Reference to the satellite for the primary direction
Private primConToSat As CSatellite
'* @brief Reference to the groundstation for the primary direction
Private primConToSta As CGroundstation
'* @brief Satellite model name
Public modelName As String

'* @brief Collection of antennas
Private antennas As Collection
'* @brief Collection of accessories
Private accessories As Collection

'* @brief Secondary direction in words
Private secDir As String
'* @brief Primary axis ("x", "y", "z", "-x", "-y", "-z")
Private secAxis As String
'* @brief Reference to the satellite for the secondary direction
Private secConToSat As CSatellite
'* @brief Reference to the groundstation for the secondary direction
Private secConToSta As CGroundstation

' Calculated data
'* @brief Time of the data
Private simTime As Double
'* @brief position of the satellite
Private satPos As New CVector
'* @brief current velocity
Private satVel As New CVector
'* @brief old orbit
Private satOldOrbit As tOrbit
'* @brief new orbit
Private satNewOrbit As tOrbit
'* @brief geodetic position
Private GeodeticPos As tLonLat
'* @brief Are the satPos, satVel, satOldOrbit, satNewOrbit and geodesicPos up to date?
Private calculated1 As Boolean
'* @brief Calculated direction of the x-axis
Private X As New CVector
'* @brief Calculated direction of the y-axis
Private Y As New CVector
'* @brief Calculated direction of the z-axis
Private Z As New CVector
'* @brief Are x, y and z up to date?
Private calculated2 As Boolean
0
cs_kazouu Messages postés 4 Date d'inscription vendredi 15 avril 2011 Statut Membre Dernière intervention 18 avril 2011
15 avril 2011 à 13:45
J'ai oublié de préciser, la plupart des attributs possèdent un Public Property, de ce que j'en ai compris ça permet de passer de l'attribut id à satid (sûrement pour aider à la compréhension entre les id des autres structures).
Les structures sont déclarées dans des .cls et un ami m'a dit que c'était peut être problématique de déclarer des classes et donc de faire de l'objet alors que c'est sur du VB6.
0
Rejoignez-nous