IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Création d'un fichier txt avec une table Access [Toutes versions]


Sujet :

VBA Access

  1. #21
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 9
    Points
    9
    Par défaut Re
    Bonjour Pierre
    Merci de ton aide mais pour l'instant je suis bloque dans une fonction split pour lire les donnée d'un csv.elle beuge dès qu'elle trouve une ligne avec la valeur dû champs désirée vide
      0  1

  2. #22
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Le titre de la discussion ne correspond pas à ta demande du moment...

    Robert t'as demandé de donner un exemple de ce qui était récupéré par le SELECT... Ce serait un bon début. Tant qu'à faire, montre également où ça plante et comment.

    Normalement, si le txt est bien construit, il tient compte des champs vides en faisant suivre deux séparateurs sans rien entre. Si, par exemple, ta ligne représente Prénom;Nom;Ville, tu peux avoir une première ligne avec les trois données, une deuxième ligne où il manque le nom et une troisième où il manque la ville. Elles doivent se présenter ainsi:
    Pierre;Dupont;Paris
    Martine;;Alès
    André;Durand;

    Alors, il est possible de les exploiter avec Split. Si les lignes ne sont pas bien formées (par exemple Martine;Alès), ça va être compliqué, voire impossible, de pouvoir interpréter la ligne et déceler les valeurs manquantes.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      0  0

  3. #23
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Si un split ne peut pas découper en fonction du caractère passé en paramètres,il y aura très certainement un erreur!
    Si tu split sur un texte vide tu n'auras pas d'erreur mais le résultat ne sera pas un tableau!

    Si tu dispose normalement de 3 champs et vue qu'un tableau commence à 0;

    Tu auras une erreur sur T(2) si ton texte ne contient qu'un ;

    Soit tu es capable d'évaluer que ton split n'est pas bon, soit tu concatènes ton texte brut avec 2; si tu disposes de 3 champs et tu ne travail que de 0 à. 2 mais tu risque de décaler te valeurs si d'aventure ton texte brut ne dispose que d'un champ!

    Si ton tableau contient 3 champs un ubound devrait te retourner 2, si tu concatène avez 2;
    Ton ubound devrait te retourne 5 si la valeur n'est pas correcte tu ne traites et tu informes le fournisseur du fichier qu'il doit revoir sa copie!

    Mais personnellement je trouve ce fils déroutant!

    Je ne sais pas si tu veux créer un fichier texte, si tu veux enrichir une table, ou si le but est d'enrichir une table pour pouvoir gérer ton fichier texte pour fusionner les deux dans ton fichier texte! Car un appen suffirait!
    Dernière modification par Invité ; 20/09/2016 à 09h05.
      0  0

  4. #24
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    je réexplique le pb: j'ai une table a csv en entrée avec plusieurs colonnes, Quand il n'ya pas de cellules vide, la boucle marche bien, et la macro me génère bien une table acess, le pb quand il y a une cellule vide dans la table csv, la macro plante avec le message l'indice n'appartient pas à la sélection erreur 9( au niveau de cette ligne: data = Replace(strArray(rst!Position_CSV), """", "")) , je pense que mon split à un pb voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM Champ WHERE Position_CSV <> -1 AND Table = '" & TableName & "' Order by OrderIndex")
        If rst.RecordCount > 0 Then
            While Not oTxt.AtEndOfStream
                ligne = oTxt.ReadLine
                'Debug.Print Ligne
     
                strArray = Split(ligne, ";")
     
                Set rst2 = CurrentDb.OpenRecordset(TableName)
                rst2.AddNew
     
                rst.MoveFirst
                Do While Not rst.EOF
     
                       data = Replace(strArray(rst!Position_CSV), """", "")
     
                    If strArray(rst!Position_CSV) <> "" And strArray(rst!Position_CSV) <> """""" Then
     
                    'If data <> "" Then
                        rst2(rst!Champ).Value = data
     
     
                    End If
                    rst.MoveNext
                Loop
                rst2.Update
            Wend
        End If
    c'est vrai que ce n'est pas dans le sujet de cette demande mais je me suis rendu compte de ce pb après.
    j’espère que j'ai bien exposer le pb
    merci
      0  0

  5. #25
    Invité
    Invité(e)
    Par défaut
    je subodore que nous somme repassé à l’export!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = Replace(strArray("" & rst!Position_CSV), """", ""))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Set rst = CurrentDb.OpenRecordset("SELECT * FROM Champ WHERE Position_CSV <> -1 And Position_CSV Is Not Null  AND  Table = '" & TableName & "' Order by OrderIndex")
        If rst.RecordCount > 0 Then
            While Not oTxt.AtEndOfStream
                ligne = oTxt.ReadLine
                'Debug.Print Ligne
     
                strArray = Split(ligne, ";")
     
                Set rst2 = CurrentDb.OpenRecordset(TableName)
                rst2.AddNew
     
                rst.MoveFirst
                Do While Not rst.EOF
     
                       data = Replace(strArray(rst!Position_CSV), """", "")
     
                    If strArray(rst!Position_CSV) <> "" And strArray(rst!Position_CSV) <> """""" Then
     
                    'If data <> "" Then
                        rst2(rst!Champ).Value = data
     
     
                    End If
                    rst.MoveNext
                Loop
                rst2.Update
            Wend
        End If
      0  0

  6. #26
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 9
    Points
    9
    Par défaut
    Merci de ta proposition toujours NOK avec la même erreur 9.
      0  1

  7. #27
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set rst = CurrentDb.OpenRecordset("SELECT * FROM Champ WHERE Position_CSV <> -1 And  trim(Position_CSV ) <>''  AND Position_CSV Is Not Null  AND  Table = '" & TableName & "' Order by OrderIndex")
      0  0

  8. #28
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 9
    Points
    9
    Par défaut
    nok erreur : data = Replace(strArray(rst!Position_CSV), """", "")
      0  0

  9. #29
    Invité
    Invité(e)
    Par défaut
    Code ?????? : Sélectionner tout - Visualiser dans une fenêtre à part
    set rst = CurrentDb.OpenRecordset("SELECT * FROM Champ WHERE Position_CSV <> -1 And  trim('' & Position_CSV ) <>''  AND Position_CSV Is Not Null  AND  Table = '" & TableName & "' Order by OrderIndex")
      0  0

  10. #30
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par watred Voir le message
    [...]
    la macro plante avec le message l'indice n'appartient pas à la sélection erreur 9( au niveau de cette ligne: data = Replace(strArray(rst!Position_CSV), """", "")) , je pense que mon split à un pb voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    [...]
     
                       data = Replace(strArray(rst!Position_CSV), """", "")
     
                    If strArray(rst!Position_CSV) <> "" And strArray(rst!Position_CSV) <> """""" Then
     
                    'If data <> "" Then
                        rst2(rst!Champ).Value = data
     
     
                    End If
                    rst.MoveNext
                Loop
                rst2.Update
            Wend
        End If
    c'est vrai que ce n'est pas dans le sujet de cette demande mais je me suis rendu compte de ce pb après.
    j’espère que j'ai bien exposer le pb
    merci
    Si ça plante là où tu le dis, je ne vois pas en quoi le split est impliqué... Peux-tu donner la valeur de rst!Position_CSV au moment du plantage?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      0  0

  11. #31
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set rst = CurrentDb.OpenRecordset("SELECT * FROM Champ WHERE Position_CSV <> -1 And  trim(Position_CSV ) <>''  AND Position_CSV Is Not Null  AND  Table = '" & TableName & "' Order by OrderIndex")
    oui pour ce code et aussi ' Set rst = CurrentDb.OpenRecordset("SELECT * FROM Champ WHERE Position_CSV <> -1 AND Table = '" & TableName & "' Order by OrderIndex")
      0  0

  12. #32
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 9
    Points
    9
    Par défaut
    RE,
    Apres multiple recherche toujours au point 0,
    Mes clés est une position csv (nombre de séparateur) + le séparateur" ;" à L'exécution de la macro celle ci va chercher la position qui correspond au champs voulu dans le csv (donc un nombre de ; stable pour elle ) et elle parcours ainsi ligne par ligne mon fichier csv brut pour tout copier sous forme de table, cette macro plante au niveau d'une ligne ou forcement la clé positon csv n'est pas la même( car la macro a défini au départ cette clé ) car le nombre de ";" à changer puisqu'il y a des vides (il ya une ligne avec des donnees manquant) du coup le nombre de ";" est inferieur à la clé .
    exemple :
    alain;bernard;24ans
    imaginons que j'ai défini lage comme sortie donc la clé !strposition csv sera 2
    si une ligne a comme entré juste
    Pierre;
    la macro plante
    merci
      0  0

  13. #33
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Relis mes posts, sinon ça sert à quoi que je les écrive. J'explique justement ces cas de figure, qui démontrent que ton csv est mal formé. Ta ligne devrait être
    pierre;;

    Le problème, c'est qu'il faut "deviner" ce qui manque. Il serait donc judicieux de prendre le mal à la racine et de former correctement ton csv, si tu as la main sur cet aspect du problème, car dans le cas contraire, ton problème risque d'être insoluble selon les cas de figure des lignes incomplètes.

    Si je reprends ton exemple avec une ligne qui devrait être alain;bernard;24 mais qui est alain;24... Comment veux-tu savoir quelle partie manque? Il n'y a pas d'algorithme qui te permettra de savoir que c'est la données "du milieu" qui manque. Ainsi, ta bonne chaîne pourrait être "alain;;24" ou ";alain;24" ou "alain;24;"...

    Contournement: considérer que les données manquantes sont toujours à la fin (Mais ce postulat est-il correct? J'en doute)... Il suffit alors d'ajouter le nombre de ; qui manquent, par exemple avec la fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ' Compte le nombre de séparateurs et ajoutent ceux qui manquent
    Function CompleterChaine(Chaine As String, Separateur As String, NombreAttendu As Integer) As String
      Dim CountOf As Integer ' Nombre de séparateurs présents dans la chaîne
     
      CountOf = Len(Chaine) - Len(Replace(Chaine, Separateur, ""))
      If CountOf < NombreAttendu Then
        CompleterChaine = Chaine & String(CountOf, Separateur)
      Else
        CompleterChaine = Chaine
      End If
    End Function
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      0  0

  14. #34
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    En fait, ces 34 messages (!!) illustrent deux choses:

    1. qu'il est intéressant de ne parler que d'un problème dans une discussion;
    2. que souvent, on essaie en VBA de résoudre des problèmes qui devraient être résolus en amont.



    J'explique.

    Pour le point 1, cela me semble évident. Entre le titre donné à la discussion et le sujet traité à ce point-ci de la discussion, il y a un monde!

    Pour le point 2: la seule et unique bonne manière de procéder pour résoudre ton problème est de former correctement ton CSV. Toute autre solution risque à terme de poser problème.

    Le VBA, qui est un langage professionnel, est beaucoup trop souvent utilisé pour bricoler des solutions caduques simplement parce qu'au départ le travail n'est pas bien fait. Ce n'est pas VBA qui n'est pas un langage professionnel, c'est que l'on fait parfois (trop souvent) avec qui ne l'est pas.

    Je l'écris à nouveau pour que ce soit bien clair:
    La seule et unique bonne manière de procéder pour résoudre ton problème est de former correctement ton CSV. Toute autre solution risque à terme de poser problème.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      0  0

  15. #35
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    [...]
    Re bonsoir
    POur te répondre impossible de modifier le fichier csv
    Les lignes avec des points virgules manquant peuvent se retrouver aléatoirement
    Cest à dire
    Alain;Bernard;24
    David;35
    ....
    Pour récapituler la macro plante car la clé position csv de l'âge ici qui est 2 est incomplète a la 2 eme ligne.peut on faire un contournement quand même ??
    Merci
      0  0

  16. #36
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par watred Voir le message
    [...]
    Les lignes avec des points virgules manquant peuvent se retrouver aléatoirement
    Cest à dire
    Alain;Bernard;24
    David;35
    [...]
    Pour récapituler: il n'y a pas de solution à ton problème si le csv ne sait pas être modifié. Il faut aller exécuter le *àç#&@?+% qui a produit ce csv. C'est tout ce qu'il mérite.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      0  0

  17. #37
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Tes lignes dans le csv, c'est réellement au format prénom;nom;âge lorsqu'elles sont bien formées ou c'est juste un exemple mais ta ligne réelle est plus complexe?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      0  0

  18. #38
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Tes lignes dans le csv, c'est réellement au format prénom;nom;âge lorsqu'elles sont bien formées ou c'est juste un exemple mais ta ligne réelle est plus complexe?
    Mercî Pierre de tes réponses en tout cas
    Oui un fichier plus complexe brut avec pleins de ; sauf qu'il ya un bug sur une ligne au milieu de fichier où il ya que 3 ;
    Si pas de solution je vais essayer autre chose tant pis
      0  0

  19. #39
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 949
    Points
    55 949
    Billets dans le blog
    131
    Par défaut
    Tu pourrais exclure cette ligne et continuer le traitement, quitte à noter dans un log le problème rencontré.

    Pour ne pas bloquer sur une ligne mal formée, tu pourrais compter le nombre de ; que tu attends lors de la lecture d'une ligne du CSV. Normalemet, pour x colonnes attendues, tu aura x-1 ;

    La fonction que j'ai donnée tout à l'heure illustre comment compter les ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Len(Chaine) - Len(Replace(Chaine, ";", ""))
    Il suffit de tester avec IF et d'écrire dans un fichier log (ou une table log) qui reprendrait par exemple toute la chaine mal formée.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------
      0  0

  20. #40
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 9
    Points
    9
    Par défaut
    Le code compte bien le ; d'une façon automatique en gros je rentre dans une table le champs voulu et lui compte le nombre de ; dans l'en-tête avant de faire le traitement.
    Du coup comment je peux ignorer cette ligne qui me pourri le code ?
    Merci
      0  0

Discussion fermée
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [AC-2000] Problème Import fichier .txt dans une table Access
    Par sylviobarca dans le forum VBA Access
    Réponses: 3
    Dernier message: 30/12/2010, 17h17
  2. remplissage d'un fichier excel avec une table access
    Par lupus83 dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/08/2007, 14h24
  3. Réponses: 3
    Dernier message: 05/03/2007, 23h54
  4. Réponses: 8
    Dernier message: 28/12/2006, 14h18
  5. importation d'un fichier txt dans une table
    Par pierre.egaud dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/09/2006, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo