Créer une fonction

Résolu
scortek Messages postés 61 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 1 août 2007 - 27 mars 2007 à 15:03
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 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 ?

Merci beaucoup

16 réponses

drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
27 mars 2007 à 16:56
Moi je ferai plutôt ça:
Public Function word(ByVal answer As String, ByVal a As String, ByVal b As String) As String




 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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
3
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
27 mars 2007 à 15:21
Inspire-toi de cet exemple (que je n'ai pas voulu faire exactement correspondre à ton cas... pour te laisser un peu réfléchir)

Il te suffit d'analyser, comprendre et adapter !

Private Sub Command1_Click()
 Dim toto As String
 toto = "me voilà parti au marché"
 MsgBox machin(toto, "parti")
End Sub


Private Function machin(lachaine As String, lemot As String)
  machin = Mid(lachaine, InStr(lachaine, lemot) + Len(lemot) + 1)
End Function
0
scortek Messages postés 61 Date d'inscription mardi 4 mai 2004 Statut Membre Derniè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 !
0

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

Posez votre question
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
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:
0
scortek Messages postés 61 Date d'inscription mardi 4 mai 2004 Statut Membre Derniè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 !!
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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"  ???
0
scortek Messages postés 61 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 1 août 2007
27 mars 2007 à 18:05
Tout à fait
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
27 mars 2007 à 18:10
Private Sub Command2_Click()
  toto = "bonjour les amis, j'ai le ""blues"" ce soir"
  MsgBox toto
End Sub
0
scortek Messages postés 61 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 1 août 2007
27 mars 2007 à 18:19
Oups, désolé, j'avais posé la question trop vite
mais pour la 2ième je sèche encore...
Merci pour tout.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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 ?
0
scortek Messages postés 61 Date d'inscription mardi 4 mai 2004 Statut Membre Derniè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.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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)

Amitiés.


 
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 à 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.

MPi
0
scortek Messages postés 61 Date d'inscription mardi 4 mai 2004 Statut Membre Derniè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 ?
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: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...

MPi
0
Rejoignez-nous