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

Access Discussion :

Probleme de tri de chaine de caractere...


Sujet :

Access

  1. #1
    Membre régulier Avatar de GESCOM2000
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 107
    Points : 79
    Points
    79
    Par défaut [RESOLU] Probleme de tri de chaine de caractere...
    En VB


    J' ai ==>TOTO_AVANT=" 1;2;3;4;4;5;6;7;7"
    Je veux transformer TOTO_AVANT pour enlever les doublons
    ex==> TOTO_APRES="1;2;3;4;5;6;7"

    C'est peut etre super simple mais je galaire....
    Merci d'avance

    '********************je recommence**********
    Dim DVALEUR1 as Integer
    Dim DVALEUR2 as Variant
    DIM DRESULTAT as Variant

    DVALEUR1 = 2
    DVALEUR2="1-12-3-4-15-"

    '****quand je fait...

    DRESULTAT = InStr(1,DVALEUR2, DVALEUR1)

    '****Ca devrait me renvoyer 0 ==>MAIS CA ME RENVOIE 4?????
    '*
    '*
    '***Peut etre un probleme de declaration de variable?...

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    tu veux faire ça comment?
    dans une requête sql?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut et bienvenu(e) sur le forum !

    Tu peux essayer avec une requete regroupement :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Table2.TOTO_AVANT AS TOTO_APRES
    FROM Table2
    GROUP BY Table2.TOTO_AVANT;

    A+

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    Et ajoutes un distinct à ton select si tu ne veux pas avoir de doublons.

  5. #5
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Je crois pas que TOTO_AVANT soit une table...

    J'ai l'impression qu'il s'agit d'un fichier texte contenant la chaîne indiquée.
    La solution la plus rapide serait effectivement de passer par une table, mais il faudrait pour cela intégrer les valeurs
    1;2;3;4;4;5;6;7;7
    dans la même colonne.

  6. #6
    Membre confirmé
    Avatar de Petogaz
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 479
    Points : 580
    Points
    580
    Par défaut
    salut,

    Citation Envoyé par GESCOM2000
    J' ai ==>TOTO_AVANT=" 1;2;3;4;4;5;6;7;7"
    Je veux transformer TOTO pour enlever les doublons
    ex==> TOTO_APRES="1;2;3;4;5;6;7"

    C'est peut etre super simple mais je galaire....
    Merci d'avance
    bon c'est encore à nous de deviner d'où proviennent ces données.
    pour moi la question n'est pas précise.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Citation Envoyé par claralavraie
    Et ajoutes un distinct à ton select si tu ne veux pas avoir de doublons.
    Ben si c'est le seul champ qui est sélectionné, avec un groupe by pour moi il n'y pas besoin de distinct. Il n'y aura pas de doublons dans ce cas non ?

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 348
    Points : 19 597
    Points
    19 597
    Billets dans le blog
    65
    Par défaut
    Salut,

    S'il s'agit d'une chaine de caractère:

    le mieux c'est d'utiliser la fonction split pour transformer la chaine en un tableau de valeur,

    et après parcourir ce tableau pour supprimer les doublons et copier le tout dans un autre tableau.

    @+

  9. #9
    Membre habitué
    Inscrit en
    Décembre 2005
    Messages
    455
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 455
    Points : 166
    Points
    166
    Par défaut
    en effet le group by élimine bien les doublons.
    Autant pour moi. [/quote]

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Rien compris, mais alors vraiment rien

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 710
    Points : 847
    Points
    847
    Par défaut
    Salut,

    Je vois que j'avais mal compris ton besoin (apparament je suis pas le seul !).

    En ce qui concerne ton code essaie comme ça plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub toto()
     
    Dim DVALEUR1 As String
    Dim DVALEUR2 As String
    Dim DRESULTAT As Integer
     
    DVALEUR1 = 2
    DVALEUR2 = "1-12-3-4-15-"
    DRESULTAT = InStr(1, DVALEUR2, DVALEUR1)
    Debug.Print DRESULTAT
    End Sub
    C'est bien des déclarations que vient le pb.

    Ayant (je pense) mieux compris ton pb, c'est User qui tiens la solution :
    Citation Envoyé par User
    le mieux c'est d'utiliser la fonction split pour transformer la chaine en un tableau de valeur

    Si tu veux tu dois pouvoir t'inspirer de ça (même si c'est lourd comme méthode ) :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Sub toto()
     
    Dim DVALEUR2 As String
    Dim Tableau() As String 'déclaration du tableau avec doublons
    Dim Resultat() As String  'déclaration du tableau sans doulons
    Dim I As Integer
    Dim J As Integer 'sert à pointer Resultat
    Dim Flag As Boolean
    Dim Compteur As Integer 'sert à pointer Tableau
    Dim Toto_apres As String
     
    DVALEUR2 = "1-1-12-3-4-15-1-3"
    On Error GoTo Toto_Err
     
    Tableau = Split(DVALEUR2, "-")
    'voir tableau
    For I = 0 To 6
        Debug.Print Tableau(I)
    Next
    'remplir resultat sans les doublons
    J = 0
    ReDim Resultat(0)
    Flag = False
    Compteur = 0
    Do 'on parcourt tableau
        For I = 0 To J 'on parcourt resultat pour tester si c'est un doublon
            If Tableau(Compteur) = Resultat(I) Then
                Flag = True
                Exit For
            End If
        Next
        If Flag = False Then 'si pas un doublon => ajoute la nouvelle valeur
            Resultat(J) = Tableau(Compteur)
            J = J + 1
            ReDim Preserve Resultat(J)
        End If
        Flag = False
        Compteur = Compteur + 1
    Loop
     
    Toto_Err:
     
    If Err.Number = 9 Then
        ReDim Preserve Resultat(J - 1)
        For I = 0 To J - 1
            Debug.Print Resultat(I)
            Toto_apres = Toto_apres & "-" & Resultat(I)
        Next
        Toto_apres = Right(Toto_apres, Len(Toto_apres) - 1)
        Debug.Print Toto_apres
        Exit Sub
    Else
        MsgBox "Erreur N° " & Err.Number & " " & Err.Description
    End If
     
     
    End Sub
    A+

  12. #12
    Membre régulier Avatar de GESCOM2000
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 107
    Points : 79
    Points
    79
    Par défaut merci bien pour votre aide mais j'ai touver plus simple....
    Citation Envoyé par Muhad'hib
    Salut,

    Je vois que j'avais mal compris ton besoin (apparament je suis pas le seul !).

    En ce qui concerne ton code essaie comme ça plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub toto()
     
    Dim DVALEUR1 As String
    Dim DVALEUR2 As String
    Dim DRESULTAT As Integer
     
    DVALEUR1 = 2
    DVALEUR2 = "1-12-3-4-15-"
    DRESULTAT = InStr(1, DVALEUR2, DVALEUR1)
    Debug.Print DRESULTAT
    End Sub
    C'est bien des déclarations que vient le pb.

    Ayant (je pense) mieux compris ton pb, c'est User qui tiens la solution :
    Citation Envoyé par User
    le mieux c'est d'utiliser la fonction split pour transformer la chaine en un tableau de valeur

    Si tu veux tu dois pouvoir t'inspirer de ça (même si c'est lourd comme méthode ) :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Sub toto()
     
    Dim DVALEUR2 As String
    Dim Tableau() As String 'déclaration du tableau avec doublons
    Dim Resultat() As String  'déclaration du tableau sans doulons
    Dim I As Integer
    Dim J As Integer 'sert à pointer Resultat
    Dim Flag As Boolean
    Dim Compteur As Integer 'sert à pointer Tableau
    Dim Toto_apres As String
     
    DVALEUR2 = "1-1-12-3-4-15-1-3"
    On Error GoTo Toto_Err
     
    Tableau = Split(DVALEUR2, "-")
    'voir tableau
    For I = 0 To 6
        Debug.Print Tableau(I)
    Next
    'remplir resultat sans les doublons
    J = 0
    ReDim Resultat(0)
    Flag = False
    Compteur = 0
    Do 'on parcourt tableau
        For I = 0 To J 'on parcourt resultat pour tester si c'est un doublon
            If Tableau(Compteur) = Resultat(I) Then
                Flag = True
                Exit For
            End If
        Next
        If Flag = False Then 'si pas un doublon => ajoute la nouvelle valeur
            Resultat(J) = Tableau(Compteur)
            J = J + 1
            ReDim Preserve Resultat(J)
        End If
        Flag = False
        Compteur = Compteur + 1
    Loop
     
    Toto_Err:
     
    If Err.Number = 9 Then
        ReDim Preserve Resultat(J - 1)
        For I = 0 To J - 1
            Debug.Print Resultat(I)
            Toto_apres = Toto_apres & "-" & Resultat(I)
        Next
        Toto_apres = Right(Toto_apres, Len(Toto_apres) - 1)
        Debug.Print Toto_apres
        Exit Sub
    Else
        MsgBox "Erreur N° " & Err.Number & " " & Err.Description
    End If
     
     
    End Sub
    A+

    Citation Envoyé par GESCOM2000
    Salut,


    J'ai trouver plus simple!!!!!!!!!***

    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
     
    Sub toto() 
     
    Dim DVALEUR1 As variant
    Dim DVALEUR2 As variant
    Dim DVALEUR3 As variant
    Dim DRESULTAT As variant
     
    DVALEUR1 = 2 'valeur  à rechercher dans la chaine
    '******************************************
    '**ce qui donne -2- et la il confond pas avec -12-**
    DVALEUR3= "-" & DVALEUR1 & "-"                    
    '******************************************
     
    DVALEUR2 = "1-12-3-4-15-" 
    DRESULTAT = InStr(1, DVALEUR2, DVALEUR3) 
    Debug.Print DRESULTAT 
     
    '**Bref defois ont ce prend la tete pour des bricole....
    End Sub
    A+
    [RESOLU]

  13. #13
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    [RESOLU], donc ?!

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

Discussions similaires

  1. probleme tri fusion chaine de caractere
    Par G4uthier dans le forum C
    Réponses: 0
    Dernier message: 30/05/2009, 16h17
  2. Réponses: 4
    Dernier message: 30/09/2006, 12h27
  3. Réponses: 6
    Dernier message: 29/05/2006, 20h58
  4. Réponses: 1
    Dernier message: 29/05/2006, 12h37
  5. Probleme de tri de chaine de caractere...(BIS)
    Par GESCOM2000 dans le forum Access
    Réponses: 4
    Dernier message: 27/12/2005, 18h49

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