Visual Basic 6

emmy_0444 Messages postés 8 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 15 décembre 2004 - 6 déc. 2004 à 17:41
emmy_0444 Messages postés 8 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 15 décembre 2004 - 14 déc. 2004 à 11:07
Hyper débutante en VB 6!!!!
J'aimerai savoir comment extraire et entrer des données dans un fichier type random. Notre fichier s'appelle base_appli.txt, les premières lignes de ce fichier txt sont comme ça :
1;"Chlo, de potassium";240;400001;"GAMBRO"
2;"Chlo, de sodium";120;400001;"GAMBRO"
3;"Glucose";20;400004;"OPTICAT"
4;"Flex Glucosé 10 %";25;400002;"BAXTER"
5;"Flex Glucosé 5%";300;400003;"PHARMACIE DU CENTRE HOSPITALIER"
6;"Calcium amp,";140;400003;"PHARMACIE DU CENTRE HOSPITALIER"

On voudrait par exemple mettre le code du produit (1.2.3.4.5.6) et que le reste des éléments correspondant au code de ce produit s'affiche!!

10 réponses

cs_nr Messages postés 164 Date d'inscription mardi 16 décembre 2003 Statut Membre Dernière intervention 11 juillet 2005
6 déc. 2004 à 18:04
Salut,

Il faut utiliser une petite base de données type access. Ensuite tu peux créer ton interface sous vb pour extraire les données, tu peux même faire des tries pour chacun des éléments etc...
Regarde sur ce site dans la rubrique "base de données" ou "access" tu trouveras ton bonheur. Sinon hésite pas à répondre sur ce poste.

@+
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
6 déc. 2004 à 18:59
Salut Emmy,

tout dépend comment tu va présenter ton application, par les listes déroulantes, etc... Dans tous les cas tu peux travailler soit avec ton fichier text, il te suffit juste de savoir ou départager les zones, apparement (d'après ce que j'en ai vu) tes zones sont séparées par des ';'

Chris...
Web : Firstruner - eMail : [mailto:support@firstruner.com Support]
0
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
6 déc. 2004 à 23:02
Salut emmy_0444,

