Aller au contenu

Access et VB


Messages recommandés

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)

b377466941fa7adbc443785256c4862c.jpg

La table Medias me servira a renvoyer a l'une des autres tables :

9f4f6f521e18f3d738ac79499a9e6677.jpg

En gros voila se que je veut :

a76a4f02afd59d8657f14b2dbb55b1c1.jpg

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 :

7587a54059add097aeb888a6d3b0d3c9.jpg

Ou alors ici :

161316f480ece401cdfa8d20b5e8c79b.jpg

Voila comment se présente une de mes tables :

0ec255b37db6bb708e804dbea482bd68.jpg

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

J'ai eu assez de cours de VB pour gérer des ComboBox. Par contre j'ai encore jamais fait le lien avec Access :p .

Et j'ai un peu de mal à comprendre ce que tu veux :keskidit: .

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 :francais: .

Bonne Soirée !

Lien vers le commentaire
Partager sur d’autres sites

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

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

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

Voila la suite :

7558c0cc8cf761266e2bd7f1ca9ddaf6.jpg

Qui correspond a ma cmbCatégorie

et un autre tableau servant a remplir la cmbComposant

c811db675a9a1984ecc1ac4c8cfb80f3.jpg

je veut faire un filtre dynamique voila le code mais il fonctionne pas :

0c33a19743001e21abc093f2bae7d753.jpg

Alors, je pense que vous voyez se que je veut faire, mais comment le faire.

Lien vers le commentaire
Partager sur d’autres sites

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

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

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

  • 2 semaines après...

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

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.

@++ :craint: .

PS : C'est quoi "Étiquette" ? Un Label ? :eeek2: ...

Lien vers le commentaire
Partager sur d’autres sites

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

4631bc8017db2de5d43b85d590556f48.jpg

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 :

b8e825b1793b2652e6a4dcbbcf2f48fa.jpg

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

Les collections j'ai pas vu en cours :transpi: .

Par contre le principe ressemble beaucoup à mes panels.

EDIT : En fait pas du tout :transpi: ...

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 :transpi: !

Lien vers le commentaire
Partager sur d’autres sites

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 :francais:. 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

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

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 :byebye:

Lien vers le commentaire
Partager sur d’autres sites

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

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...