ListBox avec la propriété Style à CheckBox

Résolu
chouchou270403 Messages postés 46 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 30 octobre 2007 - 27 mars 2007 à 23:12
 najnoujj - 20 juil. 2008 à 14:37
Bonsoir à tous, j'ai déjà parcouru le forum et les codes sans trop de succès je me permets donc de vous poser clairement ma question.

Je développe un projet en VB6. Ce projet à pour but d'imprimer des étiquettes par rapport à un état créé avec CrystalReport !

Mon problème se pose au niveau de la sélection des personnes que j'aimerais imprimer. Au fait une liste des personnes est affichée dans une ListBox qui a la propriété Style à Checkbox. J'aimerais grâce à un bouton pouvoir tout cocher comme lorsque l'on rempli un formulaire... Mais aussi pouvoir tout décocher !

Autre chose que je me demande, comment faire une fois mes ittem sélectionnés, récupérer mes données et par rapport à cela savoir imprimer que ce que j'ai selectionné !

J'espère avoir été clair dans ma demande si pas je ferais mon possible pour vous fournir d'autre informations !

Merci beaucoup d'avance J-il

30 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
28 mars 2007 à 00:10
Bonsoir,


sélectionner tout


For i=0 to List1.ListCount-1
  List1.Selected(i) = True
Next


désélectionner tout


For i=0 to List1.ListCount-1
  List1.Selected(i) = False
Next


Pour l' Etat
Fais en sorte que ton etat ait pour source une table temporaire que tu metS
à jour selon la sélection.
La source peut aussi être une requête sélection dont ferait partie.ta table temporaire
3
J_il Messages postés 109 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 9 septembre 2008
28 mars 2007 à 10:36
Bonjour, merci beaucoup pour tes informations cela fonctionne à merveille...

Mais je ne comprend pas ce que tu veux dire par état avec une table ????

Je suppose que tu veux dire que lorsque je sélectionne un item je dois les placer dans un tableau temporaire pour les récupérer c'ets bien ça ? Si oui pourrais-tu me donner quelques pistes ???

merci beaucoup bonnee journée J-il
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
28 mars 2007 à 12:21
Tu parles de VB6... est-ce bien VB6 ? ou VBA Excel ? ou VBA Access ?
J'ai pris l'habitude de demander parce que beaucoup de gens ne font pas la différence...

MPi
0
chouchou270403 Messages postés 46 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 30 octobre 2007
28 mars 2007 à 12:44
J'ai bien mis VB6 dans mon premier message
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
28 mars 2007 à 15:32
Bonjour et salut MPi,
Excuses moi CHOUCHOU,
je me suis peut être égaré  à propos de l' impression...
car toujours  quand j' entend Imprimer, vient tout de suite
à mon esprit  Etat lié à une base de données.
C' est que je travaille tout le temps avec Crystal Report
(déformation professionnelle !)
Ceci étant , je n' ai pas idée de ce que tu comptes utiliser
comme support .


 
0
J_il Messages postés 109 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 9 septembre 2008
28 mars 2007 à 15:42
Pas de problème Chaibat05... Je vais t'expliquer ce que mon application doit pouvoir faire.

Au fait j'ai une base de donnée acces avec une table qui s'appelle DONNEES et qui contient 5 champs : nom, prenom, adresse, code_postal et localite.

Ensuite mon interface doit me permettre d'ajouter des contacts dans la BDD (ça pas de problème tout fonctionne à merveille) mais aussi par rapport à cette base de données de pouvoir imprimer des étiquettes avec les coordonnées des personnes de la BDD.

Mais autre petite explication. Je dois pouvoir faire des étiquettes avec tous mes contacts ou bien pouvoir en sélectionner quelques uns. Ce qui fait que j'utilise une ListBox avec la propriété Style à Checkbox afin de pouvoir chocher les contacts que je veux imprimer sous forme d'étiquettes.

Mes problèmes sont au niveau de la création de l'état CrystalReport et du code pour mes sélection dans ma listbox !!!

Au finale si tout fonctionne, ben par rapport au choix de personne fait, une feuille de papier autocollante d'etiquettes sera imprimée avec les contacts...

J'espère que j'ai été clair cette fois-ci lol

Merci beaucoup de ton aide.

J-il
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
28 mars 2007 à 15:55
Tout à fait chouchou,
j' ai tout simplement confondu avec j-il qui s' est interrogé:
....   état avec une table ????




Si ton etat te permet d' editer tout les contacts 
alors  dans ta table temp tu insères les identifiants
des contacts selectionnés dans la list et tu fais une
liaison Table Temp ---> Table DONNEES sur CodeContact
(nom d' après l' exemple)
et spécifier dans la relation :
"Tout les enregistrements de table Temp et seulement ceux....etc


 
0
J_il Messages postés 109 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 9 septembre 2008
28 mars 2007 à 16:01
Au fait chouchou c'est moi, c'est mon autre compte... qui ne me sert plus et je me suis un peu embrouillé avec lol

Je suis désolé mais je ne comprend pas ce que je dois faire... je réflechi sur papier pour voir comment procéder à l'élaboration de ce programme mais je ne trouve aucune piste correcte...

