égalité entre deux types d'une meme variable

Résolu
Signaler
Messages postés
21
Date d'inscription
mercredi 28 décembre 2011
Statut
Membre
Dernière intervention
30 décembre 2011
-
Messages postés
21
Date d'inscription
mercredi 28 décembre 2011
Statut
Membre
Dernière intervention
30 décembre 2011
-
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

Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
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)
Messages postés
21
Date d'inscription
mercredi 28 décembre 2011
Statut
Membre
Dernière intervention
30 décembre 2011

ç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
Messages postés
21
Date d'inscription
mercredi 28 décembre 2011
Statut
Membre
Dernière intervention
30 décembre 2011

merci mais je ne comprend pas la fonction de conversion Cstr
Messages postés
21
Date d'inscription
mercredi 28 décembre 2011
Statut
Membre
Dernière intervention
30 décembre 2011

je crois que c'est tout bon !!
Merci beaucoup pour votre aide.
Messages postés
21
Date d'inscription
mercredi 28 décembre 2011
Statut
Membre
Dernière intervention
30 décembre 2011

ah non...
Messages postés
21
Date d'inscription
mercredi 28 décembre 2011
Statut
Membre
Dernière intervention
30 décembre 2011

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)
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
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)
Messages postés
21
Date d'inscription
mercredi 28 décembre 2011
Statut
Membre
Dernière intervention
30 décembre 2011

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
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
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
Messages postés
21
Date d'inscription
mercredi 28 décembre 2011
Statut
Membre
Dernière intervention
30 décembre 2011

ç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...