scortek
Messages postés61Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention 1 août 2007
-
27 mars 2007 à 15:03
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
28 mars 2007 à 12:16
J'ai un code de ce type, qui me permet de prendre ce qui m'intéresse dans une chaine de caractères, entre 2 chaînes (ce qui est en rouge est ce qui change)
p = InStr(pid, "MFG:")
v = Mid(pid, p + Len("MFG:"))
p = InStr(v, ";")
MFG = Trim(Mid(v, 1, p - 1))
Text26.Text = MFG
Suivant quelle procédure où je me trouve, la variable pid change aussi, ainsi que MFG.
Puis-je transformer ceci en fonction facilement ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 27 mars 2007 à 17:25
Il n'est nul besoin d'y aller de byref ni de byval.
Il est par contre nécessaire de déclarer les types ...
Option Explicit
Private Sub Command1_Click()
Dim pid As String, MFG As String
pid = " je suis parti, au MFG: et voilà; j'en suis revenu"
MFG = word(pid, "MFG:", ";")
MsgBox MFG
End Sub
Public Function word(answer, a, b) As String
Dim p As Integer, v As String
p = InStr(answer, a)
v = Mid(answer, p + Len(a))
p = InStr(v, b)
word = Trim(Mid(v, 1, p - 1))
End Function
scortek
Messages postés61Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention 1 août 2007 27 mars 2007 à 16:43
Public Function word(ByRef answer As String, a As String, b As String) As String
p = InStr(answer, a)
v = Mid(answer, p + Len(a))
p = InStr(v, b)
word = Trim(Mid(v, 1, p - 1))
End Function
Sub Click()
Dim MFG as string
MFG = word(pid, "MFG:", ";")
Text1.Text = MFG
End Sub
Je n'arrive toujours pas, il y a une erreur ByRef sur pid !
Vous n’avez pas trouvé la réponse que vous recherchez ?
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 27 mars 2007 à 16:59
Salut, tu as bien déclaré pid et c'est égale à quoi?
Public Function word(ByVal answer As String, ByVal a As String, ByVal b As String) As String
p = InStr(answer, a)
v = Mid(answer, p + Len(a))
p = InStr(v, b)
word = Trim(Mid(v, 1, p - 1))
End Function
Private Sub CommandButton1_Click()
Dim MFG As String
Dim pid As String
pid = ?
MFG = word(pid, "MFG:", ";")
Text1.Text = MFG
End Sub
Drikce 06
Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
scortek
Messages postés61Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention 1 août 2007 27 mars 2007 à 17:55
Merci bien. 2 questions à part...
1) Par exemple, dans dans une chaine de variables, exemple pid = " je suis parti, au MFG: et voilà; j'en suis revenu", comment insérer des guillements, j'ai essayer Chr(34) mais ça ne passe pas non plus.
2) Normalement, lorsqu'on fait un Public Sub, toutes les variables dans la procédure peuvent être réutilisées dans une autre procédure n'est-ce pas, or je n'y arrive pas avec commondialog, et en plus il me fait un erreur 424 !!
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 27 mars 2007 à 18:02
Question par question :
Que veut dire la premère, exactement ?
Tu voudrais écrire une variable dont le texte ressemblerait à ceci ?
toto = "bonjour les amis ! j'ai le "blues", ce soir" ???
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 27 mars 2007 à 18:27
Ta 2ème question était :
"2) Normalement, lorsqu'on fait un Public Sub, toutes les variables dans la procédure peuvent être réutilisées dans une autre procédure n'est-ce pas, or je n'y arrive pas avec commondialog, et en plus il me fait un erreur 424 !!"
Je ne comprends tout-à-fait ce que tu veux dire et/ou obtenir ...
Détaille avec précision, car je vois mal de quoi il s'agit ...
veux-tu parler d'une valeur qui serait retournée par l'utilisation du contrôle CommonDialog ? et si oui : laquelle ?
scortek
Messages postés61Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention 1 août 2007 27 mars 2007 à 20:23
En faite, j'ai plusieurs procédures :
Public Sub OK()
[...]
MFG = word(pid, "MFG:", ";")
MsgBox MFG
[...]
Call read
End Sub
Public Sub read()
[...]
OPC = word(answer, "OPC=", vbCrLf)
MsgBox OPC
[...]
End Sub
Public Sub Save()
Dim Fichier AsString
CommonDialog.Filter = "Comma Separated Value (*.CSV) | *.CSV"
CommonDialog.ShowSave
Fichier = CommonDialog.FileName
If Fichier <> "" Then
Open Fichier For Output As #1
Print #1, "DATE" & "," & "HEURE" & [....]
Close #1
Open Fichier For Appen As #1
Print #1, Date & "," & Time & "," & MFG [....]
Close #1
EndIf
End Sub
Et c'est dans sub save que je n'arrive pas à enregistrer les variables qui sont dans les autres procédures, et ça me fait erreur objet également.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 27 mars 2007 à 20:55
Euh....
Il y a là énormément d'interrogations, ma foi ...
A commencer par celle-ci :
ouvrir 2 fois de suite un fichier pour y écrire, une fois en "direct" et la seconde en "ajout" ... je ne comprends pas l'odée directrice, là....
ensuite : j'espère que le code que tu ne montres ne résulte pas d'un copier coller ! car ke ne connais pas "For Appen"....
ensuite :
je vois bien d'où vient le nom du fichier de sauvegarde (de l'utilisation du contrôle CommonDialog) et je vois bien les textes purs qui y sont inscrits. Je comprends bien que date et time (valeurs système) sont reconnues... mais, à moins que la variable MFG n'ait été déclarée comme publique (et je sais que non compte tenu des messages précédents), MFG sera vide !!!
ensuite :
j'espère que le reste, schématisé ici par des ..... ne sont pas des variables non publiques elles aussi...
enfin :
Je ne comprends pas vraiment l'idée d'ouvrir une commondialog Box pour choisir un fichier, dans ce qui semble être ton cas de figure (mémorisation dans un fichier texte de certaines valeurs, pour les retrouver... ce fichuer me parait alors pouvoir être toujours le même... comment le retrouver, sinon ?)
En conclusion : il me semble que tu t'en vas tout droit vers un mur pour avoir voulu mettre les boeufs avant la charrue...
Ce n'est plus une correction de ton code, qui semble ici nécessaire, mais l'apprentissage même des notions premières, à commencer par la philosophie des mécanismes mis en place.
Et si tu recommencer depuis zéro, en faisant, petit à petit, des mini-projets pour ne gérer qu'un seul point à la fois ? (tu y gagneras sans aucun doute, à mon sens)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 28 mars 2007 à 02:37
Une variable Public est reconnue dans les autres procédures si elle est déclarée en dehors des procédures. Et elle est reconnue partoutdans le programme si elle est déclarée en dehors des procédures et dans un Module standard.
scortek
Messages postés61Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention 1 août 2007 28 mars 2007 à 08:49
Merci, fallait donc les déclarer en public, et les rappeler après, par exemple "nom du form ou du module"."nom de la variable".
Sinon, je voulais dire For Append As, qui permet d'crire à la fin d'un fichier, normalement et qui ne réécri pas.
En fait je veux toujours utiliser le même fichier, et à chaque fois compléter ce CSV à la fin par d'autres nouvelles valeurs.
Ce fichier sera exploité par la suite dans une base de donnée Access ou autre.
Le soucis que j'ai est comment savoir dans le fichier qu'une ligne est déjà écrite, pour éviter de la réécrire deux fois ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 28 mars 2007 à 12:16
La seule façon que je vois est de relire le fichier ligne par ligne et tester si la donnée est déjà là. À moins que tu n'utilises une variable pour stocker tout ton fichier. À ce moment, c'est la variable que tu liras pour rechercher l'existence de la valeur à rajouter...