J-il
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
28 mars 2007 à 16:20
ah bon c' est ça...!
Agent double en quelque sorte

Voilà ce que tu dois faire:
1° tu déclares ton recordset et tu le lies à Temp

2°tu parcours ta liste:
For i=0 To List1.Liscount-1
  If List1.Selected(i)=True Then
   xNom=List1.List(i)
     rs.AddNew
      rs![nom]=xNom
      rs.Update
   End if

Next

schema


TEMP         DONNEES
nom  --->     nom
                   prenom
                   adresse
                   code_postal
                   localite




et ton etat restera valable pout "Imprimer Tout"
si tu sélectionne tout


recommandation:
Vide toujours Temp avant d' insérer les items séléctionnés
0
J_il Messages postés 109 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 9 septembre 2008
28 mars 2007 à 16:23
Merci beaucoup de cette réponse, maintenant je vais essayer d'analyser afin de comprendre et puis me lancer dans la code... Je tiens au courant de la suite !

Merci J-il ou l'agence double mdr
0
J_il Messages postés 109 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 9 septembre 2008
28 mars 2007 à 16:35
Voila le code est plus ou moins compris... Mais il me donne des erreurs... ==> Méthode ou membres de données introuvables

Voici comment je fais dans un bouton !

On Error GoTo erreur 'Gestion des erreurs

Dim str_nom_prenom As String
Dim i As Integer

Set ws = DBEngine.Workspaces(0)                                                      'ouverture de l'espace de travail
Set ma_bdd = ws.OpenDatabase(bdd_etiquettes.DatabaseName)           'ouverture de la base de données
Set rst = ma_bdd.OpenRecordset("TABLE_TEMPORAIRE")                'ouverture du RecordSet

For i = 0 To list_box_choix_personne.Liscount - 1

  If list_box_choix_personne.Selected(i) = True Then
 
        str_nom_prenom = list_box_choix_personne.List(i)
        rst.AddNew
        rst!nom = str_nom_prenom
        rst.Update
     
   End If

Next

rst.Close
ma_bdd.Close
Workspaces(0).Close

Exit Sub
erreur:
    Call fct_journal_erreurs(Err.Number, Err.description, "bouton enregistrer un nouveau contact.")

J'espère que tu comprendras mon code ! Si pas je peux te mettre mon prog sur un ftp ou l'envoyer afin que tu puisse mieux comprendre !!!!

J-il
0
J_il Messages postés 109 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 9 septembre 2008
28 mars 2007 à 17:15
Petite modification cela fonctionne si je modifie la boucle for de cette manière :

For i = 0 To 8 - 1

  If list_box_choix_personne.Selected(i) = True Then
 
        str_nom_prenom = list_box_choix_personne.List(i)
        'str_nom_prenom = List1.List(List1.ListIndex)
        int_position = InStr(str_nom_prenom, Chr(32))
        str_nom = Left(str_nom_prenom, int_position - 1)
        str_prenom = Mid(str_nom_prenom, int_position + 1)
       
        rst.AddNew
        rst!nom = str_nom
        rst!prenom = str_prenom
        rst.Update
     
   End If

Next

Comme ceci je ne rencontre plus l'erreur.. et il m'ajoute bien dans ma table temporaire mes éléments
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
29 mars 2007 à 23:34
Bonsoir,
l' erreur était dans:
For i = 0 To list_box_choix_personne.ListCount - 1
Maintenant tu peux remplacer 7 par ça, c' est mieux...

A part ça , ça avance ton travail ?

A+
0
J_il Messages postés 109 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 9 septembre 2008
30 mars 2007 à 13:16
Bonjour, merci de m'avoir répondu mais j'avais trouvé l'erreur après quelques autres essais... mais merci tout de même !

Mon projet avance mais je bloque encore sur l'ajout des données dans la table temporaire ! Il ne m'ajoute que le nom et le prénom. Je ne sais pas comment faire pour que les autres informations comme l'adres, le code postal et la localité suivent ????

Je cherche et ne trouve pas lol comme dirais Ophélie !!!!

Si tu veux je peux mettre mon prog sur un ftp pour que tu puisse te rendre compte de ce que je fais et peut-être mieux comprendre ?

Sinon un grand merci de prendre des nouvelles comme ça c'est cool de pouvoir partager !

J-il
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
30 mars 2007 à 15:37
Bonjour,
je suis content que tu donnes suite,
car j' ai tenu absolument à te donner quelques recommandations:


1° Ne pas indexer ta table données sur Nom...ça t' as causé enormément
de problèmes .Dans le cas ou il y' aurait deux personnes avec le même Nom
Ceci t' a poussé à rajouter le Prenom.Problème, ta table DONNEES étant indéxée
sur Nom., il n' y ' aura pas de relation possible.


