Checkbox Access : nom variable
Résolu/Fermé
sarah3854
-
29 juil. 2010 à 10:47
lys44 Messages postés 57 Date d'inscription mardi 25 mai 2010 Statut Membre Dernière intervention 21 mars 2011 - 30 juil. 2010 à 09:42
lys44 Messages postés 57 Date d'inscription mardi 25 mai 2010 Statut Membre Dernière intervention 21 mars 2011 - 30 juil. 2010 à 09:42
A voir également:
- Checkbox Access : nom variable
- Quick access service - Forum Logiciels
- Access appdata - Guide
- Bios access - Guide
- You don't have permission to access this resource.server unable to read htaccess file, denying access to be safe ✓ - Forum Debian
- Exemple base de données access à télécharger gratuit ✓ - Forum Logiciels
8 réponses
lys44
Messages postés
57
Date d'inscription
mardi 25 mai 2010
Statut
Membre
Dernière intervention
21 mars 2011
5
29 juil. 2010 à 11:21
29 juil. 2010 à 11:21
Bonjour,
Est ce que pourrais mettre ton code en entier stp, histoire de comprendre dans son ensemble ton code relatif aux CHB!
Sinon au lieu de faire un énorme IF imbriqué d'autres if, perso je préfère utiliser un SELECT CASE, le code est de ce fait plus clair je trouve :)
Exemple :
Ici cette procédure est lancée si tu sélectionnes la CHB Blabla.
Ma combobox est remise à zéro, puis j'y ajoute les éléments correspondants à la CHB blabla. Enfin je donne une valeur à choixCheckBox, valeur qui est une constante.
(Public const Blabla = 0)
Ensuite dans un autre événement (par exemple lorsque l'on clique sur un bouton confirmant le choix) je recherche la CHB cochée avec un select case :
Perso je préfère coder de manière séquentielle avec un SELECT plutôt qu'avec un IF ^^.
Après chacun ses goûts!!
(Bon moi je code en vb.net mais cela ressemble sur quelques points quand même au VBA sur Access :) )
Est ce que pourrais mettre ton code en entier stp, histoire de comprendre dans son ensemble ton code relatif aux CHB!
Sinon au lieu de faire un énorme IF imbriqué d'autres if, perso je préfère utiliser un SELECT CASE, le code est de ce fait plus clair je trouve :)
Exemple :
Private Sub CHB_blabla_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CH_blabla.CheckedChanged If Me.CHB_blabla.Checked = True Then Me.CB_blabla.Text = "" Me.CB_blabla.Items.Clear() Me.CB_blabla.Items.Add("Bonjour") etc etc choixCheckbox =Blabla End If End Sub
Ici cette procédure est lancée si tu sélectionnes la CHB Blabla.
Ma combobox est remise à zéro, puis j'y ajoute les éléments correspondants à la CHB blabla. Enfin je donne une valeur à choixCheckBox, valeur qui est une constante.
(Public const Blabla = 0)
Ensuite dans un autre événement (par exemple lorsque l'on clique sur un bouton confirmant le choix) je recherche la CHB cochée avec un select case :
SELECT CASE choixCheckBox case Blabla ton action case etc END SELECT
Perso je préfère coder de manière séquentielle avec un SELECT plutôt qu'avec un IF ^^.
Après chacun ses goûts!!
(Bon moi je code en vb.net mais cela ressemble sur quelques points quand même au VBA sur Access :) )
Voilà mon code (en partie), le but final est de copier une table (tablsource) dans une autre (tabldest) si la case correspondante à la table est cochée
For i = 1 To 26
If i = 1 Then
coche = "defin"
tablsource = "defprojet"
tabldest = "tbl_surf"
ElseIf i = 2 Then
coche = "progeng"
tablsource = "EngProgress"
tabldest = "TblProgEng"
....
If coche.Value = True Then
'on vérifie que la table destinataire ne contient pas déjà des données du projet
Set tdest = pb.OpenRecordset("" & tabldest & "", dbOpenTable)
tdest.MoveFirst
nproj = tdest.RecordCount
For j = 1 To nproj
If tdest("Activity_number_surf") <> proj Then
tdest.MoveNext
Else
'on supprime la ligne
record.Delete
tdest.MoveNext
End If
Next j
tdest.AddNew
tdest.Fields(0) = proj
DoCmd.OpenTable "" & tablsource & ""
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.OpenTable "" & tabldest & ""
DoCmd.GoToRecord , , acNewRec
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
DoCmd.RunCommand acCmdSaveRecord
DoCmd.Close acTable, "" & tabldest & ""
End If
Next i
et donc c'est coche.value qui ne marche pas
(d'ailleurs pour supprimer un record la commande record.delete ne marche pas, donc au passage si vous asavez aussi pour ca..)
Merci
For i = 1 To 26
If i = 1 Then
coche = "defin"
tablsource = "defprojet"
tabldest = "tbl_surf"
ElseIf i = 2 Then
coche = "progeng"
tablsource = "EngProgress"
tabldest = "TblProgEng"
....
If coche.Value = True Then
'on vérifie que la table destinataire ne contient pas déjà des données du projet
Set tdest = pb.OpenRecordset("" & tabldest & "", dbOpenTable)
tdest.MoveFirst
nproj = tdest.RecordCount
For j = 1 To nproj
If tdest("Activity_number_surf") <> proj Then
tdest.MoveNext
Else
'on supprime la ligne
record.Delete
tdest.MoveNext
End If
Next j
tdest.AddNew
tdest.Fields(0) = proj
DoCmd.OpenTable "" & tablsource & ""
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
DoCmd.OpenTable "" & tabldest & ""
DoCmd.GoToRecord , , acNewRec
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
DoCmd.RunCommand acCmdSaveRecord
DoCmd.Close acTable, "" & tabldest & ""
End If
Next i
et donc c'est coche.value qui ne marche pas
(d'ailleurs pour supprimer un record la commande record.delete ne marche pas, donc au passage si vous asavez aussi pour ca..)
Merci
lys44
Messages postés
57
Date d'inscription
mardi 25 mai 2010
Statut
Membre
Dernière intervention
21 mars 2011
5
Modifié par lys44 le 29/07/2010 à 14:30
Modifié par lys44 le 29/07/2010 à 14:30
Hum, essaye quelque chose comme ceci:
Tu cherches enfait si coche a une valeur, c'est ça?
Donc s'il a une valeur, et vu qu'il est de type string, c'est qu'il y a des caractères!
D'où mon Length qui va compter le nombre de caractères ;)
J'ai trouvé ça sinon pour ton delete...
IF coche.Length > 0 THEN etc etc etc END IF
Tu cherches enfait si coche a une valeur, c'est ça?
Donc s'il a une valeur, et vu qu'il est de type string, c'est qu'il y a des caractères!
D'où mon Length qui va compter le nombre de caractères ;)
J'ai trouvé ça sinon pour ton delete...
Dim Dbase As Database Dim mysql As QueryDef Set Dbase = CurrentDb() 'Supprime les requêtes ce nommant Requête_Supp, c'est pour exécuter ce code a plusieur reprise. On Error Resume Next mydb.QueryDefs.Delete ("Requête_Supp") On Error GoTo 0 Set mysql = Dbase.CreateQueryDef("Requête_Supp", "DELETE FROM [Nom_Table] WHERE [CONDITION] ;") DoCmd.OpenQuery "Requête_Supp"
coche correspond au nom d'un checkbox (défini suivant les différents cas de i)
je veux vérifier si la case est cochée
je veux vérifier si la case est cochée
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lys44
Messages postés
57
Date d'inscription
mardi 25 mai 2010
Statut
Membre
Dernière intervention
21 mars 2011
5
29 juil. 2010 à 14:45
29 juil. 2010 à 14:45
Tu pourrais essayer quand meme avec un Select case, ca fait un code + propre et plus simple à comprendre je trouve... comme ci-dessous, après c'est mon avis perso:
Par contre je ne comprend pas ton FOR i = 1 to 26 ...
Car avec ça tu vas faire 26 boucles, obligatoirement.
Cependant tu veux savoir qu'elle case est cochée... donc ce qui veut dire que tu veux faire la boucle qu'une seule fois...
Explique moi stp
SELECT CASE i Case 1 coche = "defin" 'Ici coche prend une valeur de type "texte" tablsource = "defprojet" tabldest = "tbl_surf" Case 2 coche = "progeng" tablsource = "EngProgress" tabldest = "TblProgEng" .... END SELECT 'A la fin du SELECT, si une CHB a été cochée, coche a forcément une valeur, et c'est du texte. If coche.Length > 0 Then 'Si coche contient + de 0 caractères, donc s'il contient quelquechose 'on vérifie que la table destinataire ne contient pas déjà des données du projet Set tdest = pb.OpenRecordset("" & tabldest & "", dbOpenTable) tdest.MoveFirst nproj = tdest.RecordCount For j = 1 To nproj If tdest("Activity_number_surf") <> proj Then tdest.MoveNext Else 'on supprime la ligne record.Delete tdest.MoveNext End If Next j tdest.AddNew tdest.Fields(0) = proj DoCmd.OpenTable "" & tablsource & "" DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdCopy DoCmd.OpenTable "" & tabldest & "" DoCmd.GoToRecord , , acNewRec DoCmd.RunCommand acCmdSelectRecord DoCmd.RunCommand acCmdPaste DoCmd.RunCommand acCmdSaveRecord DoCmd.Close acTable, "" & tabldest & "" End If
Par contre je ne comprend pas ton FOR i = 1 to 26 ...
Car avec ça tu vas faire 26 boucles, obligatoirement.
Cependant tu veux savoir qu'elle case est cochée... donc ce qui veut dire que tu veux faire la boucle qu'une seule fois...
Explique moi stp
c'est vrai que select serait moins lourd, je ferai le changement
par contre, désolé mais en ce qui concerne la vérification du "cochage" de la case je ne comprend pas
si i=1 je lui dit coche ="defin", que la case soit cochée ou non
pour chaque cas de i (que je fais défiler de 1 à 26) je veux vérifier que la case est cochée, il faut bien que j'utilise .value, non?
merci
par contre, désolé mais en ce qui concerne la vérification du "cochage" de la case je ne comprend pas
si i=1 je lui dit coche ="defin", que la case soit cochée ou non
pour chaque cas de i (que je fais défiler de 1 à 26) je veux vérifier que la case est cochée, il faut bien que j'utilise .value, non?
merci
lys44
Messages postés
57
Date d'inscription
mardi 25 mai 2010
Statut
Membre
Dernière intervention
21 mars 2011
5
29 juil. 2010 à 15:30
29 juil. 2010 à 15:30
Et si dans chacun de tes cas i, tu vérifiais si la CHB est cochée?
Du style :
Puis au lieu de ton coche.value :
Du style :
Dim caseCoche as integer = 0 FOR i = 1 to 26 SELECT CASE i Case 1 coche = "defin" tablsource = "defprojet" tabldest = "tbl_surf" IF chechbox_1.checked = true then caseCoche = 1 END IF Case 2 coche = "progeng" tablsource = "EngProgress" tabldest = "TblProgEng" IF chechbox_2.checked = true then caseCoche = 1 END IF ... END SELECT
Puis au lieu de ton coche.value :
IF caseCoche <> 0 THEN 's'il est sup à 0, c'est qu'une case a été cochée ton code ELSE : msgbox("Il n'y a aucune case de cochée!!") END IF NEXT i
Oui merci je pense que je devrais y arriver en faisant comme ca.
Merci beaucoup pour cette aide
Merci beaucoup pour cette aide
lys44
Messages postés
57
Date d'inscription
mardi 25 mai 2010
Statut
Membre
Dernière intervention
21 mars 2011
5
30 juil. 2010 à 09:42
30 juil. 2010 à 09:42
Et bien écoute, de rien ;)
C'est instructif pour moi aussi, car je ne connais pas le vba, je me suis donc un peu penchée sur ton code :)
En espérant que ça roule maintenant ton code,
Bonne programmation!!
C'est instructif pour moi aussi, car je ne connais pas le vba, je me suis donc un peu penchée sur ton code :)
En espérant que ça roule maintenant ton code,
Bonne programmation!!