Aide fichier csv svp!

Résolu
hamster man Messages postés 103 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 21 juin 2007 - 12 oct. 2006 à 17:36
hamster man Messages postés 103 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 21 juin 2007 - 16 oct. 2006 à 18:48
bonsoir tout le monde,

jai un petit souci de récupération de données sur fichier csv...
jai fais une forme ou jentre mon nom, prenom ainsi que d'autres infos et de ce programme je créer un fichier csv.
ce que je voudrais , c'est mettre ces infos ds certaine case du fichier csv met le probleme c'est que lorsque jouvre mon fichier en cour pour ajouter une donnée, les données ne s'inscrivent pas sur le fichier csv...voila mon code :

Option Explicit
Dim M_StrCurJour As String




Private Sub Command1_Click()


  G_StrMemExcel(5, 1) = Txt_Date
  G_StrMemExcel(1, 3) = Txt_Nom
  G_StrMemExcel(2, 3) = Txt_Prenom
  G_StrMemExcel(4, 3) = Txt_OrdreMission
  G_StrMemExcel(1, 7) = Txt_DateDep
  G_StrMemExcel(3, 7) = Txt_VilleDep
  G_StrMemExcel(1, 11) = ComboJour.Text
  G_StrMemExcel(2, 11) = Txt_HeureMatin
  G_StrMemExcel(4, 11) = Txt_HeureMidi
  G_StrMemExcel(6, 11) = Txt_HeureAprem
  G_StrMemExcel(8, 11) = Txt_HeureSoir
  G_StrMemExcel(1, 15) = Txt_DateRet
  G_StrMemExcel(3, 15) = Txt_VilleRet
   
  Txt_Nom.Text = ""
  Txt_Prenom.Text = ""
  Txt_OrdreMission.Text = ""
  Txt_DateDep.Text = ""
  Txt_VilleDep.Text = ""
  Txt_VilleRet.Text = ""
  Txt_DateRet.Text = ""
  Txt_HeureMatin.Text = ""
  Txt_HeureMidi.Text = ""
  Txt_HeureAprem.Text = ""
  Txt_HeureSoir.Text = ""
  ComboJour.Text = ""
 
  Dim A
  A = MsgBox("Vos horaires sont enregistrés", vbOKCancel)
  If A = 1 Then Unload Me
 
End Sub




Private Sub Form_Load()


  Dim L_IntLibre As Integer              ' Handle de fichier
  Dim L_IntNumJourSemaine As Integer     ' Numéro du jour (Lundi 1 Dimanche 7)
  Dim L_IntNumCol                        ' Colonne du fichier lue (sert pour la découpe)
  Dim L_StrDateFr As String              ' Conversion de la date au format FR pour pouvoir etre exploitée
  Dim L_StrDateLundi As String
  Dim L_StrDateDimanche As String
  Dim L_StrLigneFic As String            ' Contient une ligne lue dans le fichier XL
  Dim L_ObjFs
  Dim L_BoolRet                          ' Valeur pour retour de fonction
  Dim L_IntCont, L_IntCont2 As Integer
  Dim L_StrDate As String
  Dim jour As String
  Dim mois As String
  Dim an As String
 
  jour = Day(Date)
  mois = Month(Date)
  an = Year(Date)
 
  ' Calcul la date du "jour" (retourne la date de la veille si il est moins de 6h
  L_StrDate = Mid$(Date$, 4, 2) + "/" + Mid$(Date$, 1, 2) + "/" + Mid$(Date$, 7)
  Txt_Date = L_StrDate
 
  ' Initialise à vide le tableau qui va servir à mémoriser la feuille XLS
  For L_IntCont = 1 To 20
    For L_IntCont2 = 1 To 49
      G_StrMemExcel(L_IntCont, L_IntCont2) = ""
    Next
  Next
    If M_StrCurJour "" Then M_StrCurJour Format$(Date$, "dd/mm/yyyy")
   
    ' Récupère le nom du fichier XL en cours
  L_IntLibre = FreeFile
  Open App.Path + "\curweek.txt" For Input As #L_IntLibre
    Input #L_IntLibre, M_StrCurJour
  Close #L_IntLibre
 
  ' Déduit le nom du fichier XL avec lequel on va devoir travailler
  G_StrNomXl = "Ordre Mission - " + jour + "-" + mois + "-" + an + ".csv"
  G_StrNomCompletXl = App.Path + "\Data" + G_StrNomXl
    
    ' Si ce nom est différent de celui mémorisé, il ya un changement de semaine
  If G_StrNomXl <> M_StrCurJour Then
    L_IntLibre = FreeFile                                      ' On mémorise le nouveau nom de semaine
    Open App.Path + "\curweek.txt" For Output As #L_IntLibre
      Print #L_IntLibre, G_StrNomXl
    Close #L_IntLibre
  
    M_StrCurJour = G_StrNomXl
  End If
 
  ' Vérifie si le fichier XL existe déjà
  Set L_ObjFs = CreateObject("Scripting.FileSystemObject")
  L_BoolRet = L_ObjFs.FileExists(G_StrNomCompletXl)
 
  ' Si il n'existe pas de fichier XL on en crée un nouveau vierge
  If Not L_BoolRet Then
     CreeOrdreMission
  End If
 
  ' Ouvre le fichier XL et le flush dans le tableau G_StrMemExcel
  G_IntLigneXl = 1
 
  L_IntLibre = FreeFile
  Open G_StrNomCompletXl For Input As #L_IntLibre
    While Not EOF(L_IntLibre)
      Line Input #L_IntLibre, L_StrLigneFic
      L_IntNumCol = 0
