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

Macros et VBA Excel Discussion :

Traitement fichier csv [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Par défaut Traitement fichier csv
    Bonjour,

    J'ai un formulaire assez complexe sur un site internet qui ne peut me sortir les informations capturées que sous forme de fichier csv. Je veux récupérer ces données dans excel pour pouvoir les manipuler. La difficulté est qu'au sein de ce fichier .csv, une partie de l'information que je veux capturer est sous forme de chaîne de texte (au sein de délimiteurs texte " ").
    La quantité d'information au sein de cette chaîne varie en fonction des réponses au formulaires mais est toujours structurée de la même façon (l'utilisateur répond à une série de question par objet, mais peut choisir le nombre d'objets au préalable)
    J'ai pas mal cherché sur différents forums mais je n'ai rien trouvé pour
    faire des recherches au sein du fichier csv par exemple recherche "Quel type de projet ?" et retourne "Projet X"
    structurer ce fichier csv en utilisant plusieurs délimiteurs : retours chariots et "-"

    Est-ce que vous auriez des pistes pour m'aider?

    Merci!

    voici un exemple de fichier .csv que je récupère

    Date;Prix total;Ordre;
    2016-11-16;3,878.26;"
    Type de projet :
    - Quel type de projet ? (Projet X) : 0€

    Combien d'objets souhaitez-vous traiter ? :
    - Type A : 1
    - Type B : 1

    Description de la l'objet A n°1 :
    - Question 1 ? : 25
    - Calcul 1 : 875€
    - Question 2 ? : 25
    - Calcul 2 : 900€
    - Question 3 ? : (réponse 3) : +0%
    - Calcul 3 : 900€

    Description de l'objet B n°1 :
    - Question 1 ? : 20
    - Calcul 1 : 700€
    - Question 2 ? : 3
    - Calcul 2 : 900€
    - Question 3 ? : (réponse 3) : +0%
    - Calcul 3 : 900€

    "
    ;

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Avec une analyse pourtant simple, l'utilisation de la fonction VBA Split par exemple, …

    Sinon :
    Citation Envoyé par cdb99 Voir le message
    un site internet qui ne peut me sortir les informations capturées que sous forme de fichier csv.
    Si les informations sont directement affichées sur la page, pas besoin du fichier csv …


    Citation Envoyé par cdb99 Voir le message
    structurer ce fichier csv en utilisant plusieurs délimiteurs : retours chariots et "-"
    Ne pas confondre séparateur de fin de ligne et délimiteur de données ‼

    Comme ce n'est pas clair, le plus simple serait de joindre un fichier .csv (s'il ne passe pas le renommer en .csv.txt)
    et le résultat attendu dans un fichier .xlsx accompagnés de toutes précisions utiles quant à la logique appliquée …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Par défaut
    Bonjour,
    merci beaucoup pour votre réponse.
    Pour les séparateurs de données, j'essayais de trouver d'autres façons de structurer les données du fichier csv lors de l'import étant donnés que les délimiteurs ne me suffisaient pas.
    J'ai ajouté en pj le fichier csv et la cible dans excel - j'espère que mon problème deviendra plus clair!
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Différentes voies possibles …

    • Excel version anglaise ? Française ?

    • Un double-clic sur le fichier .csv depuis l'Explorateur Windows l'ouvre-t-il bien formaté dans Excel
    avec toutes les Questions dans la colonne Ordre (cellule G2) ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2016
    Messages : 4
    Par défaut
    J'utilise la version anglaise d'excel
    Oui, le fichier s'ouvre avec tout le passage entre guillements dans la cellule G2.

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Voici une démonstration remplissant les cases du classeur joint dans le post #3 …

    Enregistrer sous au format binaire (.xlsb) le classeur cible.

    • Coller ce code dans le module ThisWorkbook de ce classeur :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Sub Demo()
       Const D = ",""", F = """"
         Dim Q$, R&, S$, SC, SL, SP, V, VA
             Q = Me.Path & "\export.csv"
             If Dir(Q) = "" Then Beep: Exit Sub
             Application.ScreenUpdating = False
        With Workbooks.Open(Q, Local:=True).Worksheets(1)
             Me.Worksheets(1).[C2:C12].Value = Application.Transpose(Application.Index(.[A1:O2], 2, [{1,3,6,8,9,10,11,12,13,14,15}]))
             Q = .[G2].Value
            .Parent.Close False
        End With
        With Me.Worksheets(1)
                .[B19].CurrentRegion.Offset(1).ClearContents
                ReDim VA(1, 0)
                SP = Split(Q, "Finalisation de votre projet :")
            If UBound(SP) > 0 Then
                    Q = SP(0)
                For Each V In Split(SP(1), vbCrLf)
                    If V Like " - Question 1[1-2] (*" Then
                        VA(R, 0) = Split(Split(V, "(")(1), ")")(0)
                        R = R + 1
                        If R = 2 Then Exit For
                    End If
                Next
            End If
                .[C16:C17].Value = VA
                SP = Split(Q, "Description de ")
            For R = 1 To UBound(SP)
                    SL = Split(SP(R), vbCrLf)
                     S = IIf(S > "", S & ";", "") & R & D & Split(SL(0), ":")(0) & F
                For Each V In SL
                    If V Like " - ?uestion *" Then
                            SC = Split(V, "(")
                        If UBound(SC) > 0 Then
                            S = S & D & Split(SC(1), ")")(0) & F
                        Else
                            SC = Split(V, ": ")
                            If UBound(SC) > 0 Then S = S & D & SC(1) & F
                        End If
                    End If
                Next
            Next
                VA = Evaluate("{" & S & "}")
                If IsError(VA) Then Beep Else .[B20].Resize(UBound(VA), UBound(VA, 2)).Value = VA
        End With
            Application.ScreenUpdating = True
    End Sub
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 24/06/2011, 15h13
  2. Traitement fichier csv
    Par jouclar dans le forum Général Python
    Réponses: 3
    Dernier message: 15/05/2011, 10h06
  3. Traitement fichier CSV et recherche de sous-chaines
    Par j.lasnier dans le forum ASP.NET
    Réponses: 2
    Dernier message: 23/03/2010, 11h31
  4. Traitement fichiers csv
    Par athra dans le forum Forms
    Réponses: 0
    Dernier message: 20/06/2008, 11h17

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