voici comment je vois les choses .... (attention les yeux, j'ai pas fait light).
Tous les commentaires sont dans le code :

' Déclaration d'un nouveau type
Public Type tProduits
Code As String ' Code de produit
Nom As String ' Nom (avec "")
ID As String ' ID
Ident As String ' Ident
Client As String ' Client (avec "")
End Type

' Déclaration d'un tableau de tProduits publique
Dim MesProduits() As tProduits

' Déclaration du compteur de Produits dans le tableau
Dim NbProduits As Integer

' Fonction d'import de données
' Lit le fichier texte et enrichi le tableau de produits
Public Sub ImportDonnees()
Dim NomFichier As String ' Nom du fichier source
Dim NumFile As String ' ID de fichier libre pour les flux
Dim Ligne As String ' Ligne lue dans le fichier
Dim posD, PosF As Integer ' Position des délimiteurs de texte

' Init du nom de fichier, à modifier selon le besoin
NomFichier = "d:\applis\dev\chimie\base_appli.txt"
' Récupération d'un index libre de fichier
NumFile = FreeFile

' Ouverture du fichier en mode lecture
Open NomFichier For Input As NumFile
' Init du nb de produits en catalogue
NbProduits = 0

' boucle sur l'ensemble du fichier
Do While Not EOF(NumFile)
' Récupération de la ligne texte
Line Input #NumFile, Ligne

' Astuce : positionner un ; à la fin de la ligne pour récupérer le dernier champ
' (évite le right)
Ligne = Ligne & ";"
' Redimmensionne le tableau afin de gérer au mieux la mémoire
ReDim Preserve MesProduits(NbProduits)

' Init des index PosD & PosF
' PosD = 1 car début de ligne
posD = 1
' PosF récupère la 1ère situation de ; après posD
PosF = InStr(1, Ligne, ";")
' Le code récupère le texte écrit entre les 2 pos
MesProduits(NbProduits).Code = Mid(Ligne, 1, PosF - posD)
' de même pour les autres champs
posD = PosF
PosF = InStr(posD + 1, Ligne, ";")
MesProduits(NbProduits).Nom = Mid(Ligne, posD + 1, PosF - posD - 1)
posD = PosF
PosF = InStr(posD + 1, Ligne, ";")
MesProduits(NbProduits).ID = Mid(Ligne, posD + 1, PosF - posD - 1)
posD = PosF
PosF = InStr(posD + 1, Ligne, ";")
MesProduits(NbProduits).Ident = Mid(Ligne, posD + 1, PosF - posD - 1)
posD = PosF
PosF = InStr(posD + 1, Ligne, ";")
MesProduits(NbProduits).Client = Mid(Ligne, posD + 1, PosF - posD - 1)

' a noter que pour les 2 champs récupérés avec les ", on pourrait les supprimer automatiquement
' avec MesProduits(NbProduits).Nom = replace(Mid(Ligne, posD + 1, PosF - posD - 1),";","")

' Ajoute le code trouvé à la liste
Forms!essai!Codes_Liste.AddItem MesProduits(NbProduits).Code
' Incrémente le compteur de produits trouvés
NbProduits = NbProduits + 1
Loop

' Ferme le fichier
Close #NumFile
End Sub

' Procédure d'affichage de données
Public Sub AfficheDonnees()
Dim i As Integer

' Parcourt tous le catalogue
For i = 1 To NbProduits
' Si le code trouvé est celui affiché dans la combo, alors affiche les champs qui vont bien
If Forms!essai!Codes_Liste = MesProduits(i - 1).Code Then
Forms!essai!Nom.Value = MesProduits(i - 1).Nom
Forms!essai!ID = MesProduits(i - 1).ID
Forms!essai!Ident = MesProduits(i - 1).Ident
Forms!essai!Client = MesProduits(i - 1).Client
Exit Sub
End If
Next i
End Sub

Voila voila, livré avec aspirine & vitamine C.

cela implique que tu aies créé un formulaire avec un combobox nommé Codes_Liste, et 4 champs textes nommés Nom, ID, Ident, Client.
Tu colles ImportDonnees dans le chargement de ton formulaire, et le AfficheDonnees sur le ComboBox_AfterUpdate, ou BeforeUpdate

si tu as des questions concernant le code, hésites pas à demander
Bon courage,

Guich
0
emmy_0444 Messages postés 8 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 15 décembre 2004
8 déc. 2004 à 16:03
J'ai commençé à travailler le code que tu m'as fourni, mais je ne comprends pas tout, à la fin tu me dis de coller ImportDonnees dans le chargement du formulaire, et le AfficheDonnees dans le ComboBox_AfterUpdate ou BeforeUpdate, je ne comprens pas bien ce que ça veux dire????
Désolée de te solliciter à nouveau, merci!!
Emi
0

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

Posez votre question
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
8 déc. 2004 à 17:13
Bonjour Emmy_0444,

Logiquement tu dois disposer d'un formulaire sur lequel tu as tes contrôles (un pour choisir ton code, les autres pour afficher les infos correspondantes).
Ou alors c'est que j'ai pas compris dans quel environnement tu veux te retrouver ...

donc si tu as un formulaire, tu doit avoir un événement correspondant au chargement ==> Form1_Load ()
tout ce que tu metteras dans cette procédure sera exécuté au chargement du formulaire (juste avant l'affichage du formulaire).
C'est là qu'il faut mettre le importdonnees car il initialisera la liste des codes dispos
> tu doit te retrouver avec
Private Sub Form_Load()
     ImportDonnees()
End Sub
.

Sur ce même formulaire, tu dois disposer d'une combobox qui va te permettre de sélectionner ton code, cela aura pour action d'afficher les infos correspondantes dans les autres contrôles.
Tu dois avoir un événement correspondant à la mise à jour du combobox c'est là qu'il faut gérer l'affichage des infos en conséquence de la valeur choisie
> tu doit te retrouver avec
Private Sub ComboBox_AfterUpdate()
     AfficheDonnees()
End Sub
.

Normalement ça devrait rouler.

J'espère avoir été clair cette fois.
Si c'est pas le cas, hésite pas à me demander.
Si j'ai mal compris ton besoin, explique moi ce que tu veux exactement.

Guich
0
emmy_0444 Messages postés 8 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 15 décembre 2004
9 déc. 2004 à 09:00
Je comprends tout à fait ce que tu veux dire et c'est tout à fait ça que je veux réaliser, mais je le sais, je suis vraiment trop trop nulle, alors je me permets de te dder encore deux trucs,:
1/d'abord quand je mets ce que tu m'as dit dans mon form 2 à savoir :

Private Sub Form_Load()
ImportDonnees()
End Sub

et

Private Sub ComboBox_AfterUpdate()
AfficheDonnees()
End Sub

Avec biensur le nom de mon combobox et le nom de ma form, il ne reconnait pas ImportDonnees et AfficheDonnees, il les mets en rouge!!
Je ne sais pas comment ça se fait??

Et je voudrais savoir pourquoi on mets ComboBox suivi de AfterUpdate()

2/ Et enfin quand tu mets

Forms!essai!Codes_Liste.AddItem MesProduits(NbProduits).Code

If Forms!essai!Codes_Liste = MesProduits(i - 1).Code Then
Forms!essai!Nom.Value = MesProduits(i - 1).Nom
Forms!essai!ID = MesProduits(i - 1).ID
Forms!essai!Ident = MesProduits(i - 1).Ident
Forms!essai!Client = MesProduits(i - 1).Client

Qu'est-ce que je dois mettre à la place de
Form!essai!
?????

Je sais que mes questions doivent paraître stupides, pourtant j'essaye vraiment de comprendre!!
Bon, désolée de te redemander encore qql chose!!
Merci bcp!!
0
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
9 déc. 2004 à 10:31
Salut,

Pour commencer, il faut qu'on pose les bases.
Je considère une question comme CON à partir du moment où j'ai déjà donner la réponse à celui qui me la pose.
Tu es débutante en VB (et peut être même en dév) c'est donc normal que tu comprennes pas des trucs qui, pour nous, semblent logiques.
Moi quand j'ai commencé, j'avais pas Internet, j'avais pas de bouquin, je connaissais un mec qui faisait du dev, donc oui, lui il a morflé car je le soulais de question.
Et maintenant je renvoie l'ascenseur autant que je peux.
Donc je connais bien ta situation.
Voila pour l'historique.

Maintenant, au code !!!
Je vais répondre à tes 2 questions en même temps car elles sont plus ou moins liées.

Le tout est de savoir comment tu as déclaré les routines ImportDonnees & AfficheDonnees.

1°) Si tu les mets dans le même module que ton formulaire, en gros à la suite du code affecté aux événements click, change, afterupdate, etc ..., tu peux les déclarer comme
Private Sub ImportDonnees()
&
Private Sub AfficheDonnees()
. Elles ne seront accessibles que depuis ce formulaire, et dans ce cas tu peux remplacer Forms!essai! par Me! (Me remplaçant l'objet actif, dans ce cas c'est le formulaire).

2°) Si tu les mets dans un module indépendant (module standard il me semble), tu dois les déclarer comme
Public Sub ImportDonnees()
&
Public Sub AfficheDonnees()
.
Elles seront accessibles depuis tous les éléments du projet, et dans ce cas tu dois indiquer où se trouvent les contrôles que tu veux manipuler. Ici, Forms!essai pointe vers un formulaire nommé essai (classique dans les bouts de code d'exemple, entre essai, toto, je manque un peu d'imagination). Tu dois donc remplacer essai par le nom de ton formulaire. S'il s'appelle ProduitsChimiques tu dois saisir
Forms!ProduitsChimiques!
. Attention, si tu as un espace ou un caractères à la con dans le nom de ton form ou d'un contrôle, il faut mettre un truc du genre
Forms![Produits Chimiques]!
ou
Forms!["Produits Chimiques"]!
.

