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

VBA Access Discussion :

Séparation de valeurs au niveau des "/"


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant
    Inscrit en
    Juin 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Juin 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Séparation de valeurs au niveau des "/"
    Bonjour à tous, (Et désolé si quelqu'un a déjà répondu à ce type de questions mais je n'ai pas trouvé la réponse...)

    Je cherche à séparer mes valeurs au niveau de ses "/" et ne garder que les 3ème, 4eme et 5eme valeurs afin de les positionner dans de nouveaux champs

    Exemple :

    Service : ab/cde/fgh/ij/kl/mn/opq

    Champs 1 : fgh
    Champs 2 : ij
    Champs 3 : kl

    Sachant que le nombre de valeurs entre "/" est variable et que leur longueur l'est également... (A part les deux premiers qui feront toujours respectivement 2 et 3 de longueur de caractère)

    Je vous remercie par avance de votre aide !

    Cordialement,

  2. #2
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour Tehpoch,

    La fonction split devrait répondre à tes besoins

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant
    Inscrit en
    Juin 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Juin 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour dumas.blr,

    je vous remercie pour votre retour !

    Cette fonction semble en effet convenir à mes besoins!

    Est-ce que je peux l'utiliser dans une requête? Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Expr1 : String([Requête1]![Service] ;"/")
    Je ne vois pas comment sélectionner la valeur vu qu'il s'agit d'un tableau ...

    Je vous remercie par avance.

    Cordialement,

  4. #4
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Bonjour,

    Le mieux est d'écrire une fonction externe qui sera appelé dans ton SQL.

    C'est une fonctionnalité à mon avis pas assez connue est qui est très pratique, car, à l’instar des autres bases de données, tu n'as pas besoin de les déclarer comme procédure ou fonction.

    prenons par exemple ta fonction

    Déclare d'abords dans un module externe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function ma_fonction(ma chaine as string, position_dans_la_chaine as integer) as string
     
    dim ma_chaine_decoupee() as string
     
    ma_chaine_decoupee = split(ma_chaine, '/')
     
    'attention, le tableau commence à l'indice 0, donc enlever 1 pour récupérer la bonne position
    ma_fonction = ma_chaine_decoupee(position_dans_la_chaine - 1)
    exit function

    ensuite, dans ton SQL, tu n'auras plus qu'a écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
    ... ,
    ma_fonction(mon_champ,3),
    ma_fonction(mon_champ,4),
    ma_fonction(mon_champ,5),
    ...
    FROM ma_table
    ...

  5. #5
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Il est bien sur possible de s'affranchir de la déclaration dans un module externe en remplaçant dans le SQL la built-in fonction par sa syntaxe VBA

    Ainsi on pourra écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
    ...
    split(mon_champ, '/')(2) as 3eme_valeur,
    split(mon_champ, '/')(3) as 4eme_valeur,
    split(mon_champ, '/')(4) as 5eme_valeur,
    ...
    FROM ma_table
    ...

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Consultant
    Inscrit en
    Juin 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Juin 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour Dumas.Blr,

    Je vous remercie pour votre aide, cela fonctionne parfaitement (Plutôt que de passer en SQL j'ai écrit une expression mais le principe est parfait).
    Ma seule difficulté est maintenant de remplir mon champ par du vide si jamais je n'ai pas de direction(Champ 4) ou de domaine (Champ 3) associé mais seulement une BL (Champ 2), ma requête "ajout" me supprime les lignes où il n'y en a pas actuellement...

    J'ai tenté d'ajouter à la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If IsEmpty(ma_chaine_decoupee(3)) Then ma_chaine_decoupee(3) = " "
    If IsEmpty(ma_chaine_decoupee(4)) Then ma_chaine_decoupee(4) = " "
    Néanmoins cela ne résout pas le problème, elle reste considérée comme vide et pose un problème de compatibilité.

    Je vous remercie encore une fois d'avance pour votre aide.

    Cordialement,

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Consultant
    Inscrit en
    Juin 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Juin 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Rebonjour,

    Je viens de remarquer votre réponse entre temps. Malheureusement le fait d'écrire : "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    split(mon_champ, '/')(2)
    ne fonctionne pas.

    Cela me marque "L'expression entrée comporte un point (.), un point d'exclamation (!) ou des parenthèses () non valide", "vous avez peut être un identificateur non valide ou tapé des parenthèses après la constante NULL."

    La problématique est donc toujours lié aux split qui n'ont pas de 4eme et/ou 5eme valeur...

    Merci par avance !

    Cordialement,

  8. #8
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Je n'ai pas testé l'expression. Il faut probablement remplacer '/' par "/"

  9. #9
    Membre éclairé Avatar de dumas.blr
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2010
    Messages
    598
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2010
    Messages : 598
    Points : 879
    Points
    879
    Par défaut
    Je n'ai pas trop le temp de regarder maintenant, mais tester aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Isnull(ma_chaine_decoupee...
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if len(ma_chaine_decoupee...) = 0

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Consultant
    Inscrit en
    Juin 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Juin 2015
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Dumas_Blr,

    Je vous remercie de prendre le temps de me répondre.

    Oui j'avais remplacé par des guillemets pour que la formule fonctionne.

    J'ai testé IsNull mais pas par Len, je vais tester et continuer à chercher sur google !

    Merci encore !

    Très bonne fin de journée.

    Tehpoch,

Discussions similaires

  1. Histogramme : valeurs au niveau des axes
    Par jijikkk dans le forum OpenCV
    Réponses: 0
    Dernier message: 20/02/2010, 15h10
  2. Réponses: 8
    Dernier message: 16/05/2007, 17h27
  3. [XML]Protection des doubles quotes
    Par DarkNagash dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 27/04/2006, 11h59
  4. [Tableaux] souci avec des simples quotes
    Par Jean Fi dans le forum Langage
    Réponses: 6
    Dernier message: 29/03/2006, 21h13

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