égalité entre deux types d'une meme variable

Résolu
liz739 Messages postés 21 Date d'inscription mercredi 28 décembre 2011 Statut Membre Dernière intervention 30 décembre 2011 - 28 déc. 2011 à 10:39
liz739 Messages postés 21 Date d'inscription mercredi 28 décembre 2011 Statut Membre Dernière intervention 30 décembre 2011 - 28 déc. 2011 à 14:45
Bonjour,
j'explique un peu mon problème :

c'est un logiciel dans lequel on rentre les données d'une voiture et j'ai 4boutons :
quand on appuie sur un bouton entretien les opérations realtives doivent s'inscrire dans une listbox1 (op de maintenace)
... tenue de route ...
... freinage ...
... échappement ...

soit :
- dans le userform :

Private Sub CommandButton1_Click()
UserForm1.ListBox1.Clear
Call charger_ope_entretien
End Sub
__________________________________
Private Sub CommandButton2_Click()
UserForm1.ListBox1.Clear
Call charger_ope_tenue
End Sub
____________________________________
Private Sub CommandButton3_Click()
UserForm1.ListBox1.Clear
Call charger_ope_freinage
End Sub
__________________________________
Private Sub CommandButton4_Click()
UserForm1.ListBox1.Clear
Call charger_ope_echappement
End Sub

- dans le module :

Type operation
NomOpe As String
Cout As Single
temps As Single
End Type

Public fichier(30) As donnees
Public taille As Integer
Public entretien(10) As operation
Public tenue_de_route(4) As operation
Public freinage As operation
Public Echappement As operation
____________________________________
Public Sub charger_ope_entretien()
entretien(0).NomOpe = "vidange"
entretien(1).NomOpe = "climatisation"
entretien(2).NomOpe = "filtre à huile"
entretien(3).NomOpe = "filtre à air"
entretien(4).NomOpe = "niv. lave glace"
entretien(5).NomOpe = "niv. liq. refroidissement"
entretien(6).NomOpe = "niv. liq. direction assistée"
entretien(7).NomOpe = "controle essuie-glaces"
entretien(8).NomOpe = "eclairage"
entretien(9).NomOpe = "nettoyage"

entretien(0).Cout = 10
entretien(1).Cout = 5
entretien(2).Cout = 8
entretien(3).Cout = 20
entretien(4).Cout = 15
entretien(5).Cout = 17
entretien(6).Cout = 10
entretien(7).Cout = 15
entretien(8).Cout = 15
entretien(9).Cout = 12

entretien(0).temps = 0.5
entretien(1).temps = 0.5
entretien(2).temps = 0.2
entretien(3).temps = 0.2
entretien(4).temps = 0.1
entretien(5).temps = 0.1
entretien(6).temps = 0.1
entretien(7).temps = 0.2
entretien(8).temps = 0.5
entretien(9).temps = 1

UserForm1.ListBox1.Clear

For i = 0 To 9

UserForm1.ListBox1.AddItem (entretien(i).NomOpe)

Next

End Sub
__________________________________________
Public Sub charger_ope_tenue()
tenue_de_route(0).NomOpe = "changement pneus"
tenue_de_route(1).NomOpe = "pression pneus"
tenue_de_route(2).NomOpe = "changement amortisseurs"
tenue_de_route(3).NomOpe = "changement cardans"

tenue_de_route(0).Cout = 5
tenue_de_route(1).Cout = 10
tenue_de_route(2).Cout = 15
tenue_de_route(3).Cout = 20

tenue_de_route(0).temps = 0.5
tenue_de_route(1).temps = 0.1
tenue_de_route(2).temps = 1
tenue_de_route(3).temps = 2

UserForm1.ListBox1.Clear

For i = 0 To 4

UserForm1.ListBox1.AddItem (tenue_de_route(i).NomOpe)

Next

End Sub
_____________________________________________
Public Sub charger_ope_freinage()
freinage.NomOpe = "réparation générale"

freinage.Cout = 15

freinage.temps = 1.5

UserForm1.ListBox1.Clear
UserForm1.ListBox1.AddItem (freinage.NomOpe)

End Sub
____________________________________________
Public Sub charger_ope_echappement()
Echappement.NomOpe = "réparation générale"

Echappement.Cout = 15

Echappement.temps = 1.5

UserForm1.ListBox1.Clear
UserForm1.ListBox1.AddItem (Echappement.NomOpe)


Puis quand on appuie sur un bouton ajouter une opération, l'opération de maintenace sélectionnée dans la listbox1 doit s'inscrire dans la listbox2 (coût), soit :
- dans la userform :

Private Sub CommandButton5_Click()
Call ajout_ope
End Sub

- dans le module :

Public Sub ajout_ope()
UserForm1.ListBox2.AddItem (UserForm1.ListBox1.Value)
End Sub


jusque là, c'est bon mais il faut aussi que le coût et le temps associés soit inscrit respectivement dans la listbox3 (coût) et la listbox4 (temps). on doit utiliser ce qui a été préparé avant je pense (charger_ope_entretien/tenue/freinage/echappement) mais je ne sais pas comment associé le NomOpe, le cout et le temps de chaque variable.

pour l'échappement j'ai fait ainsi : (et de meme pour le freinage)

If UserForm1.ListBox1.Value = Echappement.NomOpe Then
UserForm1.ListBox3.AddItem (Echappement.Cout)
UserForm1.ListBox4.AddItem (Echappement.temps)
End If

mais avec l'entretien et la tenue de route je n'arrive pas a associer les differents niveaux c-à-d :
quand tenue_de_route(3).NomOpe s'affiche dans la listbox2 c'est tenue_de_route(3).Cout qui s'affiche dans la listbox3 et tenue_de_route(3).temps qui s'affiche dans la listbox4.

