Je suis entrain de mettre en place un soft permettant de faire des recherches dans un document de type Excel.
Pour les recherches, aucun soucis à déplorer, mes 11 filtres fonctionnent parfaitement. Le problème est dans la fonction que j'essaie d'implémenter. J'ai mis en place une checkbox me permettant, si celle-ci est cochée, de remplir un fichier texte avec les lignes trouvées lors de la recherche. Pour cela, j'ai déclarer mon fichier texte par ces lignes :
Dim Rapport As IO.StreamWriter
Rapport = My.Computer.FileSystem.OpenTextFileWriter("..\..\..\rapport.txt", True)
Une fois mes filtres passés, je passe ma fonction de rapport ci-dessous :
Function Print_Rapport()
'Bouton de demande de rapport coché
If Me.BT_REPORT.Checked Then
If Verif = True Then
Rapport.WriteLine(Ligne)
Else
'Rapport.WriteLine()
End If
End If
Return 0
End Function
La variable "Verif" me permet de savoir si oui ou non, la ligne analysée correspond aux filtres.
Le problème est que si je ne précise rien lorsque "Verif = False", rien n'est écrit dans mon fichier. A l'inverse, si je rajoute ne serait-ce que "Rapport.WriteLine()", mes lignes s'écrivent bien par contre, au lieu de n'avoir que les deux lignes ressorties par le filtrage, je retrouve dans mon fichier texte 5563 lignes. Soit les lignes correspondent aux filtres et dans ce cas, la ligne est écrit comme voulue, soit la ligne ne correspond pas aux filtres (Verif = False) et j'obtiens une ligne blanche (cf photo ci-dessous)
Est-ce que quelqu'un pourrait m'aider svp?
Merci d'avance ne serait-ce que pour la réflexion <3
EDIT : J'ai réussi à ne plus avoir une tonne de lignes indésirables en modifiant ma fonction de telle sorte :
Function Print_Rapport()
'Bouton de demande de rapport coché
If Me.BT_REPORT.Checked Then
If PremiereEcriture = 0 Then
Rapport.Write("MAC Chassis LLDP / MAC LLDP remote / SWITCH NAME / HARDWARE / ADDRESS IP / VLAN NAME / TAG / PORT / TAGGED / UNTAGGED / UP-DOWN")
PremiereEcriture += 1
End If
If Verif = True Then
Rapport.Write(Chr(10))
Rapport.Write(Ligne)
Else
Rapport.Write(" ")
End If
End If
Return 0
End Function
Le programme me donne donc des espaces au lieu de lignes blanches.
La question du coup est "Est-il possible d'utiliser la commande Write() sans rien écrire?"
- Edité par EvergreenGOD 31 août 2017 à 15:17:49
Sois toujours toi même.. Sauf si tu peux être une licorne.. Dans ce cas, sois toujours une licorne..
J'avais pas fait attention pour le forum .NET sorry ^^'
Je viens de tester mon programme avec vbNullString, mais cela ne marche pas, au contraire.. En utilisant la fonction de la sorte, je me retrouve avec le problème initial, c'est à dire que rien du tout ne s'écrit dans mon documents alors que d'après ma recherche, je devrais avoir 2 lignes qui s'écrivent.. :/
Sois toujours toi même.. Sauf si tu peux être une licorne.. Dans ce cas, sois toujours une licorne..
A mon avis, si rien ne s'écrit dans le document, le problème survient lors de ta condition avec Verif.
If Verif = True Then
Rapport.Write(Chr(10))
Rapport.Write(Ligne)
Else
Rapport.Write(" ")
End If
Tu vois, peux être que j'ai manqué un truc, mais Verif, vérifie une ligne précise qui doit correspondre au filtre ? Alors, là on a pas tout le code, mais je pense que l'utilisation d'une boucle For serait plus adéquate, quelque chose qui ressemblerais à ça :
For each Line in MyDoc
Select Case Line
Case verif = True
Rapport.Write(Chr(10))
Rapport.Write(Line)
Case Else
Rapport.Write(vbNullString)
End Select
Next
Tu vois, normalement, vbNullString renvois une chaîne vide : "", dans la solution précédente, Verif, d'après le code visible, ne vérifiait que la 1er ligne, et si celle-ci ne correspondait pas au filtre, cela n'écrivait rien. A moins que la fonction print_rapport ne soit pas utiliser dans une boucle, je ne vois pas trop :/
Aussi, je te conseil d'utiliser des Sub au lieu de fonction, si elle ne doit pas renvoyer de valeurs.
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Effectivement, ma fonction Print_Rapport() est appelée dans une boucle.
Cette boucle s'occupe justement de passer mes lignes une à une dans les filtres.
Une fois les fonctions de filtrages passées, si la ligne correspond aux filtres, elle est ajoutée dans une ComboBox permettant d'avoir un affichage sous forme de liste de tout ce qui ressort. Suite à ça, j'appelle ma fonction Print_Rapport().
A la base, je voulais faire un bouton qui me permette d'enregistrer toutes les lignes présentes dans la ComboBox, mais la seule chose que j'ai réussi à faire, c'est d'écrire la ligne sélectionnée dans la box. C'est donc pour ça que je me suis tourné vers le bouton radio.
J'ai essayé le code que tu m'as proposé mais le problème est le même :/ Avec "vbNullString" mon rapport est vide, tandis que si je remplace "vbNullString" par un espace (" ") je retrouve le même résultat qu'avec mon If..
Sois toujours toi même.. Sauf si tu peux être une licorne.. Dans ce cas, sois toujours une licorne..
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
[VB.NET] Problème d'écriture dans un fichier txt
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...