kekedepau
Messages postés8Date d'inscriptionjeudi 24 juin 2010StatutMembreDernière intervention 1 juillet 2010
-
24 juin 2010 à 19:00
kekedepau
Messages postés8Date d'inscriptionjeudi 24 juin 2010StatutMembreDernière intervention 1 juillet 2010
-
1 juil. 2010 à 20:34
Bonsoir,
Je connaissais le site mais pas tout en détail. Je ne sais si j'ai bien posté dans la bonne catégorie. J'espère que vous allez pouvoir m'aider. Je dois créer une base de données, ma mission du stage.
Je m'en occupe de la partie INSERER. J'ai pas mal avancé! J'ai appris beaucoup de chose et j'ai réussi à faire seul.
Mais un seul soucis: je suis en train de créer une liste déroulante avec ComboBox. Il y'a 4 Combox.
1er ComboBox est le produit.
2eme ComboBox est le mot-clé.
3eme ComboBox est le type.
4eme ComboBox est le sous-type.
De plus, chaque produit a ses propres mot clés. Chaque mot clé a son propre type (ou pas de type) et chaque type a des sous-type.
Comment donc faire des liaison tout ça dans un ComboBox?
Pour commencer j'ai fait comme ça:
Private Bdocument As Boolean, Bobjet As Boolean, Bsupport As Boolean, BmotCle As Boolean, Bproduit As Boolean, Btype As Boolean, Bsoustype As Boolean, Bemplacement As Boolean
Private i As Integer
Private Sub Annuler_Click()
End
End Sub
Private Sub ComboBoxmotCle_Click()
Select Case ComboBoxmotCle.Value
Case 1 'Arbre
Case 2 'Couple mètre
Case 3 'Turbine HP
Case 4 'Turbine Libre
Case 5 'Ejection et Tuyère
Case 6 'ZF Etanchéité
Case 7 'ZF Jeux
Case 8 'ZF Veine aérodynamique
Case 9 'Palier
Case 10 'Joints et Etanchéité
Case 11 'Structure
Case 12 'Pièces d'assemblage
Case 13 'Transport levage
Case 14 'ZF Interface cellule
Case 15 'Système d'huile
Case 16 'Circuit d'air
Case 17 'Système électrique
Case 18 'Système de drainage
End Select
BmotCle = True
End Sub
Private Sub ComboBoxProduit_Click()
Select Case ComboBoxProduit.Value
Case 1 'Réducteur
Case 2 'Turbine
Case 3 'Composants communs
Case 4 'Systèmes
End Select
Bproduit = True
End Sub
Private Sub ComboBoxSoustype_Click()
Select Case ComboBoxSoustype.Value
Case 1 'Distributeur
Case 2 'Enveloppe
Case 3 'Pale
Case 4 'Disque
Case 5 'Attache
Case 6 'Pale
Case 7 'Disque
Case 8 'Attache
Case 9 'Labyrinthe
Case 10 'Jeux radiaux
Case 11 'Jeux faciaux
Case 12 'Pas de sous-type
End Select
Bsoustype = True
End Sub
Private Sub ComboBoxType_Click()
Select Case ComboBoxType.Value
Case 1 'Stator
Case 2 'Rotor
Case 3 'Carter
Case 4 'Stator
Case 5 'Rotor
Case 6 'Rotor
Case 7 'Blindage
Case 8 'Jeux axiaux
Case 9 'Jeux radiaux
Case 10 'Boîtier
Case 11 'Element d'assemblage
Case 12 'Roulement
Case 13 'ZF Lubrification
Case 14 'ZF Amortissement
Case 15 'Statique
Case 16 'Dynamique
Case 17 'Fixation
Case 18 'Blindage
Case 19 'Element de liaison
Case 20 'Carénage
Case 21 'Tuyauteries
Case 22 'Circuit de pression
Case 23 'Circuit de récupération
Case 24 'Circuit de dégazage
Case 25 'Tuyauteries
Case 26 'Capteurs
Case 27 'Vitesse et Couples
Case 28 'Températures
Case 29 'Draintuyère
Case 30 'Receptacles
Case 31 'Pas de type
End Select
Btype = True
End Sub
Private Sub Insérer_Click()
If Bdocument True And Bobjet True _
And Bproduit True And Bsupport True And BmotCle = True _
And Btype True And Bsoustype True And Bemplacement = True Then
Application.ScreenUpdating = False
CalculLigne
Application.ScreenUpdating = True
Sheets("Produits").Range("A" & i).Value = ListBoxDocument.List(ListBoxDocument.ListIndex)
Sheets("Produits").Range("B" & i).Value = TextBoxObjet.Value
Sheets("Produits").Range("C" & i).Value = ComboBoxProduit.Value
Sheets("Produits").Range("D" & i).Value = ComboBoxmotCle.Value
Sheets("Produits").Range("E" & i).Value = ComboBoxType.Value
Sheets("Produits").Range("F" & i).Value = ComboBoxSoustype.Value
Sheets("Produits").Range("G" & i).Value = ListBoxSupport.List(ListBoxSupport.ListIndex)
Sheets("Produits").Range("H" & i).Value = TextBoxEmplacement.Value
Else
GestionInsertion
End If
End Sub
Private Sub ListBoxDocument_Change()
If ListBoxDocument.ListIndex <> -1 Then
Bdocument = True
End If
End Sub
Private Sub ListBoxSupport_Change()
If ListBoxSupport.ListIndex <> -1 Then
Bsupport = True
End If
End Sub
Private Sub TextBoxObjet_Change()
If TextBoxObjet.Value <> "" Then
Bobjet = True
End If
End Sub
Private Sub TextBoxEmplacement_Change()
If TextBoxEmplacement.Value <> "" Then
Bemplacement = True
End If
End Sub
Private Sub CalculLigne()
For i = 6 To Range("D65536").End(xlUp).Row
If Cells(i, 1).Value = "" Then
Exit For
End If
Next i
End Sub
Private Sub GestionInsertion()
If Bdocument = False Then
MsgBox "Le document n'a pas été sélectionné."
End If
If Bobjet = False Then
MsgBox "L'objet n'a pas été défini."
End If
If Bproduit = False Then
MsgBox "Le produit n'a pas été sélectionné."
End If
If BmotCle = False Then
MsgBox "Le mot-clé n'a pas été sélectionné"
End If
If Btype = False Then
MsgBox "Le type n'a pas été sélectionné."
End If
If Bsoustype = False Then
MsgBox "Le sous-type n'a pas été sélectionné."
End If
If Bsupport = False Then
MsgBox "Le support n'a pas été sélectionné."
End If
If Bemplacement = False Then
MsgBox "L'emplacement n'a pas été renseigné."
End If
End Sub
Private Sub UserForm_Initialize()
i = 6
'Initialisation des booléens
Bdocument = False
Bobjet = False
Bproduit = False
BmotCle = False
Btype = False
Bsoustype = False
Bsupport = False
Bemplacement = False
'Création des choix de la listbox Document
ListBoxDocument.AddItem "Notes Techniques"
ListBoxDocument.AddItem "Plans et Dessins"
ListBoxDocument.AddItem "Revues"
ListBoxDocument.AddItem "Photos et Architectures"
ListBoxDocument.AddItem "Comptes-rendus"
'Création des choix de la listbox Support
ListBoxSupport.AddItem "DVD"
ListBoxSupport.AddItem "CD"
ListBoxSupport.AddItem "Papier"
ListBoxSupport.AddItem "Livre"
ListBoxSupport.AddItem "Dossier"
ListBoxSupport.AddItem "Fichier Informatisé"
'Création des choix de la combox Produit
ComboBoxProduit.AddItem "Réducteurs" 'ListIndex = 1
ComboBoxProduit.AddItem "Turbine" 'ListIndex = 2
ComboBoxProduit.AddItem "Composants communs" 'ListIndex = 3
ComboBoxProduit.AddItem "Systèmes" 'ListIndex = 4
'Création des choix de la combox MotCle
ComboBoxmotCle.AddItem "Arbre" 'ListIndex = 1
ComboBoxmotCle.AddItem "Couple mètre" 'ListIndex = 2
ComboBoxmotCle.AddItem "Turbine HP" 'ListIndex = 3
ComboBoxmotCle.AddItem "Turbine Libre" 'ListIndex = 4
ComboBoxmotCle.AddItem "Ejection et Tuyère" 'ListIndex = 5
ComboBoxmotCle.AddItem "ZF Etanchéité" 'ListIndex = 6
ComboBoxmotCle.AddItem "ZF Jeux" 'ListIndex = 7
ComboBoxmotCle.AddItem "ZF Veine aérodynamique" 'ListIndex = 8
ComboBoxmotCle.AddItem "Palier" 'ListIndex = 9
ComboBoxmotCle.AddItem "Joints et Etanchéité" 'ListIndex = 10
ComboBoxmotCle.AddItem "Structure" 'ListIndex = 11
ComboBoxmotCle.AddItem "Pièces d'assemblage" 'ListIndex = 12
ComboBoxmotCle.AddItem "Transport levage" 'ListIndex = 13
ComboBoxmotCle.AddItem "ZF Interface cellule" 'ListIndex = 14
ComboBoxmotCle.AddItem "Système d'huile" 'ListIndex = 15
ComboBoxmotCle.AddItem "Circuit d'air" 'ListIndex = 16
ComboBoxmotCle.AddItem "Système électrique" 'ListIndex = 17
ComboBoxmotCle.AddItem "Système de drainage" 'ListIndex = 18
'Création des choix de la combox Type
ComboBoxType.AddItem "Stator" 'ListIndex = 1
ComboBoxType.AddItem "Rotor" 'ListIndex = 2
ComboBoxType.AddItem "Carter" 'ListIndex = 3
ComboBoxType.AddItem "Stator" 'ListIndex = 4
ComboBoxType.AddItem "Rotor" 'ListIndex = 5
ComboBoxType.AddItem "Carter" 'ListIndex = 6
ComboBoxType.AddItem "Blindage" 'ListIndex = 7
ComboBoxType.AddItem "Jeux axiaux" 'ListIndex = 8
ComboBoxType.AddItem "Jeux radiaux" 'ListIndex = 9
ComboBoxType.AddItem "Boîtier" 'ListIndex = 10
ComboBoxType.AddItem "Element d'assemblage" 'ListIndex = 11
ComboBoxType.AddItem "Roulement" 'ListIndex = 12
ComboBoxType.AddItem "ZF Lubrification" 'ListIndex = 13
ComboBoxType.AddItem "ZF Amortissement" 'ListIndex = 14
ComboBoxType.AddItem "Statique" 'ListIndex = 15
ComboBoxType.AddItem "Dynamique" 'ListIndex = 16
ComboBoxType.AddItem "Fixation" 'ListIndex = 17
ComboBoxType.AddItem "Blindage" 'ListIndex = 18
ComboBoxType.AddItem "Element de liaison" 'ListIndex = 19
ComboBoxType.AddItem "Carénage" 'ListIndex = 20
ComboBoxType.AddItem "Tuyauteries" 'ListIndex = 21
ComboBoxType.AddItem "Circuit de pression" 'ListIndex = 22
ComboBoxType.AddItem "Circuit de récupérage" 'ListIndex = 23
ComboBoxType.AddItem "Circuit de dégazage" 'ListIndex = 24
ComboBoxType.AddItem "Tuyauteries" 'ListIndex = 25
ComboBoxType.AddItem "Capteur" 'ListIndex = 26
ComboBoxType.AddItem "Vitesse et Couple" 'ListIndex = 27
ComboBoxType.AddItem "Température" 'ListIndex = 28
ComboBoxType.AddItem "Drain tuyère" 'ListIndex = 29
ComboBoxType.AddItem "Receptacles" 'ListIndex = 30
ComboBoxType.AddItem "Pas de type" 'ListIndex = 31
'Création des choix de la combox Sous-type
ComboBoxSoustype.AddItem "Distributeur" 'ListIndex = 1
ComboBoxSoustype.AddItem "Enveloppe" 'ListIndex = 2
ComboBoxSoustype.AddItem "Pale" 'ListIndex = 3
ComboBoxSoustype.AddItem "Disque" 'ListIndex = 4
ComboBoxSoustype.AddItem "Attache" 'ListIndex = 5
ComboBoxSoustype.AddItem "Pale" 'ListIndex = 6
ComboBoxSoustype.AddItem "Disque" 'ListIndex = 7
ComboBoxSoustype.AddItem "Attache" 'ListIndex = 8
ComboBoxSoustype.AddItem "Labyrinthe" 'ListIndex = 9
ComboBoxSoustype.AddItem "Joint radiaux" 'ListIndex = 10
ComboBoxSoustype.AddItem "Joint faciaux" 'ListIndex = 11
ComboBoxSoustype.AddItem "Pas de sous-type" 'ListIndex = 12
'Use drop-down list Produit
ComboBoxProduit.Style = fmStyleDropDownList
'Set combo box to first entry
ComboBoxProduit.ListIndex = 0
'Use drop-down list Mot-Clé
ComboBoxmotCle.Style = fmStyleDropDownList
'Set combo box to first entry
ComboBoxmotCle.ListIndex = 0
'Use drop-down list Type
ComboBoxType.Style = fmStyleDropDownList
'Set combo box to first entry
ComboBoxType.ListIndex = 0
'Use drop-down list Sous-type
ComboBoxSoustype.Style = fmStyleDropDownList
'Set combo box to first entry
ComboBoxSoustype.ListIndex = 0
End Sub
Private Sub UserForm_Terminate()
ListBoxDocument.Clear
ListBoxSupport.Clear
End Sub
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 25 juin 2010 à 20:12
Ok, c'est largement plus clair.
Donc, à faire :
Dans le UserForm_Initialize, tu entres les données dans la ComboBoxProduit comme tu l'as fait.
Pour les autres ComboBox, inutile de les remplir puisque tu ne sais pas quel produit est sélectionné.
Dans le ComboBoxProduit_Click (ou _Change), c'est là que tu remplir la ComboBox suivante, ComboBoxmotCle, avec le Select Case que tu as préparé :
Private Sub ComboBoxProduit_Click()
ComboBoxmotCle.Clear ' Vidage de la liste
Select Case ComboBoxProduit.Value
Case 1 'Réducteur
ComboBoxmotCle.AddItem "Arbre" 'ListIndex = 1
ComboBoxmotCle.AddItem "Couple mètre" 'ListIndex = 2
Case 2 'Turbine
ComboBoxmotCle.AddItem "Turbine HP" 'ListIndex = 1
ComboBoxmotCle.AddItem "Turbine Libre" 'ListIndex = 2
ComboBoxmotCle.AddItem "Ejection et Tuyère" 'ListIndex = 3
ComboBoxmotCle.AddItem "ZF Etanchéité" 'ListIndex = 4
ComboBoxmotCle.AddItem "ZF Jeux" 'ListIndex = 5
ComboBoxmotCle.AddItem "ZF Veine aérodynamique" 'ListIndex = 6
Case 3 'Composants communs
etc ...
Case 4 'Systèmes
End Select
Bproduit = True
End Sub
Mais tu l'auras vu, puisque ComboBoxmotCle n'affiche QUE les items associés au produit sélectionnés, les Items sont numérotés de 1 à X.
Donc, dans ComboBoxmotCle_Click, quand tu feras la même chose pour renseigner ComboBoxType, il faudra faire autant de Select Case que de produit et des Sous-Select Case pour les motclé, exemple :
Select Case ComboBoxProduit.Value
Case 1 'Réducteur
Select Case ComboBoxmotCle.Value
Case 1 ' Arbre
ComboBoxProduit.addItem "mot clé après Arbre" ' Index 1
ComboBoxProduit.addItem "mot clé après Arbre" ' Index 2
Case 2 ' Couple mètre
ComboBoxProduit.addItem "mot clé 1 après Couple mètre" ' Index 1
ComboBoxProduit.addItem "mot clé 2 après Couple mètre" ' Index 2
End Select
Case 2 'Turbine
etc ...
Case 3 'Composants communs
etc ...
Case 4 'Systèmes
End Select
Mauvais exemple puisque "Arbre" n'a pas de Type, mais c'est l'idée qui compte.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 25 juin 2010 à 20:14
Je me suis trompé de ComboBox dans le dernier code
Select Case ComboBoxProduit.Value
Case 1 'Réducteur
Select Case ComboBoxmotCle.Value
Case 1 ' Arbre
ComboBoxType.addItem "mot clé après Arbre" ' Index 1
ComboBoxType.addItem "mot clé après Arbre" ' Index 2
Case 2 ' Couple mètre
ComboBoxType.addItem "mot clé 1 après Couple mètre" ' Index 1
ComboBoxType.addItem "mot clé 2 après Couple mètre" ' Index 2
End Select
Case 2 'Turbine
etc ...
Case 3 'Composants communs
etc ...
Case 4 'Systèmes
End Select
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 25 juin 2010 à 11:54
Salut
C'est bien beau de dire que tu n'es pas dans la bonne catégorie, mais il vaudrait mieux dire que tu es sous Excel car il faut avoir lu ton code pour s'en apercevoir !
Et quelle est ta question ?
Parce que tu nous expliques pas mal de choses, mais on ne sait pas ce que tu veux faire. Ce n'est pas à nous d'analyser ton code ou tes données pour s'en dépatouiller : explique ce que tu veux faire.
A quoi servent ComboBoxmotCle_Click ou ComboBoxType_Click puisque tu ne fais que mettre à True une variable : les Select Case ne servent à rien puisque tu ne fais aucune action !
Vala
Jack, 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)
kekedepau
Messages postés8Date d'inscriptionjeudi 24 juin 2010StatutMembreDernière intervention 1 juillet 2010 25 juin 2010 à 18:13
Bonjour,
Merci pour la réponse. Je comprend tout à fait, j'ai trop expliqué sans donner mon problème. Je vous prie de m'excuser.
Je voudrais crée des "liens conditionnels" sur Produit, Mot-Clé, Type et Sous-Type avec les ComboBox.
Voici l'arborescence:
Vous voyez que par exemple, "Arbre" et "Couple Metre" (qui sont des mot-clé) appartient à Réducteur (Produit).
Et que le "Carter" (Type) appartient au Turbine HP (Mot clé, qui appartient au Turbine (Produit).
Donc, si je sélectionne Réducteur, j'aimerai que la sélection se fait automatiquement pour Mot Clé, Type et Sous-type, s'il y'en a.
-----------------------
Car si c'est impossible, il y'a une solution. C'est de mettre les mots en couleurs. Quel est le code pour mettre des couleurs?
MErci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 26 juin 2010 à 00:52
Bah que veux-tu lettre ?
Pense juste à faire un Clear de la ComboBox (de toute façon, avant de commencer à le 1er Select Case, éventuellement ajoute un item du genre "< Non applicable >" ou "< Type non défini >"
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 26 juin 2010 à 00:56
Méfie toi d'un truc : Il se peut que, quand tu feras les AddItem dans les ComboBox, que celles-ci réagissent au _Click alors qu'il n'y en a pas eu.
Si c'est le cas, cela va entrainer une suite d'évènements non sollicités et ... foutre la m....e.
Tu le sauras en exécutant instruction par instruction avec F9 et F8.
Si tel est le cas, envoie moi un MP, je t'expliquerai comment le bypasser.
Je suis en train de créer une boîte de dialogue Recherche Moteurs. J'ai fait le code moi-même et il y'a un problème.
Cela lance une recherche seulement la Famille et non le modèle. Ce que je j'aimerai, c'est la possibilité de rechercher à partir de 2 informations: Famille et/ou Modele. sachant que le boite de dialogue possède 2 listes déroulantes donc 2 combobox!
Merci beaucoup.
------------------------
Option Explicit
'Déclaration des variables
Private strPlage As String, pgRecherche As String, premCell As String, strFamille As String
Private res As Range, cel As Range
Private cpt As Integer, i As Integer
Private mySheet As Worksheet
Private rc As Boolean
Private Sub calculFinRecherche()
'Attention, le champs de calcul d'index est la colone G, si elle est vide, la recherche sera incohérente si des données
'se trouvent dans les autres colonnes
For i = 6 To Range("G65536").End(xlUp).Row
If IsEmpty(Cells(i, 1).Value) Then
Exit For
End If
Next i
End Sub
Private Sub ComboBoxFamille_Change()
Select Case ComboBoxFamille.Value
Case 1 'Arriel
Case 2 'Arrius
Case 3 'TM333
Case 4 'Makila
Case 5 'Ardiden
Case 6 'MTR390
Case 7 'RTM322
Case 8 'Ancien génération
Case 9 'Démonstrateur
Case 10 'SNECMA
Case 11 'Concurrence
End Select
End Sub
Private Sub ComboBoxModele2_Change()
Select Case ComboBoxModele2.Value
Case 1 '1
Case 2 '2
Case 3 '3
Case 4 'Pratt & Whitney
Case 5 'Autres
End Select
End Sub
Private Sub CommandButtonAnnuler_Click()
End
End Sub
Private Sub CommandButtonOk_Click()
If rc True Or ComboBoxFamille.Value <> "Sélectionner" And rc True Or ComboBoxModele2.Value <> "Sélectionner" Then
'Appel de la méthode de recherche
If ActiveSheet.Name = "PORTAIL de RECHERCHE" Then
RechercheComplete
Else
RechercheFeuille
End If
End If
rc = False
End Sub
Private Sub RechercheFeuille()
Application.ScreenUpdating = False
'Initialisation de la variable contenant le champ à rechercher
strFamille = ComboBoxFamille.Value
cpt = 0
ActiveSheet.Select
calculFinRecherche
'Formatage de la variable de plage de recherche
strPlage = "k6:L" & i
With ActiveSheet.Range(strPlage)
'Réinitialisation couleur
For Each cel In Range(strPlage)
If cel.Interior.ColorIndex <> xlNone Then
cel.Interior.ColorIndex = xlNone
End If
Next
Set res = .Find(what:=strFamille, LookIn:=xlValues, LookAt:=xlPart)
If Not res Is Nothing Then
premCell = res.Address
Do
res.Interior.ColorIndex = 6
Set res = .FindNext(res)
'incrémentation du compteur si un résultat est trouvé
cpt = cpt + 1
Loop While Not res Is Nothing And res.Address <> premCell
End If
End With
If cpt = 0 Then
MsgBox ("Aucune famille moteur trouvée")
End If
Application.ScreenUpdating = True
End Sub
Private Sub RechercheComplete()
Application.ScreenUpdating = False
'Initialisation de la variable contenant le champ à rechercher
strFamille = ComboBoxFamille.Value
cpt = 0
For Each mySheet In Worksheets
mySheet.Select
calculFinRecherche
If mySheet.Name <> "PORTAIL de RECHERCHE" Then
'Formatage de la variable de plage de recherche
strPlage = "K6:L" & i
With mySheet.Range(strPlage)
'Réinitialisation couleur
For Each cel In Range(strPlage)
If cel.Interior.ColorIndex <> xlNone Then
cel.Interior.ColorIndex = xlNone
End If
Next
Set res = .Find(what:=strFamille, LookIn:=xlValues, LookAt:=xlPart)
If Not res Is Nothing Then
premCell = res.Address
Do
res.Interior.ColorIndex = 6
Set res = .FindNext(res)
'incrémentation du compteur si un résultat est trouvé
cpt = cpt + 1
Loop While Not res Is Nothing And res.Address <> premCell
End If
End With
End If
Next mySheet
Sheets("PORTAIL de RECHERCHE").Select
Range("L27").Value = cpt & " résultats."
Application.ScreenUpdating = True
End Sub