chaudier37
Messages postés209Date d'inscriptionjeudi 5 août 2004StatutMembreDernière intervention15 juillet 2009
-
2 nov. 2008 à 21:16
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 2012
-
4 nov. 2008 à 08:17
bonjour
je travaille dans exel. j'ai fait un petit programme sympa, une calculette et quand je fais la somme on demande si le client veut une facture. si oui, je mets le tout dans un fichier texte. mais je dois voir d'abord si il est déja client.
alors pour inscrire le client dans le fichier texte je fais
Private Sub CommandButton1_Click()
Dim clients As String, montant As Integer
clients = InputBox("entrez le nom du client")
montant = InputBox("entrez le montant du client " & clients)
Open "clients" For Append As #1
Print #1, clients; vbTab; montant
Close #1
End Sub
et donc cela s'inscrit bien dans mon fichier texte. le problème est que je voudrais rappeler le fichier pour voir si le client est enregistré et je ne connais pas la syntaxe. la prochaine fois que le client durand apparait dans la facture je voudrais que cela s'inscrive dans sa colonne. et de plus, le client durand a commandé pour 100 euros. et la prochaine fois si le client durand commande pour 50 euros je voudrais que quand je fais inputbox cela mette durand 150 €
de plus j'ai remarqué que quand on fait inputbox la lecture se fait ligne par ligne. est ce que la lecture ne peut pas se faire par variable ?
merci. j'attends vos réponses avec impatience car je suis complètement coincée. j'ai beau lire tous les cours je ne comprends rien...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 2 nov. 2008 à 21:43
Bonjour,
Citation :
"je travaille dans exel
-----
........
j'attends vos réponses avec impatience car je suis complètement coincée. j'ai beau lire tous les cours je ne comprends rien..."
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 3 nov. 2008 à 05:27
Bonjour chaudier37
Si j'ai bien compris, tu veux afficher le cumul des factures précédentes. Si c'est le cas, peux-tu essayer le code ci-dessous ?
J'ai apporté quelques modifications à ton Sub afin de prendre en charge le bouton Annuler de tes deux InputBox.
Private Sub CommandButton1_Click()
Dim clients As String, montant As String
Dim clt As String, mont As Double, nomcli As String
Dim mntFacture As Double
Dim fic As String
fic = "clients"
mont = 0
clients = InputBox("entrez le nom du client")
If clients <> "" Then
If Dir(fic) <> "" Then
Open fic For Input As #1
Do Until EOF(1)
Line Input #1, clt
nomcli = Left(clt, InStr(1, clt, vbTab) - 1)
nomcli = Trim(LCase(nomcli))
If nomcli = Trim(LCase(clients)) Then
mntFacture = Val(Mid(clt, InStr(1, clt, vbTab) + 1))
mont = mont + mntFacture
End If
Loop
Close #1
End If
montant = InputBox("entrez le montant du client " & clients & _
IIf(mont <> 0, vbCrLf & vbCrLf & _
"Factures précédentes : " & CStr(mont) & " €", ""))
If montant <> 0 Then
Open fic For Append As #1
Print #1, clients; vbTab; montant
Close #1
End If
End If
End Sub
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 3 nov. 2008 à 07:40
Salut,
>[../auteur/OROHENA/1483575.aspx Orohena] : on préfèrera VbNUllString à "" On utilisera FreeFile pour savoir avec quel numéro de fichier on peu ouvrir Clients (qui soit dit en passant n'as pas de chemin ni d'extensions et qui n'est pas différents suivant Le client)
>[../auteur/CHAUDIER37/318404.aspx chaudier37] : Qu'en est il du lien que t'as proposé [../auteur/JMFMARQUES/615490.aspx jmfmarques]?
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 4 nov. 2008 à 02:48
Bonjour
Et bien non, Julien, dans ce cas précis on préfèrera "" à VbNullString ! L'aide en ligne de la fonction InputBox précise en effet :
Si l'utilisateur clique sur le bouton Annuler, la fonction renvoie une chaîne de longueur nulle ("").
La fonction Dir(), quant à elle, ne renvoie jamais vbNullString mais, elle aussi, une chaîne de longueur nulle.
vbNullString est une chaîne de valeur 0, différente d'une chaîne de longueur nulle (""), et qui permet l'appel de procédures externes (je cite toujours l'aide en ligne).
Le fait que "" et vbNullString soient parfaitement interchangeables aujourd'hui ne présage pas que cela restera vrai dans les versions futures de VB. En revanche, il est improbable que Microsoft contredise demain ce qu'il dit aujourd'hui dans sa documentation.
Quand à FreeFile, tu as raison. Cependant je n'ai pas réécrit le sub de notre ami chaudier37, je l'ai juste adapté.
Cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 4 nov. 2008 à 08:17
Salut,
Bon, bon d'accord...
Moi je disais cela suite à un article que j'ai lu et qui m'a donné des résultats satisfaisants dans mes programmes.Optimize string handling in Visual Basic 6.0 - Part I Assigning an empty string to a variableThis is the usual way to clear a string variable.
Text$ = ""
What a waste! First of all, the string "" takes 6 bytes of RAM each time you use it. Consider the alternative:
Text$ = vbNullString
So what is this? vbNullString is a special VB constant that denotes a
null string. The "" literal is an empty string. There's an
important difference. An empty string is a real string. A null string is
not. It is just a zero. If you know the C language, vbNullString is the
equivalent of NULL.
For most purposes, vbNullString is equivalent to "" in VB. The only
practical difference is that vbNullString is faster to assign and
process and it takes less memory.
If you call some non-VB API or component, test the calls with
vbNullString before distributing your application. The function you're
calling might not check for a NULL string, in which case it might crash.
Non-VB functions should check for NULL before processing a string
parameter. With bad luck, the particular function you're calling does
not do that. In this case, use "". Usually APIs do support
vbNullString and they can even perform better with it!