Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 17 sur 17
  1. #1
    Débutant
    Profil pro
    Inscrit en
    avril 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : avril 2007
    Messages : 646
    Points : 144
    Points
    144

    Par défaut Decompose champ en plusieurs champs

    bonjour,

    j'ai des donnée sous 3 format possible
    exemple : 3.100.5 ou 3,100,5 ou 3:100:5 en gros avec un point ou une virgule ou deux point je peux choisir lequel je garde des trois

    3 = galaxy
    100 = secteur
    5 = sous secteur

    voila ma requete :
    Code :
    1
    2
    SELECT regroup_planete_ok.NOM_JOUEUR, regroup_planete_ok.P1
    FROM regroup_planete_ok;
    je souhaiterai avoir un résultat sous ce format la
    nom_joueur ; galaxy ; secteur ; sous secteur

    comment faire pour avec un seul champ faire donc 3champ dans une requete?
    merci pour vos réponses

  2. #2
    Rédacteur/Modérateur

    Avatar de Philippe JOCHMANS
    Homme Profil pro Philippe JOCHMANS
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    18 842
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe JOCHMANS
    Âge : 46
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : mai 2005
    Messages : 18 842
    Points : 42 808
    Points
    42 808

    Par défaut

    Bonjour

    Une discussion à voir : http://www.developpez.net/forums/d12...hamp-3-champs/

    Avec une fonction utilisant la fonction Split, c'est possible.

    Philippe
    Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
    Vous pouvez consulter mes articles sur Access et PowerPoint

    Si vous avez des c'est peut-être moi, car vous postez un fichier en pièce jointe sans explications.

  3. #3
    Membre Expert

    Homme Profil pro Mandresy
    Inscrit en
    mai 2012
    Messages
    1 102
    Détails du profil
    Informations personnelles :
    Nom : Homme Mandresy
    Localisation : Madagascar

    Informations forums :
    Inscription : mai 2012
    Messages : 1 102
    Points : 1 926
    Points
    1 926

    Par défaut

    Bonsoir,

    En supposant que le nombre de caracteres que tu veux extraire soit fixe pour chaque champ resultat, je te proposerai d'utiliser les fonctions de concatenation de texte LEFT, RIGHT, MID dans tes champs resultats.
    Pour le 1er par exemple: left (champ1;1).
    Apres tu as : MID (champ1;3;3)
    Pour le troisieme : RIGHT(champ1;1)

    Bonne continuation
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  4. #4
    Débutant
    Profil pro
    Inscrit en
    avril 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : avril 2007
    Messages : 646
    Points : 144
    Points
    144

    Par défaut

    merci pour vos réponse j'ai plus bien avance sur mon travail

    par contre j'ai un probléme dans mon formulaire "consultation" quand je clique sur "secteur" j'ai un probleme
    deplus je viens de voir que je peux avoir deux type différent avec 1 2 ou 3 chiffre apres le point
    exemple : 3.1.2 ou 3.12.3 ou .3.123.3

    du coup j'ai dans le resultat ce resulat qui apparait 1.2 ou 12. comment faire pour enleve .2 et le point au 12??

    merci encore
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur/Modérateur

    Avatar de Philippe JOCHMANS
    Homme Profil pro Philippe JOCHMANS
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    18 842
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe JOCHMANS
    Âge : 46
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : mai 2005
    Messages : 18 842
    Points : 42 808
    Points
    42 808

    Par défaut

    Re

    Pourquoi ne pas tester ma méthode ? Les points disparaîtront.

    Il suffit de remplacer - par un . dans la fonction.


    Philippe
    Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
    Vous pouvez consulter mes articles sur Access et PowerPoint

    Si vous avez des c'est peut-être moi, car vous postez un fichier en pièce jointe sans explications.

  6. #6
    Débutant
    Profil pro
    Inscrit en
    avril 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : avril 2007
    Messages : 646
    Points : 144
    Points
    144

    Par défaut

    j'ai essayé cette fonction
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function Eclatage(strDonnees As String, bytPos As Byte)
        ' déclaration
        Dim Eclat() As String
     
        ' éclatage
        Eclat = Split(strDonnees, ".")
     
        ' récupération en fonction de la position
        Eclatage = Eclat(bytPos)
    End Function
    avec cette ligne dans ma requete :
    mais quand je lance ma requete j'ai le code suivant
    erreur d'excution 9 l'indice n'appartient pas à la sélection et me souligne en jaune cette ligne Eclatage = Eclat(bytPos)

    je ne comprend pas pk?
    de plus peux t'on prendre en compte les . ou les , ou : dans la meme fonction?
    merci

  7. #7
    Rédacteur/Modérateur

    Avatar de Philippe JOCHMANS
    Homme Profil pro Philippe JOCHMANS
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    18 842
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe JOCHMANS
    Âge : 46
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : mai 2005
    Messages : 18 842
    Points : 42 808
    Points
    42 808

    Par défaut

    Re

    Tu devrais lire toute la discussion, il y a des informations pour gérer des erreurs éventuelles.

    Pour le . ou autre, c'est possible en faisant des tests, sur ce séparateur, il faudra que je regarde si je peux ce soir.

    De toute façon comme tes longueurs et tes séparateurs sont variables, il va falloir passer par une fonction, les Right, etc.. ne serviront à rien.

    Un dernier détail, est-ce que ce n'est que des chiffres ou il peut y avoir des lettres ?

    Philippe
    Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
    Vous pouvez consulter mes articles sur Access et PowerPoint

    Si vous avez des c'est peut-être moi, car vous postez un fichier en pièce jointe sans explications.

  8. #8
    Débutant
    Profil pro
    Inscrit en
    avril 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : avril 2007
    Messages : 646
    Points : 144
    Points
    144

    Par défaut

    Alors il n'y pas pas de lettre dans ce champ que des chiffre et , ou . ou : rien d'autre

    j'ai pu avance ci-joint ma derniere version

    par contre j'ai un autre probléme dans mon formulaire "consultation" quand je clique sur "secteur" j'ai un probleme erreur d'excecution 3464 type de données incompatible dans l'expression du critère

    je souhaite avoir la possibilité de faire un filtre pour les secteur de 50 a 100 par exemple
    Je pense avoir un problème de type de donnée mais je ne sais comment me sortir de ce problème la
    Fichiers attachés Fichiers attachés

  9. #9
    Rédacteur
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    décembre 2005
    Messages
    4 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : décembre 2005
    Messages : 4 311
    Points : 7 361
    Points
    7 361

    Par défaut

    Salut Popofpopof,

    Est-ce que tu n'aurais pas intérêt à modéliser un peu mieux ?
    La table 'Donnée' fait penser à un tableau Excel.
    Je suppose que P1,P2,... c'est Planète 1, Planète 2, ...
    Moi, je ferai au minimum une table 'donnée' avec ces champs :
    (a) NOM_JOUEUR, ATTACABLE, Classement, Alliance, Planete
    ou
    (b) NOM_JOUEUR, ATTACABLE, Classement, Alliance, Planete, galaxy, secteur, sous secteur
    C'est à dire un enregistrement par Joueur/Planète, avec dans l'option (b) la possibilité d'alimenter des champs galaxy, secteur, sous secteur, à partir du champ Planete.

    A+

  10. #10
    Débutant
    Profil pro
    Inscrit en
    avril 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : avril 2007
    Messages : 646
    Points : 144
    Points
    144

    Par défaut

    salut

    ma table donnée est comme sa que je fait une importation régulière des donnes a partir d'un fichier excel sur gdoc que je partage avec plusieurs membre.

    Mon but a juste de ne plus travaillé sur le fichie excel mais d'avoir une mini base de donnée pour me facilité les recherche

    tu peux m'aide sur mon probléme avec l erreur que j'ai sur le secteur?

  11. #11
    Rédacteur/Modérateur

    Avatar de Philippe JOCHMANS
    Homme Profil pro Philippe JOCHMANS
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    18 842
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe JOCHMANS
    Âge : 46
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : mai 2005
    Messages : 18 842
    Points : 42 808
    Points
    42 808

    Par défaut

    Re

    Voici une nouvelle version de la fonction entièrement commentée :

    Code :
    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
    Public Function Eclatage(strDonnees As String, bytPos As Byte) As String
        ' déclaration
        Dim Eclat() As String
        Dim strSep As String        ' récupération du séparateur
        Dim i As Integer
     
        ' on détecte d'abord le séparateur
        For i = 1 To Len(strDonnees)                    ' on parcourt les chiffres un à un dans une boucle
            If IsNumeric(Mid(strDonnees, i, 1)) Then    ' on test s'il s'agit d'un numérique
            Else
                strSep = Mid(strDonnees, i, 1)          ' on stocke le séparateur
                Exit For                                ' on sort de la boucle
            End If
        Next i
     
        ' éclatage de la chaine en fonction du séparateur trouvé
        Eclat = Split(strDonnees, strSep)
     
        ' on test bytpos s'il correspond à la plus grande valeur de la table pour éviter les erreurs de limites
        ' rappel que bytpos commence à 0
        If bytPos <= UBound(Eclat()) Then
            Eclatage = Eclat(bytPos)
        Else
            Eclatage = ""
        End If
    End Function
    Elle détecte le séparateur (il faut que celui-ci soit toujours le même dans la chaîne) et devrait gérer les erreurs de limites.

    Philippe
    Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
    Vous pouvez consulter mes articles sur Access et PowerPoint

    Si vous avez des c'est peut-être moi, car vous postez un fichier en pièce jointe sans explications.

  12. #12
    Débutant
    Profil pro
    Inscrit en
    avril 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : avril 2007
    Messages : 646
    Points : 144
    Points
    144

    Par défaut

    MERCI ton code est royal

    il me reste encore un bug dans le formulaire "consultation" quand je clique sur secteur j'ai un erreur je ne n'arrive pas a trouve de solution. de plus dans je fait dans ce meme formulaire un trie par "secteur" par ordre croissant cela ne marche pas!

  13. #13
    Rédacteur
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    décembre 2005
    Messages
    4 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : décembre 2005
    Messages : 4 311
    Points : 7 361
    Points
    7 361

    Par défaut

    Bonjour,

    Citation Envoyé par popofpopof Voir le message
    il me reste encore un bug dans le formulaire "consultation" quand je clique sur secteur j'ai un erreur je ne n'arrive pas a trouve de solution. de plus dans je fait dans ce meme formulaire un trie par "secteur" par ordre croissant cela ne marche pas!
    J'ai passé du temps sur ce problème d'incompatibilité de type de données, et je n'en trouve pas la cause exacte.
    C'est pour ça que je conseille de ne pas garder le modèle de la feuille excel.
    Au mieux je contourne le problème en réduisant le nombre de requêtes imbriquées.
    Par exemple pour la requête union regroup_planete
    Code sql :
    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
    SELECT NOM_JOUEUR, Alliance, P1, ATTACABLE
    FROM donnée  WHERE (([P1]) IS NOT NULL)
    union
    SELECT NOM_JOUEUR, Alliance, P2, ATTACABLE
    FROM donnée WHERE (([P2]) IS NOT NULL)
    union
    SELECT NOM_JOUEUR, Alliance, P3, ATTACABLE
    FROM donnée WHERE (([P3]) IS NOT NULL)
    union
    SELECT NOM_JOUEUR, Alliance, P4, ATTACABLE
    FROM donnée WHERE (([P4]) IS NOT NULL)
    union
    SELECT NOM_JOUEUR, Alliance, P5, ATTACABLE
    FROM donnée WHERE (([P5]) IS NOT NULL)
    union
    SELECT NOM_JOUEUR, Alliance, P6, ATTACABLE
    FROM donnée WHERE (([P6]) IS NOT NULL)
    union
    SELECT NOM_JOUEUR, Alliance, P7, ATTACABLE
    FROM donnée WHERE (([P7]) IS NOT NULL)
    union
    SELECT NOM_JOUEUR, Alliance, P8, ATTACABLE
    FROM donnée WHERE (([P8]) IS NOT NULL)
    UNION SELECT NOM_JOUEUR, Alliance, P9, ATTACABLE
    FROM donnée WHERE (([P9]) IS NOT NULL);
    De ce fait, je me passe de la requête regroup_planete_ok et la requête moteur_planete devient simplement :
    Code :
    1
    2
    3
    4
    SELECT regroup_planete.NOM_JOUEUR AS [Nom joueur], regroup_planete.Alliance, regroup_planete.P1 AS Planete, regroup_planete.ATTACABLE AS Attaquable, IIf([NAP]=Yes,"Oui","") AS NAP0, Left([P1],1) AS galaxy, eclatage([p1],1) AS secteur
    FROM ALLIANCE_NAP RIGHT JOIN regroup_planete ON ALLIANCE_NAP.NOM_ALLIANCE = regroup_planete.Alliance
    WHERE (((regroup_planete.NOM_JOUEUR)<>'0'))
    ORDER BY Left([P1],1), eclatage([p1],1);
    Enfin, dernier problème, la fonction Eclatage renvoie des strings alors que tu veux des nombres (pour trier et filtrer sur des intervalles).
    Voici une modification de la fonction de Philippe :
    Code :
    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
    Public Function Eclatage(strDonnees As String, bytPos As Byte) As Long
        ' déclaration
        Dim Eclat() As String
        Dim strSep As String        ' récupération du séparateur
        Dim i As Integer
     
        ' on détecte d'abord le séparateur
        For i = 1 To Len(strDonnees)                    ' on parcourt les chiffres un à un dans une boucle
            If IsNumeric(Mid(strDonnees, i, 1)) Then    ' on test s'il s'agit d'un numérique
            Else
                strSep = Mid(strDonnees, i, 1)          ' on stocke le séparateur
                Exit For                                ' on sort de la boucle
            End If
        Next i
     
        ' éclatage de la chaine en fonction du séparateur trouvé
        Eclat = Split(strDonnees, strSep)
     
        ' on test bytpos s'il correspond à la plus grande valeur de la table pour éviter les erreurs de limites
        ' rappel que bytpos commence à 0
        If bytPos <= UBound(Eclat()) Then
            Eclatage = CLng(Eclat(bytPos))
        Else
            Eclatage = -1
        End If
    End Function
    Je persiste à penser qu'il serait plus simple de modifier la structure des données et à travailler sur un module d'importation qui transforme les données Excel en données ... base de données.

    A+

  14. #14
    Débutant
    Profil pro
    Inscrit en
    avril 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : avril 2007
    Messages : 646
    Points : 144
    Points
    144

    Par défaut

    je viens de faire tes modif LedZeppII mais j'ai une erreur avec le code de Philippe que tu as modifier "incompatibilite de type" dans j ouvre le formulaire.
    Fichiers attachés Fichiers attachés

  15. #15
    Rédacteur
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    décembre 2005
    Messages
    4 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : décembre 2005
    Messages : 4 311
    Points : 7 361
    Points
    7 361

    Par défaut

    Le contenu du champ P5 pour le joueur bartabas n'est pas conforme à la syntaxe attendue : 2;356.9

    Voici une nouvelle adaptation qui prend en compte des séparateurs différents dans la même chaîne,
    ainsi que l'absence de données (ex: 1..3 ou 1.2.) :
    Code :
    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
    Public Function Eclatage(strDonnees As String, bytPos As Byte) As Long
        ' déclarations
        Const C_STRVALERR = "-1"
        Dim Eclat() As String, sExtrait As String
        Dim i As Integer
     
        ' on remplace tout caractère non "0"-"9" par "." qui servira de séparateur
        For i = 1 To Len(strDonnees)
            If Not (Mid(strDonnees, i, 1) Like "[0-9]") Then
               If Mid(strDonnees, i, 1) <> "." Then Mid(strDonnees, i, 1) = "."
            End If
        Next i
     
        ' éclatage de la chaine
        Eclat = Split(strDonnees, ".")
     
        ' on test bytpos s'il correspond à la plus grande valeur de la table pour éviter les erreurs de limites
        ' rappel que bytpos commence à 0
        If bytPos <= UBound(Eclat()) Then
            sExtrait = Eclat(bytPos)
            If Len(sExtrait) = 0 Then sExtrait = C_STRVALERR  ' si chaîne vide on affecte la chaîne erreur C_STRVALERR
        Else
            sExtrait = C_STRVALERR ' on affecte la chaîne erreur C_STRVALERR
        End If
        Eclatage = CLng(sExtrait)
    End Function
    A+

  16. #16
    Rédacteur/Modérateur

    Avatar de Philippe JOCHMANS
    Homme Profil pro Philippe JOCHMANS
    Développeur informatique
    Inscrit en
    mai 2005
    Messages
    18 842
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe JOCHMANS
    Âge : 46
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : mai 2005
    Messages : 18 842
    Points : 42 808
    Points
    42 808

    Par défaut

    Re

    Citation Envoyé par LedZeppII Voir le message
    Je persiste à penser qu'il serait plus simple de modifier la structure des données et à travailler sur un module d'importation qui transforme les données Excel en données ... base de données.
    Tout à fait d'accord avec toi, la fonction n'est qu'un palliatif.

    Philippe
    Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
    Vous pouvez consulter mes articles sur Access et PowerPoint

    Si vous avez des c'est peut-être moi, car vous postez un fichier en pièce jointe sans explications.

  17. #17
    Débutant
    Profil pro
    Inscrit en
    avril 2007
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : avril 2007
    Messages : 646
    Points : 144
    Points
    144

    Par défaut

    SUPER SUPER avec ton nouveau code le filtre sur secteur marche nickel donc tout est bon plus erreur
    merci a vous deux pour vos divers solutions

    merci les chefs

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •