2 tableaux associés sans raison

Résolu
cs_ricolabrico Messages postés 4 Date d'inscription vendredi 18 juin 2010 Statut Membre Dernière intervention 10 mai 2011 - 9 mai 2011 à 13:26
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 10 mai 2011 à 09:57
Bonjour amis programmeurs

J'ai un problème de tableau . J'ai une tableau (déclaré comme variable globale) que j'utilise lors d'un appel de fonction or sa valeur est modifiée alors qu'il n'y a pas de raisons:
voila le code:


Dim datavoies(7, 100) As Integer

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim datavoiestemp(7, 100) As Integer
datavoiestemp = passebas(datavoies)

End Sub

Private Function passebas(ByVal datavoiesautre)

For i = 1 To numdata - 1
datavoiesautre(1, i) = 1
Next

Return datavoiesautre

End Function


Oui l'utilité de ce code présenté comme ça est douteuse mais je l'ai simplifié pour la clarté mais l'architecture est identique.
Datavoiestemp prend bien les valeurs de datavoiesautre (normal!) en utilisant les valeurs de datavoies. MAIS POURQUOI datavoies EST IL MODIFIE? c'est la premiere fois que cela m 'arrive et cela me dépasse, j'ai pourtant bien mis byval dans la fonction.

Dim datavoiestemp(7, 100) As Integer
datavoiestemp=datavoies
datavoiestemp = passebas(datavoiestemp)
Cette forme donne le même résultats.

2 tableaux peuvent ils etre liés? Associés?

10 réponses

Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
9 mai 2011 à 16:19
Bonjour,

Vérifier la documentation avant de commencer à ré-inventer la roue ça peut être bien aussi :

Méthodes statiques Copy de la classe Array (4 surcharges)
Méthodes d'instance CopyTo de la classe Array (2 surcharges)

Cordialement !
3
cs_ricolabrico Messages postés 4 Date d'inscription vendredi 18 juin 2010 Statut Membre Dernière intervention 10 mai 2011
9 mai 2011 à 13:43
essayez ça , c'est pareil:

Public Class Form1
Dim datavoies() As Integer = {3, 3, 4, 4, 4, 5, 6, 6}


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim datavoiestemp() As Integer
datavoiestemp = passebas(datavoies)
End Sub



Private Function passebas(ByVal datavoiesautre)

For i = 0 To 4
datavoiesautre(i) = 1
Next

Return datavoiesautre

End Function
End Class
0
eccsup Messages postés 77 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 14 novembre 2022
9 mai 2011 à 13:46
Salut,

En vbNet, l'affectation d'objet(checkBox, comboBox, tableaux...) se fait par reference, C'est a dire que si tu fait
monDeuxiemeTableau = monPremierTableau (et c'est le Cas ici), tu n'aura non pas deux tableau dans deux zones de memoires distincte, mais un seul tableau qui aura en fait deux noms différents...

Voila pourquoi, meme si tu utilise byVal, ton deuxieme tableau modifie la valeur de ton premier.


J'espère avoir été claire, bonne chance pour la suite.
0
eccsup Messages postés 77 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 14 novembre 2022
9 mai 2011 à 13:55
Normalement, ceci devrait marcher:

Private function passebas(byval datavoiesautres)

dim temp as Integer(datavoiesautres.length)
For i = 0 to 4
temp(i) = 1
Next
For i = 5 to dataVoiesautres.length - 1
temp(i) = dataVoiesautres(i)
next
return temp
end function
0

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

Posez votre question
cs_ricolabrico Messages postés 4 Date d'inscription vendredi 18 juin 2010 Statut Membre Dernière intervention 10 mai 2011
9 mai 2011 à 15:09
merci pour ces informations, je ne savais pas que tableau1=tableau2 associait le même tableau à deux nom différents.
Je suis pas sur que l'exemple proposé resolve mon problème.
En réalité, j'effectue un filtrage de données sur le tableau mais si le filtrage n'est pas concluant, il faut pouvoir retourner aux données d'origines. Voila pourquoi je voulais "archiver" les données d'origines, travailler sur une copie temporaire, si le filtre est bon, copier le temporaire dans l'archive, si le filtre n'est pas bon, garder l'archive du départ....
Il faut savoir que le tableau est trés long (mais c'est un détail)

Donc comment faire un nouveau tableau dans un nouvel espace mémoire avec un nouveau nom en copiant un premier tableau? un new quelquechose (comme un objet?)

Merci pour vos solutions
0
eccsup Messages postés 77 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 14 novembre 2022
9 mai 2011 à 15:45
Je te conseille de faire une fonction personnalisée de copie:
Private function copyTab(byval tableau)

dim Copie as Object

For i = 0 to tableau.length - 1
copie(i) = tableau(i)
Next

return temp
end function


ensuite tu affecte le resultat de cette fonction a ton tableau temporaire, et tu peut travailler dessus sans probleme:

Dim tabTemp = copyTab(dataVoies)
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
9 mai 2011 à 18:55
Bonjour,

Je me joint à la discussion sur un point de détail, mais qui a toute son importance :

Private function passebas(byval datavoiesautres)


TOUJOURS mettre Option Strict et Option Explicit à On.

Mon site
0
cs_ricolabrico Messages postés 4 Date d'inscription vendredi 18 juin 2010 Statut Membre Dernière intervention 10 mai 2011
10 mai 2011 à 00:34
Merci pour tout, ca fonctionne
aprés strict sur on , j ai 102 erreurs
je suis bon pour une petite demi heure pour rendre mon code plus académique
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
10 mai 2011 à 09:29
Bonjour,

Et oui, cela permet de faire un code plus fiable :)

Note : la 102ième erreur est souvent "Trop d'erreur pour en afficher plus" ;)

Bonne programmation :)

Mon site
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
10 mai 2011 à 09:57
Cela me rappelle la dictée à l'école
les cancres
note 0/20
40 fautes au moins
0
Rejoignez-nous