voilou, j'ai essayé d'êre le plus complet possible

dans l'attente d'une réponse assez rapide, bonne journée !
et merci d'avance

liz739

10 réponses

cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
28 déc. 2011 à 11:30
bonjour

cout et temps sont des single
pour les ajouter aux listbox ajouter une conversion de type vers string : Cstr

UserForm1.ListBox3.AddItem Cstr(Echappement.Cout)
UserForm1.ListBox4.AddItem Cstr(Echappement.temps)
3
liz739 Messages postés 21 Date d'inscription mercredi 28 décembre 2011 Statut Membre Dernière intervention 30 décembre 2011
28 déc. 2011 à 10:42
ça pourrait ressembler à ça :
UserForm1.ListBox2.AddItem (UserForm1.ListBox1.Value)

If UserForm1.ListBox1.Value = entretien(x).NomOpe Then
UserForm1.ListBox3.AddItem (entretien(x).Cout)

End If

mais le x est faux et je ne sais pas comment faire... :(

liz739
0
liz739 Messages postés 21 Date d'inscription mercredi 28 décembre 2011 Statut Membre Dernière intervention 30 décembre 2011
28 déc. 2011 à 12:03
merci mais je ne comprend pas la fonction de conversion Cstr
0
liz739 Messages postés 21 Date d'inscription mercredi 28 décembre 2011 Statut Membre Dernière intervention 30 décembre 2011
28 déc. 2011 à 12:16
je crois que c'est tout bon !!
Merci beaucoup pour votre aide.
0

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

Posez votre question
liz739 Messages postés 21 Date d'inscription mercredi 28 décembre 2011 Statut Membre Dernière intervention 30 décembre 2011
28 déc. 2011 à 12:29
ah non...
0
liz739 Messages postés 21 Date d'inscription mercredi 28 décembre 2011 Statut Membre Dernière intervention 30 décembre 2011
28 déc. 2011 à 13:15
Avec celà :
Public Sub ajout_ope()
A1 = CStr(entretien(i).NomOpe)
A2 = CStr(tenue_de_route(i).NomOpe)

If UserForm1.ListBox1.Value = entretien(i).NomOpe Then
UserForm1.ListBox2.AddItem (UserForm1.ListBox1.Value)
UserForm1.ListBox3.AddItem CStr(entretien(i).Cout)
UserForm1.ListBox4.AddItem CStr(entretien(i).temps)

ElseIf UserForm1.ListBox1.Value = A2 Then
UserForm1.ListBox2.AddItem (UserForm1.ListBox1.Value)
UserForm1.ListBox3.AddItem CStr(tenue_de_route(i).Cout)
UserForm1.ListBox4.AddItem CStr(tenue_de_route(i).temps)

ElseIf UserForm1.ListBox1.Value = freinage.NomOpe Then
UserForm1.ListBox2.AddItem (UserForm1.ListBox1.Value)
UserForm1.ListBox3.AddItem (freinage.Cout)
UserForm1.ListBox4.AddItem (freinage.temps)

ElseIf UserForm1.ListBox1.Value = Echappement.NomOpe Then
UserForm1.ListBox2.AddItem (UserForm1.ListBox1.Value)
UserForm1.ListBox3.AddItem (Echappement.Cout)
UserForm1.ListBox4.AddItem (Echappement.temps)

End If

le freinage et l'échappement fonctionne toujours mais pour l'entretien et la tenue de route seuls les (1) fonctionnent.
une idee ? (je ne connaissais pas cette fonction avant)
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
28 déc. 2011 à 14:16
A essayer, Normalement avec un Single on utiliserait plutot CSng (ce serait logique)

si les (1) sont les paramètres temps
essayer = CSng(temps) plutot que CStr(temps)
0
liz739 Messages postés 21 Date d'inscription mercredi 28 décembre 2011 Statut Membre Dernière intervention 30 décembre 2011
28 déc. 2011 à 14:23
il n'y a toujours que les premières lignes correspondant à la vidange : entretien(0).NomOpe alors qu'il y a 10 variante de entretien.nomope
et le changement pneus : tenue_de_route(0).NomOpe alors qu'il y a 4 variantes de tenue_de_route.nomope
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
28 déc. 2011 à 14:35
Cela devient difficile sans avoir
1- le message d'erreur exact
2- le listing complet et le numéro de ligne en erreur

Moi je ne pense pas que c'est à cause du dimensionnement en tableau des 2 variables "entretien", et "tenue_de_route" que tu as une erreur, elles sont du type opération

Dans le type opération , si tu remplace single par String, peut-être n'auras tu plus d'erreur et tu pourras enlever les conversions de type Cstr et Csng
0
liz739 Messages postés 21 Date d'inscription mercredi 28 décembre 2011 Statut Membre Dernière intervention 30 décembre 2011
28 déc. 2011 à 14:45
ça ne change rien, je pense plutot que cela vienne des i dans :
Public Sub ajout_ope()
A1 = CStr(entretien(i).NomOpe)
If UserForm1.ListBox1.Value = A1 Then
UserForm1.ListBox2.AddItem (UserForm1.ListBox1.Value)
UserForm1.ListBox3.AddItem CSng(entretien(i).Cout)
UserForm1.ListBox4.AddItem CSng(entretien(i).temps)

car pour la 1° ligne de la listbox 1 (ligne que l'on sélectionne pour ajouter aux listbox 2,3 et 4) ça fonctionne soit pour entretien(0).NomOpe mais pour les autres (jusqu'à 9)

je saurais envoyer une image je pourrais p-e mieux expliquer avec un visuel...
0