égalité entre deux types d'une meme variable [Résolu]

liz739 21 Messages postés mercredi 28 décembre 2011Date d'inscription 30 décembre 2011 Dernière intervention - 28 déc. 2011 à 10:39 - Dernière réponse : liz739 21 Messages postés mercredi 28 décembre 2011Date d'inscription 30 décembre 2011 Dernière intervention
- 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
Afficher la suite 

Votre réponse

10 réponses

cs_loulou69 672 Messages postés mercredi 22 janvier 2003Date d'inscription 2 juin 2016 Dernière intervention - 28 déc. 2011 à 11:30
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_loulou69
liz739 21 Messages postés mercredi 28 décembre 2011Date d'inscription 30 décembre 2011 Dernière intervention - 28 déc. 2011 à 10:42
0
Utile
ç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
Commenter la réponse de liz739
liz739 21 Messages postés mercredi 28 décembre 2011Date d'inscription 30 décembre 2011 Dernière intervention - 28 déc. 2011 à 12:03
0
Utile
merci mais je ne comprend pas la fonction de conversion Cstr
Commenter la réponse de liz739
liz739 21 Messages postés mercredi 28 décembre 2011Date d'inscription 30 décembre 2011 Dernière intervention - 28 déc. 2011 à 12:16
0
Utile
je crois que c'est tout bon !!
Merci beaucoup pour votre aide.
Commenter la réponse de liz739
liz739 21 Messages postés mercredi 28 décembre 2011Date d'inscription 30 décembre 2011 Dernière intervention - 28 déc. 2011 à 12:29
0
Utile
ah non...
Commenter la réponse de liz739
liz739 21 Messages postés mercredi 28 décembre 2011Date d'inscription 30 décembre 2011 Dernière intervention - 28 déc. 2011 à 13:15
0
Utile
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)
Commenter la réponse de liz739
cs_loulou69 672 Messages postés mercredi 22 janvier 2003Date d'inscription 2 juin 2016 Dernière intervention - 28 déc. 2011 à 14:16
0
Utile
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)
Commenter la réponse de cs_loulou69
liz739 21 Messages postés mercredi 28 décembre 2011Date d'inscription 30 décembre 2011 Dernière intervention - 28 déc. 2011 à 14:23
0
Utile
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
Commenter la réponse de liz739
cs_loulou69 672 Messages postés mercredi 22 janvier 2003Date d'inscription 2 juin 2016 Dernière intervention - 28 déc. 2011 à 14:35
0
Utile
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
Commenter la réponse de cs_loulou69
liz739 21 Messages postés mercredi 28 décembre 2011Date d'inscription 30 décembre 2011 Dernière intervention - 28 déc. 2011 à 14:45
0
Utile
ç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...
Commenter la réponse de liz739

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.