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 :

Extraire un nombre dans une chaine


Sujet :

Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Extraire un nombre dans une chaine
    Bonjour à toute la communauté (... ou plutôt à ceux qui passerons par là ),


    J'ai un champ de type texte où je peux avoir comme enregistrement des chose du genre 1b, 124c, 654, ...

    Suite à ça, j'ai créé une requête de création de table où je voudrais séparer dans 2 champs: les caractères numérique d'un côté, et alpha de l'autre.

    J'ai bien cherché dans le forum, la faq, le net, ... mais je n'ai rien trouvé (ou peut-être rien compris ) pour faire ça.


    Merci d'avance au âme charitable qui voudront bien se pencher sur mon soucis

  2. #2
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut à toi ami Rennais,

    es-ce que dans ton champs le nombre de chiffre est fixe ou non ?

  3. #3
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    En passant par du VBA et en utilisant les fonctions Left(), Right(), Len() et IsNumeric() je pense que tu peux t'en sortir.

    Pour extraire la partie numeric on peut imaginer quelque chose du genre:

    bon, on part du principe que tu parcours tes donnees avec un recordset, et pour chaque enregistrement tu stoque le contenu de ton champ text dans la variable monTexte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    i = 1
     
    'tant que c'est numerique
    while(isNumeric(left(monText, i))
     'on incremente, ainsi on verra au prochain 
       'tour si la lettre suivant est egalement un chiffre
     i=i+1
    wend
     
    i = i-1
    debug.print "Voici la partie numerique : " & left(monText, i
    Code a tester evidemment. Ensuite a partir du i et la fonction Right() tu peux extraire sans probleme la partie texte.
    A toi de voir ce que tu veux faire lorsque tu n'as que du texte ou bien que du numerique etc.

    En esperant t'aider
    J'aime les gâteaux.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Tout d'abord merci pour votre volontariat

    Citation Envoyé par Dolphy35
    es-ce que dans ton champs le nombre de chiffre est fixe ou non ?
    non! comme j'ai mis dans l'exemple ça peut être 1b, 122b, 544, 4863f,...

    Citation Envoyé par Demco
    En passant par du VBA
    C'est une requête donc j'ai que le générateur d'expression ou alors je ne sais pas comment faire pour rentrer du VBA...

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    cela pourrait donner
    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
     
    Function numer(x As String) As Variant
    Dim v As Variant
    Dim rep As Variant
    Dim ou As Integer
    ou = 1
    rep = Mid(x, 1, 1)
    Do Until IsNumeric(rep) Or ou = Len(x)
    ou = ou + 1
    rep = Mid(x, ou, 1)
    Loop
    If IsNumeric(rep) Then
    Do Until Not IsNumeric(Mid(x, ou + 1, 1)) Or ou = Len(x)
    ou = ou + 1
    rep = rep & Mid(x, ou, 1)
    Loop
    numer = rep
    Exit Function
    Else
    numer = v
    End If
    End Function
     
     
    Function pasnumer(x As String) As String
    Dim u As Variant
    u = numer(x)
    If IsNull(u) Then
    pasnumer = x
    Else
    pasnumer = Left(x, InStr(1, x, u) - 1) & Right(x, Len(x) - InStr(1, x, u) - Len(u) + 1)
    End If
    End Function
    Elle est pas belle la vie ?

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    même soucis ce code ne rentre pas dans le générateur de code

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    Citation Envoyé par Demco
    En passant par du VBA
    C'est une requête donc j'ai que le générateur d'expression :? ou alors je ne sais pas comment faire pour rentrer du VBA...[/quote]
    pour entrer du vba
    alt f11 bienvenue dans le monde cruel des développeurs
    pour commencer
    insertion module
    et coller les fonctions des autres d'abord
    et rapidement les siennes
    Elle est pas belle la vie ?

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par random
    bienvenue dans le monde cruel des développeurs
    Naaaaaaaaaaaaaaaan!

    Bon j'ai commencé à regarder mais je m'y remettrais dès lundi car le week-end m'appelle...

    Merci pour tout
    Bon week-end et @ lundi

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Bonjour à tous!

    Je suis un peu nul en programmation et je ne comprend pas tout le code ci-dessus Quelqu'un pourrait il me l'expliquer?

    D'autre part pour éxécuter un module, comment faut il faire (créer une macro pour ouvrir la requête puis ouvrir le module)???

    En plus c'est lundi matin

  10. #10
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Colle cette fonction dans un module:

    Citation Envoyé par random
    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
     
    Function numer(x As String) As Variant
    Dim v As Variant
    Dim rep As Variant
    Dim ou As Integer
    ou = 1
    rep = Mid(x, 1, 1)
    Do Until IsNumeric(rep) Or ou = Len(x)
    ou = ou + 1
    rep = Mid(x, ou, 1)
    Loop
    If IsNumeric(rep) Then
    Do Until Not IsNumeric(Mid(x, ou + 1, 1)) Or ou = Len(x)
    ou = ou + 1
    rep = rep & Mid(x, ou, 1)
    Loop
    numer = rep
    Exit Function
    Else
    numer = v
    End If
    End Function
    Par exemple pour utiliser celle la declare la comme public:
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function numer(x As String) As Variant
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Function numer(x As String) As Variant
    Puis tu peux l'utiliser depuis le code VBA il faut faire par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox numer("2121eueueu")
    Ce qui devrait t'afficher le resultat dans une MsgBox.

    Pour ce qui est de le faire depuis une macro, je n'en utilise pas et je n'ai pas Access au boulot donc je laisse la main a quelqu'un d'autre.
    J'aime les gâteaux.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Bon je n'arrive vraiment à rien

    Est ce que quelqu'un pourrais me le faire ?

    Voici une base avec la table en question:
    http://www.olivier-girault.info/developpez/essai.mdb

    Il me faudrait créer une nouvelle table, ou la même, avec un champ numérique et un champ alpha pour décomposer le champ "numero_parcad".


    Désolé si cette démarche peut choquer quelques personnes, mais je n'arrive vraiment à rien .
    Merci d'avance pour la grosse épine que vous m'enleverez...

  12. #12
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Citation Envoyé par SIGOliv
    Désolé si cette démarche peut choquer quelques personnes, mais je n'arrive vraiment à rien
    ben si à chaque fois que tu as un problème tu attends que quelqu'un te fasse la modif t'es pas rendu...

    Soit plus précis sur tes problèmes rencontrés si tu veux qu'on t'aide :
    Citation Envoyé par SIGOliv
    ce code ne rentre pas dans le générateur de code
    ne veut strictement rien dire ...

    Citation Envoyé par SIGOliv
    Bon je n'arrive vraiment à rien
    n'est pas d'une grande utilité non plus...

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Arkham46
    Soit plus précis sur tes problèmes rencontrés si tu veux qu'on t'aide
    Ok!

    Bon alors je reprend tout:
    - J'ai une table avec un champ "numero_parcad"
    - Dans ce champ il y a des numéro et des lettres, mais pas obligatoirement.
    - Je désire découper ce champ dans deux autres séprarés avec:
    • un champ contenant le numéro de la parcelle: numérique
    • un champ contenant la lettre de la sous parcelle: alpha

    - Pour ce faire, j'ai copié le code que Random as marqué dans un module.

    A partir de là, je bloque:
    - je ne sais pas comment l'exécuter
    - je ne sais pas si il faut le faire à partir d'une macro ou autre chose

    En bref je n'ai jamais fais de truc comme ça et je bloque dès le début.

    Voilà, je pense que c'est plus clair. Et c'est aussi pour ça que je demandais assistance car je pense que tout le monde vas perdre un peu de temps à m'expliquer des trucs basiques

  14. #14
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    bon ça risque effectivement d'être compliqué si tu n'y connais rien

    déjà avant de parler de programmation :

    - les codes 1b, 124c, 654, ... sont-ils importés d'une autre application?
    - l'opération de découpage sert à quoi? une mise à niveau d'un base, exécuté une seul fois? (tu dis : "Il me faudrait créer une nouvelle table, ou la même"; si ça t'importe peu c'est que c'est un traitement unitaire alors?)
    - ou alors tu veux séparer les données dynamiquement pour faire des filtres par expemple sur la sous-parcelle?)

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Arkham46
    - les codes 1b, 124c, 654, ... sont-ils importés d'une autre application?
    Oui, j'ai une base de données maitresse avec une table "parcad". A l'aide d'une requête de création, je fais un filtre pour avoir une seule propriété.
    Citation Envoyé par Arkham46
    - l'opération de découpage sert à quoi? une mise à niveau d'un base, exécuté une seul fois? (tu dis : "Il me faudrait créer une nouvelle table, ou la même"; si ça t'importe peu c'est que c'est un traitement unitaire alors?)
    l'opération de découpage sert à pouvoir avoir une table avec ces deux champs pour ensuite pouvoir l'importer dans une autre table d'une base de données SQL server (l'application d'import est déjà réalisée).
    Citation Envoyé par Arkham46
    - ou alors tu veux séparer les données dynamiquement pour faire des filtres par expemple sur la sous-parcelle?)
    Non pas de filtre, il me faut ces deux champs en dur.

    En tout cas merci de ton coup de main

  16. #16
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    alors il va falloir commencer simple si tu rames...

    plutôt que d'essayer une fonction complexe que tu ne comprend pas dès le début, essaye une fonction toute bête qui renvoie un chiffre par exemple

    et essaye d'appeler ta fonction dans un champ de ta requête (il suffit de mettre le nom de la fonction sur la ligne champ, tu peux utiliser le générateur d'expression pour être sûr)

    ensuite tu fais une fonction avec le champ en paramètre qui renvoie le champs * 2

    et une fois que tu as compris comment intégrer une fonction dans une requête tu t'attaqueras au découpage du champ

    enfin c'est comme tu veux mais ça me semble maso de vouloir tout apprendre en même temps...

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Super c'est juste les info qui me manquait et ça fonctionne très bien!!!

    Merci à tous et longue vie aux forums d'entraide...

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

Discussions similaires

  1. Extraire des nombres dans une chaine de caractère
    Par fxfxfx dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 27/05/2013, 10h41
  2. [CR XI] extraire un nombre dans une chaine de caractère
    Par kikidrome dans le forum Formules
    Réponses: 4
    Dernier message: 01/10/2009, 13h39
  3. [MySQL] extraire des nombre d'une chaine de caractères et addition
    Par Yotho dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/03/2006, 16h54
  4. Récuperer un nombre dans une chaine de caractère
    Par ColonelHati dans le forum C
    Réponses: 4
    Dernier message: 27/04/2005, 14h50
  5. [LG]Extraire des nombres d'une chaine
    Par audreym31 dans le forum Langage
    Réponses: 4
    Dernier message: 18/01/2004, 21h24

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