Stude 12 Posté(e) le 13 mai 2009 Partager Posté(e) le 13 mai 2009 Bonjour Voilà, je vous expose le problème, j'aimerais que ma 2eme combobox se remplisse en fonction de la première. j'ai crée, plusieurs tables (mais bon je sais pas si j'ai bien fait) La table Medias me servira a renvoyer a l'une des autres tables : En gros voila se que je veut : Grosso, modo, je veut que en choisissant , résistance dans le premier cadre, les valeurs des résistances possible seul s'affiche dans le second et dans le 3eme les tensions possible . Mais je sais pas s'il faut le faire en VB donc un petit peu de cette manière : Ou alors ici : Voila comment se présente une de mes tables : Si vous pouvez m'aider en me donnant un petit coup de mains, je connait rien au VB, j'en est jamais fait. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tiduster Posté(e) le 13 mai 2009 Partager Posté(e) le 13 mai 2009 J'ai eu assez de cours de VB pour gérer des ComboBox. Par contre j'ai encore jamais fait le lien avec Access . Et j'ai un peu de mal à comprendre ce que tu veux . Je t'ai écrit un petit truc : < IcI > Je présume que tu peux lire un projet en VB ? (v2005) Si c'est pas le cas : Public Class FrmElec Dim tMenu() As String = {"Array", "Potentiomètre", "Résistance"} Dim tVal() As String = {"1", "1.2", "2.2", "2.7", "12", "15", "470"} Dim tTens() As String = {"50", "120", "50", "300", "500", "400", "50"} Private Sub CmbType_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmbType.SelectedIndexChanged If CmbType.SelectedItem = "Résistance" Then CmbVal.Visible = True Else CmbVal.Visible = False End If End Sub Private Sub CmbVal_VisibleChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CmbVal.SelectedIndexChanged LblTens.Text = tTens(CmbVal.SelectedIndex) End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim i As Integer For i = 0 To UBound(tVal) CmbVal.Items.Add(tVal(i)) Next For i = 0 To UBound(tMenu) CmbType.Items.Add(tMenu(i)) Next End Sub Private Sub CmbVal_VisibleChanged1(ByVal sender As Object, ByVal e As System.EventArgs) Handles CmbVal.VisibleChanged LblTens.Visible = CmbVal.Visible End Sub End Class Et : http://nsa08.casimages.com/img/2009/05/13/...95416978175.png Ici je charge donc tes données depuis un tableau, au lieu d'une table Access. Si on choisit "Résistance" dans la 1ère combobox, une deuxième apparait avec la liste des valeur, une fois que tu en sélectionne une, sa tension apparait dans le label. Tu n'as pas spécifié ce que tu voulais à la selection de Array ou Potentio ? Si y'a un truc que j'ai mal pigé corrige moi, si c'était le lien VB/Access que tu voulais le plus, alors il faudra attendre une autre personne . Bonne Soirée ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 13 mai 2009 Auteur Partager Posté(e) le 13 mai 2009 J'ai réussi seul comme un grand j'ai pas le code avec moi, je suis rentrer. Enfin je pense qu'il faut encore optimiser le code, et je pense qu'il y as d'autre moyen de le faire et puis j'aimerais aussi intégrer une recherche en tapant le mot. Bref, Je posterais mon code demain, tu comprendras se que j'ai fait a mon avis. Vu que ça fait que 2 jour que j'utilise access et le VB... Et puis j'ai vu aussi que avec access on peu mettre en forme de page internet. Ce serait possiblede mettre ça en page internet car là la base de données nécessite d'avoir access. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 14 mai 2009 Auteur Partager Posté(e) le 14 mai 2009 Private Sub chkTension_Click() RefreshQuery End Sub Private Sub chkType_Click() If Me.chkType Then Me.cmbRechType.Visible = True Me.cmbRechTension.Visible = True Me.cmbRechValeur.Visible = True RefreshQuery Else Me.cmbRechType.Visible = True Me.cmbRechTension.Visible = False Me.cmbRechValeur.Visible = False End If End Sub Private Sub chkValeur_Click() RefreshQuery End Sub Private Sub cmbRechTension_Change() If Me.chkType And Me.chkTension Then RefreshQuery End If End Sub Private Sub cmbRechType_AfterUpdate() Select Case Me.cmbRechType.Value Case "Simple et CMS" cmbRechValeur.RowSource = "SELECT Composant.Valeur FROM Composant WHERE Composant.Catégorie = 'Simple et CMS'GROUP BY Composant.Valeur ORDER BY Composant.Valeur;" cmbRechTension.RowSource = "SELECT Composant.Vmax FROM Composant WHERE Composant.Catégorie = 'Simple et CMS'GROUP BY Composant.Vmax ORDER BY Composant.Vmax;" RefreshQuery Case "Potentiomètre" cmbRechValeur.RowSource = "SELECT Composant.Valeur FROM Composant WHERE Composant.Catégorie = 'Potentiomètre'GROUP BY Composant.Valeur ORDER BY Composant.Valeur;" cmbRechTension.RowSource = "SELECT Composant.Vmax FROM Composant WHERE Composant.Catégorie = 'Potentiomètre'GROUP BY Composant.Vmax ORDER BY Composant.Vmax;" RefreshQuery Case "Array" cmbRechValeur.RowSource = "SELECT Composant.Valeur FROM Composant WHERE Composant.Catégorie = 'Array'GROUP BY Composant.Valeur ORDER BY Composant.Valeur;" cmbRechTension.RowSource = "SELECT Composant.Vmax FROM Composant WHERE Composant.Catégorie = 'Array'GROUP BY Composant.Vmax ORDER BY Composant.Vmax;" RefreshQuery Case Else End Select End Sub Private Sub cmbRechValeur_change() If Me.chkType And Me.chkValeur Then RefreshQuery End If End Sub Private Sub Form_Load() Dim ctl As Control For Each ctl In Me.Controls Select Case Left(ctl.Name, 3) Case "chk" ctl.Value = -1 Case "lbl" ctl.Caption = "- * - * -" Case "txt" ctl.Visible = False ctl.Value = "" Case "cmb" ctl.Visible = False End Select Next ctl Me.lstResults.RowSource = "SELECT N°, Catégorie, Valeur, Vmax, Tolérance, Puissance, Boitier, Quantité FROM Composant;" Me.lstResults.Requery End Sub Private Sub RefreshQuery() Dim SQL As String Dim SQLWhere As String SQL = "SELECT N°, Catégorie, Valeur, Vmax, Tolérance, Puissance, Boitier, Quantité FROM Composant where Composant!N°<> 0 " If Me.chkType Then SQL = SQL & "And Composant!Catégorie like '*" & Me.cmbRechType.Value & "*'" End If If Me.chkValeur Then SQL = SQL & "And Composant!Valeur like '*" & Me.cmbRechValeur & "*' " & "And Composant!Catégorie like '*" & Me.cmbRechType.Value & "*'" End If If Me.chkTension Then SQL = SQL & "And Composant!Vmax like '*" & Me.cmbRechTension & "*' " & "And Composant!Catégorie like '*" & Me.cmbRechType.Value & "*'" End If SQLWhere = Trim(Right(SQL, Len(SQL) - InStr(SQL, "Where ") - Len("Where ") + 1)) SQL = SQL & ";" Me.lblStats.Caption = DCount("*", "Composant", SQLWhere) & " / " & DCount("*", "Composant") Me.lstResults.RowSource = SQL Me.lstResults.Requery End Sub Voila, maintenant j' essaie de faire des étiquettes dynamique. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 14 mai 2009 Auteur Partager Posté(e) le 14 mai 2009 J'ai un autre problèmes : c'est que si on rajoute par exemple en type de résistance "Truc" et que l'on donnes des valeur dans l'autre table , il n`y as pas de correspondance avec mon code (la ligne Select Case Me.cmbRechType.Value ) n' existe pas et donc on as plus de résultat . Il me faudrait un code fonctionnent tout le temps même lorsque l'on édite la table. Case "Truc" cmbRechValeur.RowSource = ...... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 14 mai 2009 Auteur Partager Posté(e) le 14 mai 2009 Voila la suite : Qui correspond a ma cmbCatégorie et un autre tableau servant a remplir la cmbComposant je veut faire un filtre dynamique voila le code mais il fonctionne pas : Alors, je pense que vous voyez se que je veut faire, mais comment le faire. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bad Boy Posté(e) le 15 mai 2009 Partager Posté(e) le 15 mai 2009 salut, tu peux m'envoyer ta bdd pour que j'y jete un coup d'oeil ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tiduster Posté(e) le 16 mai 2009 Partager Posté(e) le 16 mai 2009 Sans commentaire et description des noms des éléments, j'ai pas le niveau pour comprend ton code désolé. En plus RefreshQuery je connais pas :/ . C'est du SQL ? Et "étiquettes dynamique", tu entends quoi par là ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 16 mai 2009 Auteur Partager Posté(e) le 16 mai 2009 Comme vous allez pouvoir le voir le premier filtre Dynamique entre le 1 er et la deuxieme boite Voila la première base de donner http://www.sendspace.com/file/r0m3ff et voici une seconde version http://www.sendspace.com/file/6d02pl Ou les étiquettes des Box doivent changer en fonction des sélections des 2 première box et aussi le nombre de Box afficher change (C'est pour cela que j'ai utiliser le terme d' "étiquettes dynamique") La j'ai juste fait un exemple sur résistance et condensateur pour vous montrez le principe avec le projet "autre", mais le principe doit se généraliser pour toute les sélections de "Produit" Sinon Oui RefreshQuery est un requète Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 19 mai 2009 Auteur Partager Posté(e) le 19 mai 2009 Comment créer une function qui retourne une chaine (String), car je veut créer une fonction avec dedans un truc du genre : String = "SELECT Produit.Critère1 From Produit " String = String & " WHERE Produit.Produit ='" & Me.chbComposant.Value & "';" (Ceci me donne le contenue d'une case de tableau et je veut pour voir mettre se contenue en Me.etibox1.Caption = le contenue de la case du tableau ) Comment faire un tableau avec un nombre de colonne variable ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 25 mai 2009 Auteur Partager Posté(e) le 25 mai 2009 Bon j'ai réussit a faire ce que j'ai expliquer au dessus. Il me reste 4 foncions a créer et j'aurais finit. Il me faut une qui permet de remplir une table en lui donnant la table et le numéros de ligne, ainsi que les parametres à ecrire a chaque colonne Une fonction : du genre Remplirtable (nom de la table, lignearemplir,valeur1, valeur2, valeur3 ) Il me faut une autre fonction qui permet de récupérer les informations, donc en lui passant aussi la table et le numéros de ligne et de les afficher séparemet dans des textbox. Une fonction qui permet de supprimer une ligne en lui donnant toujours table et numéros de la ligne Une fonction qui permet de supprimer une table en lui donnant la table. Si quelqu'un peut m'aider sur au moins une des 4 fonction se serait sympa ^^. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 2 juin 2009 Auteur Partager Posté(e) le 2 juin 2009 Bon, bien je continue de chercher. Voilà se que je fait, j'ai mit des étiquettes: je charge leur nom (Etiquette.caption) par le nom des colonnes du tableau sélectionner avec une combobox J'aimerais qui si les 3 première lettre son "Cha", ne pas afficher l'étiquette (Etiquette.Visible = false). Normalement avec les controls c'est possible mais je sais pas trop comment sa marche dans se cas. J'ai essayer un truc du genre Dim ctrl As control For Each ctrl In Me.Controls Select Case Left(ctrl.Value, 3) Case "Cha" ctrl.Visible = False End Select Next ctrl End Sub Mais marche po... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tiduster Posté(e) le 2 juin 2009 Partager Posté(e) le 2 juin 2009 Me faudrait un screen pour mieux voir la feuille, mais moi je mettrais les étiquettes dans un panel afin de n'avoir qu'un seul type de contrôle dans ma boucle for. Et donc au lieu de mettre "for each controls" on met "for each étiquette", et on peut utiliser leurs propriétés propre (Text, Tag, ...). Si tu veux vraiment garder le Me.controls, alors, si certains contrôles ne sont pas des étiquettes il risque de pas aimer. Tu peux t'en sortir avec : For Each ctrl In Me.Controls If (TypeOf (ctrl) Is Etiquette) Then ... End If Next Par exemple. Autrement faut aussi savoir que dans les each, il parcours les contrôles dans un ordre précis et immuable. Il commence toujours par le dernier ajouté, pour finir par le premier. D'où l'intérêt d'utiliser un panel pour limiter l'impact. @++ . PS : C'est quoi "Étiquette" ? Un Label ? ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 3 juin 2009 Auteur Partager Posté(e) le 3 juin 2009 Oui c'est un label. Par contre c'est quoi un panel ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tiduster Posté(e) le 3 juin 2009 Partager Posté(e) le 3 juin 2009 Ok pour le label. Un panel : http://www.startvbdotnet.com/controls/images/panel.gif C'est celui de gauche. C'est une conteneur invisible, qui permet de regrouper des contrôles. On sert souvent pour parcourir une liste de checkboxs ou de labels, afin de les charger depuis un tableau ou de vérifier leur état. Mais je réagis en visual basic, je sais pas trop si on peut faire ça sous access. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 3 juin 2009 Auteur Partager Posté(e) le 3 juin 2009 En fait, les labels (que j'ai appeler Éticcmbbox), j'aimerais que si le nom est : Champ1, Champ 2, Champ3, .... Alors le label doit ne pas être visible, ni la box associer et la case de cocher. Sinon tu connait les collections, car je comprend pas trop a quo cela sert ??? http://msdn.microsoft.com/fr-fr/library/mi...ers(VS.95).aspx car moi, j'ai dans l'image du dessus 16 combobox, 16 case de cocher et 16 label, mon maitre de stage pense que peut les mettre dans une collection pour pouvoir les mettre dans une boucle. Et ainsi par exemple les mettre en visible ou pas suivant les besoin par exemple : Je sais pas si tu as vu mais j'ai des colonnes qui sont identique (leurs nom sont identique), mon prof voudrais faire une table (Que je vais appeler global) qui regroupe les noms des colonnes par exemple si on viens modifier la table global en mettant par exemple "cout" dedans (en plus des autres), venir rajouter a toute les tables la colonne "cout", je pense que ceci peut ce faire en liant les tables mais je comprend pas trop les trucs à lier. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 4 juin 2009 Auteur Partager Posté(e) le 4 juin 2009 je met ma base de donnée en téléchargement : BDD_Composant.mdb - 56.8 Mb Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tiduster Posté(e) le 4 juin 2009 Partager Posté(e) le 4 juin 2009 Les collections j'ai pas vu en cours . Par contre le principe ressemble beaucoup à mes panels. EDIT : En fait pas du tout ... Moi je serais en VB, je ferais un panel qui engloberait tes combobox et compagnie (exactement comme ton carré jaune), et j'utiliserai l'algo que j'ai posté au-dessus. Grâce au If (TypeOf (ctrl) Is Label) tu vas pouvoir parcourir tous tes labels et vérifier à chaque fois leur nom. Et ensuite je jouerai avec les Tag (en mettant le même pour le label, le combobox et la checkbox). Tu reparcours tout ton panel mais cette fois avec un If (TypeOf (ctrl) Is Checkbox) tu vérifies que le tag du label trouvé précédemment est oui ou non égal au tag de la checkbox. Et si c'est le cas chk.visible = false. Idem pour les combobox. T'as vraiment pas moyen de faire des panel sous access ? C'est bizarre ! Ton histoire de lier les tables, j'ai pas très bien compris ce que tu voulais faire, pis ça dépasse mes maigres compétences ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 4 juin 2009 Partager Posté(e) le 4 juin 2009 Les collections sont des tableaux dont la taille change (contrairement aux tableaux classiques qui doivent être de taille fixe) Ton histoire de table qui contient le nom des colonnes, j'ai pas tout compris mais pour être franc je ne pense pas que ça soit une bonne idée . Ca ressemble plus à une grosse bidouille dégeulasse qu'autre chose puisque tu as toujours moyen d'énumérer la liste des colonnes d'une table de toute façon. (vocabulaire employé sans vouloir être méchant ni aggressif hein ^^) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 5 juin 2009 Auteur Partager Posté(e) le 5 juin 2009 Pour vous expliquer le principe (c'est mon maitre de stage qui veut ça) : Exemple : Pour un condensateur, les noms des colonnes dans la table condensateur sont : valeur | tolérance | technologie|boitier|quantité|manufacturier Pour un CI, les noms des colonnes dans la table CI sont : nom | type | finesse de gravure |boitier|quantité|manufacturier Pour un adaptateur, les noms des colonnes dans la table adaptateur sont : matériaux | dimmension | boitier | quantité | manufacturier Dans mes tables il y as donc 2 type de colonne que l'on peut remarquer : les paramètres spécifique (propre à chaque composant ) et des paramètres globaux (qui sont dans toute mes tables en couleur orange dans l'exemple) Mon maitre de stage veut que je fasse une table avec le noms des colonnes étant des paramètres globaux, et s'il viens rajouter un nom par exemple : Cout que la colonne "Cout" soit créer dans toutes les tables afin de pas venir modifier chaque table une par une ce qui prendrais 30 min rien que pour rajouter la colonne. Pour les panels, je croit qu'il y en as bien mais il sont préfait avec des case a option, je sais pas si je peut le modifier afin d'y inclure des comboboxs et autres... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cyduck Posté(e) le 5 juin 2009 Partager Posté(e) le 5 juin 2009 je met ma base de donnée en téléchargement :BDD_Composant.mdb - 56.8 Mb Rien à voir mais n'oublies pas la fonction "Compacter une base de données", dans Outils, utilitaires de bases de données :) Ca virera tous les trucs inutiles crées lors de ton developpement. 56Mo -> 2Mo, pour une base contenant que quelques centaines d'enregistrements c'est plus cohérent, et pour la partager c'est mieux Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 5 juin 2009 Partager Posté(e) le 5 juin 2009 Bon ben vu ce que tu veux faire, moi je ferais plutot une table qui contient les colonnes communes, et des tables pour les infos plus spécifiques, en faisant le lien entre les tables avec un bel identifiant unique. Comme ça : Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 5 juin 2009 Auteur Partager Posté(e) le 5 juin 2009 Merci pour votre aide, je vais essayer de voir ceci. Mais comment je met les enregistrements dans chaque table ? Par exemple si je pense un condensateur : ID_Article: 1 : Valeur : 2.2nf, tolérance : 5%, Technologie : tantal, Nom : , Boitier : 0603, Quantité : 60, manufacturier : KERMET (ID??) Et puis un adaptateur : ID_Article: 1 ??, matériaux : cuivre/or, Dimensions : 10mmx12mm,, Nom : Ethernet, boitier : droit, Quantité : 2, Manufacturier : TYCO (ID ??) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Shtong Posté(e) le 5 juin 2009 Partager Posté(e) le 5 juin 2009 Dans access tu peux faire en sorte que le contenu d'une colonne soit unique (c'est à dire interdire d'avoir deux fois la même valeur). Et tu peux aussi dire qu'une colonne se remplit automatiquement avec des nombres qui augmentent de un à chaque ajout. Comme ça il gère les identifiants pour toi. Le premier truc que tu ajoute tu aura un ID de 1 Le second aura un ID de 2 etc... Le fait que tu ne choisisse pas l'identifiant n'est pas gênant puisque au final tu ne l'utilise que pour faire le lien entre les données des différentes tables. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Stude 12 Posté(e) le 5 juin 2009 Auteur Partager Posté(e) le 5 juin 2009 Ma question est en faite est_ce que l'ID_Article doit être identique à l'ID qui doit lui correspondre dans la table "Article". Car je voit pas comment les liens fonctionne. Merci encore. P.S : Je remet ma base en compresser ici : Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.