Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 12 nov. 2009 à 17:07
je suis aussi automaticien et cela fait que peu de temps que je programme en VB.NET
Il faut oublier tous tes reflexes des API.
Exemple dans ta sub tu utilises Byref ce qui indique à la sub qu'elle modifira la valeur d'entrée (pas besoin de valeur de sortie en somme), Utilise au début comme en S7, les Byval qui eux lise la varaible passé en paramétre mais sans la modifier, il te faudrat alors une var de sortie à la fin des déclaration d'entrée de sub entre parenthése et sans nom, juste le type de valeur retourné.
ex :
Private Sub Mon_inc (byval X as integer) as integer
return X + 10 ' ajoute 10 à X
End sub
utilisation : tyty Mon_inc(6) // tyty 60
sinon avec byref (à vérifier)
Private sub Mon_inc (byref X as integer)
return X+10
end sub
utilisation : Mon_inc(tyty) // tyty = tyty + 10
je t'invite fortement à lire les tutos dispo sur le net et sur ce site pour bien commencer, lis aussi mes sources car j'ai le même "esprit" que toi de formation et je les commente largement ;)
@++ un 5/10 pour l'encouragement
stef68600
Messages postés42Date d'inscriptionvendredi 31 juillet 2009StatutMembreDernière intervention26 juillet 2013 10 nov. 2009 à 20:10
Bonjour,
merci de vos commentaires constructifs. Effectivement quand on n'a pas l'habitude il y a des choses qui nous échappent...
Par contre j'ai essayé de factorisé comme vous le conseillez, mais j'arrive pas. j'ai essayé de faire un module pour faire des espaces dans les numéros de tel, ex 0101010101 pour avoir 01 01 01 01 01. j'ai une petite question : c'est normal qu'on ne puisse pas avoir la variable d'entree identique à la variable de sortie ?
module espace
sub traitement (byref entree as string,byref sortie as string)
ici le code... qui fonctionne
end sub
end module
utilisation :
espace.traitement (textbox1.text,textbox1.text)
ça marche pas !
dim tampon as string
tampon=textbox1.text
espace.traitement (tampon,textbox1.text)
ça marche !
déroutant pour un automaticien, car si on fait le prog sans "tampon" sur un automate ça fonctionne !
en tout cas merçi pour vos remarques.
cs_Blodox
Messages postés134Date d'inscriptionmardi 23 septembre 2003StatutMembreDernière intervention24 octobre 2010 9 nov. 2009 à 16:21
Yes,
il y a aussi qqch qui me gêne, c'est le nom de fichier en "dur", j'aurais plutôt mis ça dans un petit fichier d'init, ce qui permet une plus grande portabilité,
imagines que tu déplaces ton appli dans un répertoire "D:\MesApplisAMoi\repertoire", dans ta class actuelle, il te recréera un fichier vide sur C:\(racine) et ne saura plus retrouver ton "bon" répertoire, alors que là, dans l'évènement Form_Load, il te suffit de charger l'emplacement du fichier et de l'ouvrir et le tour est joué... De plus tu n'es pas obligé d'avoir un nom spécifique, ainsi, tu peux avoir "D:\MesApplisAMoi\repertoire\Mon Repertoire Perso.xls", "D:\MesApplisAMoi\repertoire\Mon Repertoire Professionnel.xls", etc, quitte à rajouter un radiobutton pour sélectionner entre "Perso" et "Pro", etc...
D'acord avec ADN56 pour les autres améliorations
Sinon, c'est bon
Je mets 7 à titre d'encouragement...
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 8 nov. 2009 à 16:29
salut, je lis ton code et si je peux me permettre voici ce que je trouve à corriger pour que les débutants partent sur de bonne base.
10. 'test si repertoire existe sinon creation du repertoire
11. If My.Computer.FileSystem.DirectoryExists("C:\repertoire") Then
12. Else
13. My.Computer.FileSystem.CreateDirectory("C:\repertoire")
14. End If
Plus lisible :
If NOT My.Computer.FileSystem.DirectoryExists("C:\repertoire") Then My.Computer.FileSystem.CreateDirectory("C:\repertoire")
Ensuite place option explicit et strict à on et tu verra un tas de correction à apporter.
du style :
15. 'lecture fichier du mois
16. Dim oExcel As Object
17. Dim oBook As Object
18. Dim nom_fichier
19. Dim fichierexiste
xx. Dim xlUp = 0 '!!!!!!!'
nom_fichier et fichierexiste sont quoi ? un string et un booléen ? ben il faut lui dire !
Dim nom_fichier as string = ("c:\repertoire\mon repertoire.xls")
Dim fichierexiste as boolean = My.Computer.FileSystem.FileExists(nom_fichier)
Nomme les controles, les dix textbox et les boutons surtout.
Dans le form load tu fais la même chose que dans le BP7_click.
Ton index i (qui n'est pas typé en integer) tu écris i i + 1.0 ce qui le bascule en double alors qu'il n'y a pas besoin un tableau excel 65635 lignes max de mémoire. Donc : dim I as integer, puis i += 1 pour incrémenter l'index.
Il y a moyen de gagner pas mal de lignes de code en factorisant les .cell(i,x).value = textbox(x).text en utilisant les tags par exemple. Sur le bouton11 par exemple tu peux faire un for each control in controls, tester si c'est une textbox et lui placer un text vide. Utilise aussi une fonction pour ouvrir et fermer ton fichier cela évitera de modifier partout dans le code le jour ou tu voudras utiliser un opendialogue pour laisser l'user choisir son fichier. Tu écris plusieurs du code identique c'est pas ffacile à lire.
Pour ce qui est de l'utilité du code, ben voila quoi. Bonne continuation et souviens toi que c'est pour te faire allez dans le sens de la bonne prog que je te dis cela ;) @++
12 nov. 2009 à 17:07
Il faut oublier tous tes reflexes des API.
Exemple dans ta sub tu utilises Byref ce qui indique à la sub qu'elle modifira la valeur d'entrée (pas besoin de valeur de sortie en somme), Utilise au début comme en S7, les Byval qui eux lise la varaible passé en paramétre mais sans la modifier, il te faudrat alors une var de sortie à la fin des déclaration d'entrée de sub entre parenthése et sans nom, juste le type de valeur retourné.
ex :
Private Sub Mon_inc (byval X as integer) as integer
return X + 10 ' ajoute 10 à X
End sub
utilisation : tyty Mon_inc(6) // tyty 60
sinon avec byref (à vérifier)
Private sub Mon_inc (byref X as integer)
return X+10
end sub
utilisation : Mon_inc(tyty) // tyty = tyty + 10
je t'invite fortement à lire les tutos dispo sur le net et sur ce site pour bien commencer, lis aussi mes sources car j'ai le même "esprit" que toi de formation et je les commente largement ;)
@++ un 5/10 pour l'encouragement
10 nov. 2009 à 20:10
merci de vos commentaires constructifs. Effectivement quand on n'a pas l'habitude il y a des choses qui nous échappent...
Par contre j'ai essayé de factorisé comme vous le conseillez, mais j'arrive pas. j'ai essayé de faire un module pour faire des espaces dans les numéros de tel, ex 0101010101 pour avoir 01 01 01 01 01. j'ai une petite question : c'est normal qu'on ne puisse pas avoir la variable d'entree identique à la variable de sortie ?
module espace
sub traitement (byref entree as string,byref sortie as string)
ici le code... qui fonctionne
end sub
end module
utilisation :
espace.traitement (textbox1.text,textbox1.text)
ça marche pas !
dim tampon as string
tampon=textbox1.text
espace.traitement (tampon,textbox1.text)
ça marche !
déroutant pour un automaticien, car si on fait le prog sans "tampon" sur un automate ça fonctionne !
en tout cas merçi pour vos remarques.
9 nov. 2009 à 16:21
il y a aussi qqch qui me gêne, c'est le nom de fichier en "dur", j'aurais plutôt mis ça dans un petit fichier d'init, ce qui permet une plus grande portabilité,
imagines que tu déplaces ton appli dans un répertoire "D:\MesApplisAMoi\repertoire", dans ta class actuelle, il te recréera un fichier vide sur C:\(racine) et ne saura plus retrouver ton "bon" répertoire, alors que là, dans l'évènement Form_Load, il te suffit de charger l'emplacement du fichier et de l'ouvrir et le tour est joué... De plus tu n'es pas obligé d'avoir un nom spécifique, ainsi, tu peux avoir "D:\MesApplisAMoi\repertoire\Mon Repertoire Perso.xls", "D:\MesApplisAMoi\repertoire\Mon Repertoire Professionnel.xls", etc, quitte à rajouter un radiobutton pour sélectionner entre "Perso" et "Pro", etc...
D'acord avec ADN56 pour les autres améliorations
Sinon, c'est bon
Je mets 7 à titre d'encouragement...
8 nov. 2009 à 16:29
10. 'test si repertoire existe sinon creation du repertoire
11. If My.Computer.FileSystem.DirectoryExists("C:\repertoire") Then
12. Else
13. My.Computer.FileSystem.CreateDirectory("C:\repertoire")
14. End If
Plus lisible :
If NOT My.Computer.FileSystem.DirectoryExists("C:\repertoire") Then My.Computer.FileSystem.CreateDirectory("C:\repertoire")
Ensuite place option explicit et strict à on et tu verra un tas de correction à apporter.
du style :
15. 'lecture fichier du mois
16. Dim oExcel As Object
17. Dim oBook As Object
18. Dim nom_fichier
19. Dim fichierexiste
xx. Dim xlUp = 0 '!!!!!!!'
nom_fichier et fichierexiste sont quoi ? un string et un booléen ? ben il faut lui dire !
Dim nom_fichier as string = ("c:\repertoire\mon repertoire.xls")
Dim fichierexiste as boolean = My.Computer.FileSystem.FileExists(nom_fichier)
Nomme les controles, les dix textbox et les boutons surtout.
Dans le form load tu fais la même chose que dans le BP7_click.
Ton index i (qui n'est pas typé en integer) tu écris i i + 1.0 ce qui le bascule en double alors qu'il n'y a pas besoin un tableau excel 65635 lignes max de mémoire. Donc : dim I as integer, puis i += 1 pour incrémenter l'index.
Il y a moyen de gagner pas mal de lignes de code en factorisant les .cell(i,x).value = textbox(x).text en utilisant les tags par exemple. Sur le bouton11 par exemple tu peux faire un for each control in controls, tester si c'est une textbox et lui placer un text vide. Utilise aussi une fonction pour ouvrir et fermer ton fichier cela évitera de modifier partout dans le code le jour ou tu voudras utiliser un opendialogue pour laisser l'user choisir son fichier. Tu écris plusieurs du code identique c'est pas ffacile à lire.
Pour ce qui est de l'utilité du code, ben voila quoi. Bonne continuation et souviens toi que c'est pour te faire allez dans le sens de la bonne prog que je te dis cela ;) @++