Solution:
- Rajouter une Colonne Code à ta table DONNEES (Recommandé )
-Ou bien utilises une requête dans la quelle tu génère un champ
  Nom_Prenom (Peu recommandé, il y' aura toujour possiblité de doublon !)


2° Dans ta table temporaire tu n' as pas besoin d' insérer tous las champs.
Ta table ne doit avoir qu' un champ, Il faut ajouter juste l' identifiant.
 Si l' identifiant est Code tu ajoute Code
Si c' est Nom_Prenom tu ajoutes Nom_Prenom
 schema


TEMP         DONNEES
CODE   --->  CODE
                   nom
                   prenom
                   adresse
                   code_postal
                   localite


ton rapprt comportera les champ
CODE  nom  prenom  adresse  code_postal  localite


Autre chose
utilise une list view au lieu d' une listbox, c' est plus
gérable quand tu dois afficher plusieures colonnes
Le principe de la selection reste le même.
Il faudra juste changer
List.Selected(i)=True
Par
ListView.ListItems(i).Checked=True


Réfléchis à ça, on verra ensuite


a+


 
0
J_il Messages postés 109 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 9 septembre 2008
30 mars 2007 à 15:43
Merci de ton suivi c'est super cool ici je suis en train de faire d'autre truc pour avancer un peu mais tu n'a pas une mauvaise idée du tout

Je te tiens au courant J-il
0
J_il Messages postés 109 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 9 septembre 2008
31 mars 2007 à 11:37
Bonjour à toi chaibat05, voilà c'est pour te dire que j'ai enfin réussit à mettre tous mes champs avec mes données dans la table temporaire et ce grâce à un champs mis en relation !

Je me suis donc atelé pour le moment à la gestion des erreurs et la gestion des controle afin que mon programme avance...

Maintenant je vais essayer de voir ce que je peux faire avec crystal report comme état pour faire des étiquettes a imprimer directement sur des vignettes autocollantes !

Je te souhaite un bon dimanche et de bonne vacances de pâques  J-il
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
31 mars 2007 à 12:19
Bonjour,
c' est bien !
Une fois terminé,n' oublies pas de poster ton code, ça pourra
servir peut être à d' autres.On pourra aussi voir si on peut l' optimiser.


Allez, bonne continuation et bonnes vacances à toi aussi....


Amitiés...
0
J_il Messages postés 109 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 9 septembre 2008
5 avril 2007 à 14:46
Bonjour chaibat05,

C'est pour te donner de mes news sur mon prog ! Voilà après des tests etc, j'ai quelques petits problème si je supprimes des enregistrements dans ma BDD.
Au fait comme c'est un auto incrémenté, il continue le numéro ce qui fait que si j'ai 8 enregistrements que je supprime tout, et que je rajoute un enregistrement il recommence à 9 jusque la c'est normal lol mais si j'essaie de faire la copie dans ma table temporaire pour l'impression, un bug apparait au niveau des relations et il ne veut pas me l'ajouter !

Donc pour le moment je ne supprime plus d'enregistrements et tout fonctionne lol

Sinon au niveau de la création de l'état pour le format d'étiquette je rame un peu à trouver dans crystalreport comment faire....

Je te tiens au courant de la suite du programme

Bonne fin de semaine J-il
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
5 avril 2007 à 16:25
Bonjour,
ton problème de BD vient sûrement du fait que
ton Identifiant est de Type Numéro Auto.
Remplaces le par Entier Long.Comme ça tu auras le choix
de IdClient lors de l' ajout ou la modification dans Table Clients.
(en faisant bien attention qu' il n' y est pas de doublon).
Pour ajouter un nouveau, il suffit de récupérer le dernier et de l' incrémenter.
Chose que tu ne peux pas faire avec N° Auto puisque tu ne peux pas affecter une
valeur à ce champ ni même le modifier.Et si quand tu supprimes tout, il reprend
à partir du dernier, c' est , je suppose, paece qu' il conserve cette valeur dans un
fichier Index lié à ta table


Si tu fais comme je t' ai proposé, avec la relation Clients --> Temporaire
tes lignes seront automatiquement mises à jour dans Temporaire.


Pour l' etat, il y' a une option "Etiquette"  dans  "Style de l' etat".
Sinon tu peux toujours le faire avec insertion de groupe = IdClient
et tu positionnes tes champs dans cette section en masquant ou en supprimant
toutes les autres sections...


Si tu n' as pas encore compris le système, voici donc comment tu dois procéder:


1° Nouvel Etat
2° Lié en premier à Temporaire (qui ne doit comporter q' un seul champ: IdClient)
3° Ajoutes la Table Clients (Menu/Ajouter une base de données et choisies ta table Clients)
4° Dans la liaison visuelle tu remarqueras que les deux tables seront automatiquement
liées sur IdClient
5° Ajoutes à ton Etat : Clients.Nom, Clients.Prenom, Clients.Adresse etc...


et le tour est joué...!


N' oublies pas que dans ton code et  avant chaque nouvelle sélection, tu dois vider
d' abord ta table Temporaire.
Ensuite dans Fichier/options de l' etat, décoches "Enregistrer les données avec l' Etat..."
Puis dans Etat/Mettre à jour avant chaque impression" .


Bon j' espère que ça ira comme ça...


Bonne continuation...


Amitiés


 


 


 


 


 




 
0
Rejoignez-nous