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 :

Diviser une valeur en plusieurs valeurs


Sujet :

Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 158
    Points
    158
    Par défaut Diviser une valeur en plusieurs valeurs
    Salut,

    Je voudrais diviser une variable
    en trois variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a = "501Z"
    b = "502Z"
    c = "503Z"
    Merci pour votre aide

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Utilise la fonction Split()

    Argy

  3. #3
    Membre régulier Avatar de nicou50
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 131
    Points : 80
    Points
    80
    Par défaut exemple
    Je te donne un exemple que j'Ai fait pour te faciliter la vie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim a As String
    Dim monTab() As String
    a =  "132;123;Nicolas"
    monTab = Split(a, ";")
    NoBonCommande = monTab(0)
    NoClient = monTab(1)
    NomPatient = monTab(2)

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 158
    Points
    158
    Par défaut
    Le problème c'est que ma zone de texte ou se trouve les valeurs a spliter varie en nombres de valeurs, un coup ça sera 501Z;502Z, et ça peut etre 502Z;512Z;011A;666A etc...
    Je ne peut pas determiner le nombre de valeurs à spliter. Ce que je voudrais c'est qu'a chaque ; rencontré il me stock la valeur ex 502Z dans une variable a par ex, le suivant 512Z dans un variable b etc...
    J'ai peur par contre d'avoir a déclarer les variables où les stocker et ça c'est forcément fixe puisqu'il faut les déclarer.
    Merci d'avance pour votre aide.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 158
    Points
    158
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim avarmotclé as string, varmotclé as string
    If Me.CODENAF <> "" Then
    avarmotclé = Split(Nz(CODENAF), ";")
    For Each varmotclé In avarmotclé
      str = str & " OR T_EntrepriseContact.CODENAF Like '" & varmotclé & "'"
    Next
    Message d'erreur: For each ne peut itérer que sur un objet collection ou tableau

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Une variable Tableau se redimensionne (ReDim [Preserve])
    Un tableau splitté possède des bornes (LBound & UBound)
    Une boucle For/Next pour parcourir le tableau et le tour est joué.

    Argy

    P.S. Pitou5464 , ton code contient une grosse erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim avarmotclé as string, varmotclé as string

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 158
    Points
    158
    Par défaut
    Merci pour tes réponses argy
    voila comment j'ai fait meme si c'est pas très propre, je cherche une solution pour avoir un AND dans ma requete SQL pour la premiere valeur du tableau et un OR pour toutes les valeurs qui suivent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim X() As String, z As Variant
    If Me.CODENAF <> "" Then
    X = FctSplit(Me.CODENAF.Value, ";")
    str = str & " AND T_EntrepriseContact.CODENAF = '" & X(0) & "'"
        For Each z In X
        str = str & " OR T_EntrepriseContact.CODENAF = '" & z & "'"
        Next
    End If
    Ma grosse erreur est d'avoir oublié le () après X je pense.
    avec dans un module:
    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
    Public Function FctSplit(ByVal strg As String, Sep As String) As Variant
        Dim i As Integer
        Dim TblSplit() As String
        i = 1
        While InStr(1, strg, Sep) <> 0
            ReDim Preserve TblSplit(i)
            TblSplit(i - 1) = Left(strg, InStr(1, strg, Sep) - 1)
            strg = Mid(strg, InStr(1, strg, Sep) + Len(Sep))
            i = i + 1
        Wend
        If Len(strg) > 0 Then
            ReDim Preserve TblSplit(i)
            TblSplit(i - 1) = strg
        End If
        FctSplit = TblSplit
    End Function

  8. #8
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    groose j'ai un peu exagéré...
    Bref, pour ta fonction, je te propose cela :

    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
    Function GetWhereCondition(ByVal Criteria As String)
    Dim strSQL As String
    Dim straCriteria() As String
    Dim I As Integer
    &#160;&#160;If InStr(1, Criteria, ";") Then
    &#160;&#160;&#160;&#160;straCriteria = Split(Criteria, ";")
    &#160;&#160;&#160;&#160;Select Case UBound(straCriteria())
    &#160;&#160;&#160;&#160;&#160;&#160;Case Is < 1
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; strSQL = "AND T_EntrepriseContact.CODENAF = " & Chr(34) & _
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; straCriteria(0) & Chr(34) & ";"
    &#160;&#160;&#160;&#160;&#160;&#160;Case Else
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;For I = 0 To UBound(straCriteria)
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;strSQL = strSQL & IIf(I = 0, " AND", " OR") & _
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;" T_EntrepriseContact.CODENAF = " & Chr(34) & straCriteria(I) _
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;& Chr(34) & IIf(I < UBound(straCriteria), "", ";")
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;Next
    &#160;&#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;End Select
    &#160;&#160;Else
    &#160;&#160;&#160;&#160;strSQL = "AND T_EntrepriseContact.CODENAF = " & Chr(34) & _
    &#160;&#160;&#160;&#160;Criteria & Chr(34) & ";"
    &#160;&#160;End If
    GetWhereCondition = strSQL
    
    End Function
    Argy

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 158
    Points
    158
    Par défaut
    comment j'utilise la fonction sur une zone de texte qui comprend par ex: 501Z;502Z;

  10. #10
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 123
    Points : 12 172
    Points
    12 172
    Billets dans le blog
    5
    Par défaut
    Bien par exemple si c'est pour alimenter un listbox, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim SQLSelect As String
    &#160;&#160;
    &#160;&#160;SQLSelect = "SELECT IDEntreprise, NomEntreprise WHERE _
    NombreSalaries > " & txtNBSalaries & GetWhereCondition(Me!CodeNaf)
    &#160;&#160;Me!lstEntreprise.RowSource = SQLSelect
    sur l'événement AfterUpdate de ton textBox...

    Argy

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 158
    Points
    158
    Par défaut
    ouais ça me parait clair, je vais tester right now

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 158
    Points
    158
    Par défaut
    ça marche nikel.merci argy

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/07/2009, 14h08
  2. test:comparer une valeur avec plusieurs valeurs
    Par kkkkkk dans le forum Struts 1
    Réponses: 3
    Dernier message: 24/06/2007, 21h25
  3. [RegEx] Correspondance d'une expression avec plusieurs valeurs
    Par blueice dans le forum Langage
    Réponses: 4
    Dernier message: 20/02/2007, 19h17
  4. Diviser une chaine en plusieurs valeurs
    Par Pitou5464 dans le forum Access
    Réponses: 2
    Dernier message: 07/07/2006, 14h41
  5. Update d une table avec plusieurs valeurs
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2006, 08h58

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