macroVB
Messages postés26Date d'inscriptionlundi 18 septembre 2006StatutMembreDernière intervention11 mai 2007
-
2 nov. 2006 à 17:18
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 2007
-
3 nov. 2006 à 21:38
Bonjour a tous,
J'essaye de faire une application de gestion de projet en VBA, je vous explique, en fait un projet concerne des missions ,ca peut etre une mission ou deux ou trois... jusqu'a 12, tout depend du projet
dans mon UserForm j'ai mis un cadre dans lequel j'ai groupée mes12 checkbox a couchés concernant les missions que j'ai avec un champ (textbox) qui m'affiche le numero du projet(NumProjet),
j'ai cree une base de donnée sous access avec deux table T_Projets(NumProjet, NomProjet, DateDemarrage, Objet) , T_Missions(CodeMission, Libellé) et une association Projets_Missions(NumProjet,CodeMission), je voulais en fait si je couche les Checkboxs des missions concernant un projet qu'il me le stock dans mes tables de base de donnée mais je ne sais pas comment s'y prendre
voila tout le code que j'ai appliqué
Option Explicit
Dim ws As Workspace
Dim db As Database
Dim rs1 As Recordset
Dim rs2 As Recordset
Dim rs3 As Recordset
Private Sub UserForm_Initialize()
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("C:\BaseDeDonnee\BaseDeDonnee.mdb")
Set rs1 = db.OpenRecordset("Projets", dbOpenTable)
Set rs2 = db.OpenRecordset("Projets_Missions", dbOpenTable)
Set rs3 = db.OpenRecordset("Missions", dbOpenTable)
TextBox1.Text = rs1.Fields("Numprojet").Value
End Sub
Private Sub Frame1_Click()
Dim i As Integer
Dim CheckBox(i) As CheckBox
For i = 1 To 12
If CheckBox(i) = Checked Then
rs2!NumProjet = TextBox1.Text
rs2!CodeMission = CheckBox1.Caption
End If
Next
End Sub
mais ca donne rien ! je ne sais pas si c'est au niveau de mes table de donnée ou au niveau du codage!
merci de vos suggestions
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 2 nov. 2006 à 18:26
Bonjour,
En VBA, il n' y a pas de groupe de controles
A ta place j' utiliserais un ListView (ListView Control version 6.0)
Propriétés:
View : lvwReport
Configure le pour qu' il ait 2 colonnes et coche sa propriété CheckBox
-------------------------------------------------------------------
Private Sub UserForm_Initialize()
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("C:\BaseDeDonnee\BaseDeDonnee.mdb")
Set rs1 = db.OpenRecordset("Projets", dbOpenTable)
Set rs2 = db.OpenRecordset("Projets_Missions", dbOpenTable)
Set rs3 = db.OpenRecordset("Missions", dbOpenTable)
TextBox1.Text = rs1.Fields("Numprojet").Value
'tu remplis la listview avec les codes et les libellés des Missions
rs3.MoveFirst
Do While Not rs3.Eof
ListView.ListItems.Add rs3![CodeMission] '1° colonne
ListView.ListItems(1).SubItems(1)= rs3![Libelle] '2° colonne
rs3.MoveNext
Loop
End Sub
------------------------------------------------------------
En mode Ajout
Lorsque tu veux Valider
Private Sub Frame1_Click() 'pourquoi un Frame ?
Dim NMissions as Integer 'nombre de lignes de la ListeView
Dim i As Integer
NMissions=ListView.ListItems.Count
For i = 1 To NMissions
If ListView.ListItems(i).Checked= True Then
rs2.AddNew
rs2!NumProjet = TextBox1.Text
rs2!CodeMission =CInt(ListView.ListItems(i).Text 'si ton code est un Entier
rs2.Update
End If
Next
End Sub
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 3 nov. 2006 à 08:12
Chaibat05>si le frame permet de regrouper les controles!
Le probleme est dans ta boucle tu met la boucle dans l'évenement click du frame! Si aucune mission n'est coché au chargement du userform si tu click dans le frame pour en cocher une dans l'évenement clik du frame tu n'as pas encore de mission cochée. C'est normal que cela face rien! soit tu fais une boucle sur les chekbox du userform ou alors tu geres l'évenement cheched de chaque mission!
Private Sub Frame1_Click()
Dim i As Integer
Dim CheckBox(i) As CheckBox
For i = 1 To 12
If CheckBox(i) = Checked Then
rs2!NumProjet = TextBox1.Text
rs2!CodeMission = CheckBox1.Caption
End If
Next
End Sub
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 3 nov. 2006 à 14:57
Bonjour Drikce 06,
^^si le frame permet de regrouper les controles...
regrouper oui , mais pas indexer.
Tu n' aura pas CheckBox(0),CheckBox(1),CheckBox(2),...
et donc pas de boucle et un interminable si ...Then
en passant par tous les checkbox.
Mais il peut toujours essayer avec For Each ...
Pour Frame_Click je ne fais que reproduire son code
d' ailleur je le lui ai fais remarquer
Regarde dans
Private Sub Frame1_Click() 'pourquoi un Frame ?
je voulais dire pourquoi valider en cliquant sur un frame
Pour moi ça serait plutot
Sub cmdValid_Click()
...< >
End Sub
macroVB
Messages postés26Date d'inscriptionlundi 18 septembre 2006StatutMembreDernière intervention11 mai 2007 3 nov. 2006 à 15:56
Bonjour tous,
en fait j'ai essayé de faire une petite application de test pour voir l'effet d'afficher les checkbox couché dans mon UserForm a partir d'une fonction que j'appel pour chaque checkbox couché (car j'ai essayé avec le code de chaibat05(je t'en remercie beaucoup) mais ca ne marche pas jusque la, surement une erreur de code, comme je t'avais dis je suis novice, mais j'ai tout essayé depuis ce matain .
alors j'ai cree un UserForm j'ai placée mes CheckBoxs et une listbox pour afficher tout les chekcbox couché
Private Sub RemplirList()
Dim Ctrl As Control
ListBoxMissionsChoisis.Clear
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.CheckBox Then _
If Ctrl.Value Then ListBoxMissionsChoisis.AddItem Ctrl.Caption
Next
End Sub
et dans les checkboxs :
Private Sub CheckBox(1)_Click()
Call RemplirList
End Sub
.
.
.
Private Sub CheckBox(12)_Click()
Call RemplirList
End Sub
ça marche et j'arrive a afficher tout les checkboxs couchés, par contre le probleme qui se pose maintenant c'est que je ne sais pas comment par exemple pour creer un nouveau projet , faire un nouveau enregistrement et stoker les missions choisis(les checkbox couchés) dans mes tables de base de données!!!
en fait pour ListView je n'ai meme pas de l'aide en ligne je fais F1mais je n'ai rien a propos de cette liste
Vous n’avez pas trouvé la réponse que vous recherchez ?
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 3 nov. 2006 à 16:22
Le problème qui se pose pour toi au niveau de l' enregistrement
du projet avec les missions sélectionnées(cochées)
c' est que tu dois passer en revue tous les checkbox
Même avec ForEach
If CheBox1.Value Then ...
If CheBox2.Value Then ...
If CheBox3.Value Then ...
If CheBox4.Value Then ..
etc..
En VB6 tu pourrais avoir
For i=1 to 12
If CheBox(i).Value Then ...
...
Next
Mais pas en VBA
Pour la ListView , si j' ai bien compris tu n' arrives pas à trouver le control.
Si c' est ça , va dans la boite à outils et clique sur autres controles
recherche le dans la liste qui s' affichera.
si tu le selectionne et tu valid, il va s' ajouter aux autrescontrols
tu l' insère ensuite dans ton Form.
tu va dans sa propriéte Personnaliser et tu le configure
n' oublies pas d' ajouter deux colonnes
si tu adoptes maon code,vires la listebox
et garde ton code initial du Form_Initialize
mais met le plutot dans Form_Load
macroVB
Messages postés26Date d'inscriptionlundi 18 septembre 2006StatutMembreDernière intervention11 mai 2007 3 nov. 2006 à 16:49
oui j'ai cherché le control listView dans la barre d'outils (controles supplementaire) je l'ai placé dans la boite a controls et apres dans mon UserForm, apres je lui ai changé la propriété View j'ai mis 3-IvwReport , j'ai veré la listbox, et tt mes checkboxs, et meme le frame, j'ai essayé le code que tu m'as suggéré
Private Sub UserForm_Initialize()
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("C:\Hafsa\BaseDeDonnee\BaseDeDonnee.mdb")
Set rs11 = db.OpenRecordset("Projets", dbOpenTable)
'Set rs1 = db.OpenRecordset("Projets", dbOpenDynaset)
Set rs12 = db.OpenRecordset("Projets_Missions", dbOpenTable)
Set rs13 = db.OpenRecordset("Missions", dbOpenTable)
rs3.MoveFirst
Do While Not rs3.EOF
ListView1.ListItems.Add rs3!("CodeMission") 'j'ai une erreur a ce niveau qui se pointe sur le rs3 "Le caractere de declaration de Type ne correspond pas au type de donnees declaré" !!!
ListView1.ListItems(1).SubItems(1) = rs3!("LibelleMission")
rs3.MoveNext
Loop
End Sub
pourtant j'ai declaré mon rs3 As recordset !!
une question bete , comment configurer la listView?
ps: pour le Form_Load j'ai pas cet evenement dans ma liste
macroVB
Messages postés26Date d'inscriptionlundi 18 septembre 2006StatutMembreDernière intervention11 mai 2007 3 nov. 2006 à 17:13
ça beug tjr !!!
************************
"erreur d'execution '380'
valeur de propriété non valide"
************************
le code :
Private Sub UserForm_Initialize()
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("C:\BaseDeDonnee\BaseDeDonnee.mdb")
Set rs1 = db.OpenRecordset("Projets", dbOpenTable)
Set rs2 = db.OpenRecordset("Projets_Missions", dbOpenTable)
Set rs3 = db.OpenRecordset("Missions", dbOpenTable)
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 3 nov. 2006 à 17:35
dans la page de propriétés de la listview, tu vas à l' onglet Column et tu cliques sur insérer une colonne.
Insères en deux.
ensuite
pour l' erreur j' ai compris ou elle se situe
....
Dim i as integer
rs3.MoveFirst
i=0
Do While Not rs3.EOF
i=i+1
ListView1.ListItems.Add i , , rs3![CodeMission] '1° colonne
ListView1.ListItems(1).SubItems(1) = rs3![LibelleMission] '2° colonne
rs3.MoveNext
Loop
macroVB
Messages postés26Date d'inscriptionlundi 18 septembre 2006StatutMembreDernière intervention11 mai 2007 3 nov. 2006 à 21:26
j'ai essayé donc cela
Dim i As Integer
rs3.MoveFirst
i = 0
Do While Not rs3.EOF
i = i + 1
ListView1.ListItems.Add i, , rs3![CodeMission]
ListView1.ListItems(1).SubItems(1) = rs3![LibeleMission]
rs3.MoveNext
Loop
ca marche a peu pres sauf que pour la deusieme colonne il ne m'affiche qu'une seule ligne, la derniere c'est a dire ma 12eme mission et pas les autres !
en tout cas cela me permettrai d'afficher ma liste des missions mais reste le vrai probleme comme faire le choix ?? si je veux choisir les missions correspondant a un projet ??? au cas de creation de projet ?
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 3 nov. 2006 à 21:38
Re bonsoir,
oui effectivement, c' est stupide de ma part
ListView1.ListItems(i).SubItems(1) = rs3![LibeleMission]
puisque ' i ' représente la ligne.
Pour les choix, si tu as configuré ta listview avec la propriété
CheckBox=True, tu devrais avoir à gauche de chaque ligne
la case à cocher.
ça fonctionne comme un CheckBox classique, un coup tu coches,
un coup tu decoches.
Au moment de la validation, le programme va inserer dans ta table
les missions cochées.
A demain peut être
T' as eu de la chance avec ce dernier post !
j' étais sur le point de sortir