ExtractCol:
      L_IntNumCol = L_IntNumCol + 1
      If InStr(L_StrLigneFic, ";") <> 0 Then
        G_StrMemExcel(L_IntNumCol, G_IntLigneXl) = Mid$(L_StrLigneFic, 1, InStr(L_StrLigneFic, ";") - 1)
        L_StrLigneFic = Mid$(L_StrLigneFic, InStr(L_StrLigneFic, ";") + 1)
        GoTo ExtractCol
      Else
        G_StrMemExcel(L_IntNumCol, G_IntLigneXl) = L_StrLigneFic
      End If
      If G_IntLigneXl = 50 Then Close #L_IntLibre
      G_IntLigneXl = G_IntLigneXl + 1
    Wend
  Close #L_IntLibre


End Sub

merci bien a ceux qui auraient le courage d'arriver jusque la...
en attente d'une reponse merci encore pour cette aide!

3 réponses

hamster man Messages postés 103 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 21 juin 2007
16 oct. 2006 à 18:48
salut a tous,

tout d'abord, je voudrais te remercier Jack de m'avoir apporter de l'aide, c'etait tres gentil de ta part.


en essayant ton code j'ai vu kil y avai encore d bug alor jai concu mon code mais autremen et maintenan c nikel ca reporte bien les données mais il savere kil y avai une autre erreur kan je metait mon fichier en memoire pour le modifier avec d données, ca venait du tableau colonne ligne javai inverser mes variables dc c sur ca pouvai pa marcher...


 


en tt k merci bien


ps: si jamai ca tinteresse jack je te filerai le code pour ke tu regarde, demande moi


 


tcho
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 oct. 2006 à 19:17
Salut
Est-ce que tes noms de fichiers sont corrects ?
As-tu utiliser le mode Debug pour tester le contenu des variables au fur et à mesure de l'avancement du programme ?
Debug VB6 :
   - Mets ton curseur sur une ligne, tape F9 : couleur indique l'endoit où s'arrêtera le code
   - Quand il s'arrête, survole tes variables avec la souris pour connaitre leur contenu
   - F8 pour n'avancer que d'une ligne
   - F5 pour continuer normalement
Si tu as des "On Error Resume Next" qqpart, vire les.
+ Dans l'IDE VB6, menu Outils, Options, onglet Général : Coche "Arrêt sur toutes les erreurs"

Je n'ai pas eu le courage d'essayer ton code, mais accepte ces remarques :
- La ligne "If G_IntLigneXl = 50 Then Close #L_IntLibre" va poser problème/défaut car tu boucles ensuite sur un fichier qui sera fermé.
   Utilise plutôt une boucle "Do While-Loop" à la place du "While Wend" obsolète + un "Exit Do" quand tu voudras sortir
- Je ne vois pas de pré-dimensionnement de ton tableau G_StrMemExcel
   Cela peut aussi créer des erreurs en cas de dépassement
- Rapidité dans ta boucle de lecture (si tu as beaucoup de données à traiter) :
   Tu utilises à plusieurs reprises "Instr(L_StrLigneFic, ";")"
   Mets le résultat dans une variable temporaire et utilise cette variable ensuite
- Efficacité dans ta boucle de lecture :
   Ceci t'imposerait de modifier ta structure de données (G_StrMemExcel), mais l'instruction Split permet de ranger des données texte avec séparateur connu dans un tableau en une seule ligne de code + rapidité
- Dans une instruction Dim, une suite de paramètre suivi d'un type ne dimensionne pas chaque paramètre comme le type.
   Seul le dernier paramètre sera correctement dimensionné. Les précédents, sans type, seront des Variant
   Pas très important dans ton cas, mais à savoir.

Pour info, voilà ce qu'aurait donné ton code avec mes idées :
-1- Le formatage du tableau récepteur :
   Private Type typeMonType
       Lignes() As String
   End Type
   Private G_StrMemExcel() As typeMonType

-2- La partie lecture et dépouillement du fichier :
    G_IntLigneXl = 1
    L_IntLibre = FreeFile
    Open G_StrNomCompletXl For Input As #L_IntLibre
    Do While Not EOF(L_IntLibre)
        Line Input #L_IntLibre, L_StrLigneFic
        G_StrMemExcel(G_IntLigneXl).Lignes = Split(L_StrLigneFic, ";")
        If G_IntLigneXl = 50 Then Exit Do   ' Voir l'utilité de sortir ?
        G_IntLigneXl = G_IntLigneXl + 1
    Loop
    Close #L_IntLibre

-3- Pour faire une vérif en sortie :
    Dim r As Integer, t As Integer
    For r = 1 To G_IntLigneXl - 1
        For t = 0 To UBound(G_StrMemExcel(r).Lignes)
            Debug.Print r, G_StrMemExcel(r).Lignes(t)
        Next t
    Next r

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 oct. 2006 à 19:21
PS : J'ai oublié le dimensionnement initial de G_StrMemExcel :
Vidage du tableau avant de commencer la lecture :
   Redim G_StrMemExcel(0)
Après le "Line Input" :
   Redim Preserve G_StrMemExcel(G_IntLigneXl)
0
Rejoignez-nous