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

Requêtes et SQL. Discussion :

Access : Separation et concatenation des champs (text to column)


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Points : 29
    Points
    29
    Par défaut Access : Separation et concatenation des champs (text to column)
    Bonjour,


    J'avais posté une question similaire il y a qq semaines mais j'aimerai aller plus loin : j ai une BDD avec des champs liés par un point. Comment fais t on pour séparer les champs lié par un point pour récupérer la bonne longueur de champ ?

    Nom : sep.PNG
Affichages : 118
Taille : 15,6 Ko

    Celui ci peux contenir jusqu'à 6 champs à séparer.

    Donc ajouter 2 nouveaux champs CONCA2 et CONCA3 pour lesquels nous ayons :

    CONCA2 : Currency.Curve
    CONCA3 : Currency.Curve.Tenor

    Mais cela implique t il de séparer tous les champs d'abord ou y a t il un moyen de stopper la découpe avant le 2eme et 3eme point ?

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Je te joins une petit BD qui contient une table et une formulaire. Dans la table, j'ai implanté, les données que tu as mises en exemple. Il y a un formulaire F_Concatenation. En cliquant sur le bouton, tu exécutes une procédure qui éclate les données et qui régénère les concaténation que tu souhaites.

    J'espère avoir compris ton problème

    Bonne continuation
    Fichiers attachés Fichiers attachés
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Hello Jeannot,
    Merci pour ta réponse, je me rends compte que mon explication est un peu brouillon.

    Tu as compris l'idée, à savoir splitter pour recoller les morceaux derrière.
    Je n'ai pas besoin des champs de splits, juste de conca2 et conca3, ma question est : est ce que c'est faisable sans passer par cette étape de split ?

    Le but est de travailler sur le champ Risk Factor Sensitivity du sample en pièce jointe.

    Certains champs ont une profondeur de 2, d'autres de 6.
    Soit de x.y à x.y.z.a.b

    Donc conca2 = x.y
    et conca3 = x.y.z

    Si un champ est de profondeur 2 alors conca2 = x.y et conca3 = x.y

  4. #4
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    ma question est : est ce que c'est faisable sans passer par cette étape de split ?
    Réponse : Non car pour repérer le "." dans la chaine, il te faut utiliser le fonction InStr() qui renvoie la position de la première occurence du caractère recherché (donc pas intéressant dans ce cas précis)

    je te remets le code qui exécute le split et la concaténation en reprenant les règles que tu as posée

    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
     
        ' Déclaration des variables
        Dim l_tabSplit As Variant
        Dim l_strSql As String
        Dim l_rsSource As DAO.Recordset
        Dim i As Integer
        Dim l_intCompteur As Integer
     
        ' Initialisation de la sequence SQL
        l_strSql = "SELECT [Risk Factor Sensitivity],N0, N1 FROM Sample"
        ' Création du jeu d'enregistrements
        Set l_rsSource = CurrentDb.OpenRecordset(l_strSql)
     
        ' Lecture du jeu d'enregistrements
        With l_rsSource
            .MoveFirst
            ' Boucle jusqu'à la fin des enregistrements récupérés
            Do While Not .EOF
                ' Eclatement du champ source basé sur le "."
                l_tabSplit = Split(.Fields(0), ".")
                ' Récupération d'une nombre d'items récupérés dans l'éclatement de la chaine
                l_intCompteur = UBound(l_tabSplit) + 1
                ' Phase de mise à jour
                .Edit
                    ' Teste en fonction du nombre d'items et génère la concaténation. 
                    Select Case l_intCompteur
                        Case Is = 1
                            .Fields(1) = l_tabSplit(0)
                            .Fields(2) = l_tabSplit(0)
                        Case Is = 2
                            .Fields(1) = l_tabSplit(0) & "." & l_tabSplit(1)
                            .Fields(2) = l_tabSplit(0) & "." & l_tabSplit(1)
                        Case Else
                            .Fields(1) = l_tabSplit(0) & "." & l_tabSplit(1)
                            .Fields(2) = l_tabSplit(0) & "." & l_tabSplit(1) & "." & l_tabSplit(2)
                    End Select
                .Update
                ' Passe à l'enregistrement suivant
                .MoveNext
            Loop
        End With
    Remarque : Si tu es sûr que le Cas = 1 n'existe pas, tu peux remplacer la structure Select Case ... End Select par un simple If ... Else ... End If

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        If l_intCompteur = 2 then
            .Fields(1) = l_tabSplit(0) & "." & l_tabSplit(1)
            .Fields(2) = l_tabSplit(0) & "." & l_tabSplit(1)
        Else
            .Fields(1) = l_tabSplit(0) & "." & l_tabSplit(1)
            .Fields(2) = l_tabSplit(0) & "." & l_tabSplit(1) & "." & l_tabSplit(2)
        End If
    Bonne continuation
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Hello,

    Je pensais à :
    Conca2 : je repere le 2eme point, je prends ce qu il y a à gauche, juste avant.
    Conca3: je repere le 3eme point, je prends ce qu il y a à gauche, juste avant.

    C'est bizarre, j ai copié ton code dans un module en changeant le nom de la table dans le from mais il demande une macro. Impossible de le lancer

    Pourquoi appelles tu les champs N0 et N1 dans ton select ? Je suis un peu perdu.
    Merci

  6. #6
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Les champs N0 et N1 sont les champs que j'ai repris dans ta table Sample.
    D'autre part, pour exécuter le module, il faut le copier dans l'événement "sur clic" du bouton de ton formulaire.
    Je dois m'absenter jusqu'à Lundi soir.
    Si tu le souhaites je t'enverrai la base Sample Mardi prochain (je suis désolé).
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Naaaan
    Bien evidemment je me suis trompé de PJ. Je parlais de celle ci...

    Ma seconde question était : pourquoi mettre le code dans un formulaire ? Est ce que ça n'alourdis pas l'interface ?

    Le code ne dois t il pas commencer par un "option" ou un "sub" ? Mon bouton commence par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Compare Database
    Option Explicit
     
    Private Sub btVentiler_Click()
       ' Déclaration des variables
        Dim l_tabSplit As Variant
    [....]
    Fichiers attachés Fichiers attachés

  8. #8
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 133
    Points : 83 975
    Points
    83 975
    Billets dans le blog
    15
    Par défaut


    Citation Envoyé par tofoo Voir le message
    Naaaan
    Ma seconde question était : pourquoi mettre le code dans un formulaire ? Est ce que ça n'alourdis pas l'interface ?
    Le code VBA n'est pas logé dans un formulaire, mais dans un module. Ce dernier n'est rien d'autre qu'un container de texte à l'image de Microsoft Word.

    Le formulaire quant à lui n'est qu'une interface graphique permettant aux utilisateurs d'ajouter, de modifier ou de supprimer des données dans votre base de données.

    Sur le bouton qui est inséré dans le formulaire, on affecte la macro créée afin d'exécuter la procédure.

    J'espère que cette réponse t'aidera à mieux comprendre.


    Cordialement,
    Malick
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Hello Malick,
    ça je comprends mais on est d'accord qu'au delà de l'aspect cosmétique (c'est tjrs plus sympa de lancer le code via un bouton que dans l'editeur), le code change, du moins l'appel de fonction ?

  10. #10
    Community Manager

    Avatar de Malick
    Homme Profil pro
    Community Manager
    Inscrit en
    Juillet 2012
    Messages
    9 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Community Manager
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2012
    Messages : 9 133
    Points : 83 975
    Points
    83 975
    Billets dans le blog
    15
    Par défaut
    Salut tofoo

    Citation Envoyé par tofoo Voir le message
    Hello Malick,
    c'est tjrs plus sympa de lancer le code via un bouton que dans l'editeur
    Effectivement et cela rejoint la proposition de Jeannot

    Citation Envoyé par Jeannot45 Voir le message

    D'autre part, pour exécuter le module, il faut le copier dans l'événement "sur clic" du bouton de ton formulaire.
    Cordialement,
    Malick
    Vous avez envie de contribuer au sein du Club Developpez.com ? Contactez-nous maintenant !
    Vous êtes passionné, vous souhaitez partager vos connaissances en informatique, vous souhaitez faire partie de la rédaction.
    Il suffit de vous porter volontaire et de nous faire part de vos envies de contributions :
    Rédaction d'articles/cours/tutoriels, Traduction, Contribution dans la FAQ, Rédaction de news, interviews et témoignages, Organisation de défis, de débats et de sondages, Relecture technique, Modération, Correction orthographique, etc.
    Vous avez d'autres propositions de contributions à nous faire ? Vous souhaitez en savoir davantage ? N'hésitez pas à nous approcher.

  11. #11
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut


    Rapidement avant de partir, je t'envoie la base Sample qui te montrera comment attacher la procédure sur l'événement "Sur Clic" du bouton du formulaire
    Bonne continuation
    Fichiers attachés Fichiers attachés
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Avril 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2015
    Messages : 55
    Points : 29
    Points
    29
    Par défaut
    Merci Jeannot ! C'est vraiment gentil d avoir pris le temps de m'expliquer.
    Crystal clear
    ça marche superbement, même sur un gros volume de données !

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

Discussions similaires

  1. Access :Separation des champs (text to column)
    Par tofoo dans le forum Requêtes et SQL.
    Réponses: 24
    Dernier message: 10/05/2016, 20h01
  2. [AC-2003] ACCESS : Concatener des champs
    Par Sandraizé dans le forum IHM
    Réponses: 2
    Dernier message: 16/01/2014, 18h16
  3. [SQLite]éliminer un motif dans des champ TEXT
    Par Invité(e) dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/05/2005, 17h44
  4. Réponses: 4
    Dernier message: 16/05/2005, 14h16
  5. Boucler sur des champs texte
    Par syl2095 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2004, 16h15

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