Voila, ça devrait te permettre d'avancer un peu sur ton projet.

Si tu bloques plus loin, ou si t'as toujours des questions sur ce sujet, hésite pas.

Bon courage,
Guich
0
emmy_0444 Messages postés 8 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 15 décembre 2004
9 déc. 2004 à 17:03
Merci pour toutes ces infos effectivement comme ça, ça paraît beaucoup plus simple, c'est grâce à toi, merci!!!
Bon, ben je vais continuer mon projet!!!
Merci!!!
Emi
0
gandalflegris007 Messages postés 211 Date d'inscription lundi 31 mars 2003 Statut Membre Dernière intervention 11 juin 2007
10 déc. 2004 à 09:47
De rien, on est là pour ça.

Bon courage
0
emmy_0444 Messages postés 8 Date d'inscription samedi 4 décembre 2004 Statut Membre Dernière intervention 15 décembre 2004
14 déc. 2004 à 11:07
Salut!

Je voudrai te poser une question, voilà j'ai bien écrit mon code, ça marche pour l'instant, mais il y a une chose que je n'arrive pas à faire, voilà quand je vends un produit ou quand j'en achète un, celui-ci doit se retirer (si je vends) ou se rajouter (si j'achète) de ma form stock total de produit. Est-ce que tu aurais par hasard une idée??? Merci bcp !!!!!!
Emi
0
Rejoignez-nous