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 :

SPLIT et séparateur aussi présent dans les données.


Sujet :

Macros et VBA Excel

  1. #1
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut SPLIT et séparateur aussi présent dans les données.
    Bonjour,

    Sur le mainframe je crée un fichier dont le format est imposé par le package qui va utiliser ce fichier qui en fait est un trigger.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %BTW% /AF="C:\MyPath\MyFormat.btw" /D="<Trigger File Name>" /PrintJobName="15132614"  /PRN="Bullzip PDF Printer" /R=3 /P                                                                                          
    %END%   
    $FICHES_PATH,$FICHES_NAME,$PDF_GENERATED,....
    "\shared\path\","15132614.FIC","","40177.JPG",....
    Les lignes qui m'intéressent sont les lignes 3 et 4., la ligne 3 étant le nom des champs, la ligne 4 les valeurs des champs.

    il y a plus de 100 champs différents, au contenu totalement variable.

    Le séparateur DOIT être ,.

    Je dois sous VBA exploiter le contenu de certains champs précis et pour cela j'utilise , comme séparateur "," (virgule) mais "," est également présent dans certains champs de données, comme marque décimale, et je ne peut non plus le changer.

    Donc mon split sur "," foire dès qu'un champ contient ,.
    J'ai un décallage entre les nom des champs (Split sur ligne 3) et les valeur (split sur ligne 4).

    Existe-t'il un parade pour dire à SPLIT de ne pas regarder à l'intérieur de mes strings mais uniquement en dehors des quotes. ?

    Pour l'instant, la solution que j'ai trouvée est de mettre en début de liste tous les champs que je dois exploiter, avant les champs numériques édités contenant la marque décimale virgule, mais c'est plutôt fastidieux.

    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, le retour du Jedi .....
    Une idée, peut-être saugrenue, pourquoi ne pas faire un split sur l'ensemble "," ? Il y aura sans doute des adaptations à faire pour la 1ere et dernière valeur récupérée dans le tableau.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 781
    Points : 28 648
    Points
    28 648
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Philippe m'a devancé, c'est la solution que j'allais te proposer.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut,
    toujours aussi rapide Kiki29.

    pourquoi ne pas faire un split sur l'ensemble ","
    Ton idée me plait. elle me permettra en plus de faire fi des quotes qui m'empoisonnent la vie au niveau contenu.

    Restera juste à enlever la quote de début de l'elem(0) et celle de fin de l'elem(ubound(table)).

    J'essaie cet aprem et te tiens au courant.

    Tu as été trop vite.... je n'étais pas encore prêt.

    Merci en tout cas.....

    Je "Jedi" toujours mais comme je dois toucher à tout, mon sabre laser est émoussé en VBA.

    ----Edit----

    Salut Corona.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  5. #5
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Une autre idée salée avec la séparation suivant les cotes.
    Après le split, on remplace la virgule par un autre identifiant dans chaque chaine qui comporte un seul caractère (la virgule).
    On reforme la chaine et on scinde cette nouvelle chaine avec le nouvel identifiant.
    Comme un bon exemple vaut mieux qu’un mauvais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Test()
    Dim MaChaine As String
    Dim Tablo() As String
        MaChaine = """\shared\path\""" & "," & """15132614.FIC""" & "," & """""" & "," & """40177.JPG"""
        Tablo = Split(MaChaine, """")
        For i = 0 To UBound(Tablo)
            If Len(Tablo(i)) = 1 Then Tablo(i) = Replace(Tablo(i), ",", "|")
        Next
        MaChaine = ""
        For i = 0 To UBound(Tablo)
            MaChaine = MaChaine & Tablo(i)
        Next
        Tablo = Split(MaChaine, "|")
    End Sub
    Cordialement.

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/08/2008, 20h40
  2. Réponses: 6
    Dernier message: 16/10/2007, 09h15
  3. Réponses: 4
    Dernier message: 07/09/2007, 17h47
  4. Filtre dans les données d'un tableau dynamique
    Par lbar012001 dans le forum Excel
    Réponses: 2
    Dernier message: 07/06/2007, 14h06
  5. pb de cotes dans les données avec findfirst
    Par patbeautifulday1 dans le forum VBA Access
    Réponses: 2
    Dernier message: 16/05/2007, 15h57

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