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 :

extraire des chiffres d'une chaîne de caractères aléatoire


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    magasinier
    Inscrit en
    Mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : magasinier
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut extraire des chiffres d'une chaîne de caractères aléatoire
    Bonjour à tous

    J'aimerai simplifier une tache journalière sur mon lieu de travail, après une copie d'écran du logiciel de l'entreprise je dois extraire des chiffres d'une chaîne de caractères aléatoire et les transférer dans plusieurs champs access pour effectuer des calculs.

    exemple:

    Champ1 =

    pommes 80783 10 3

    bananes 80788 100 75

    oranges sanguines 80797 100 3

    fruits confits 80786 97 45

    et au final je voudrais obtenir ceci:

    Champ 1 =

    pommes

    bananes

    oranges sanguines

    fruits confits

    Champ 2 =

    80783

    80788

    80797

    80786

    Champ 3 =

    10

    100

    100

    97

    Champ 4 =

    3

    75

    3

    45

    Je pensais m'en sortir tout simplement en important un fichier texte et en séparant automatiquement les champs grâce à la fonction séparation / espace mais le problème c'est qu'il y a des données en lettres séparées par un espace justement (oranges sanguines et fruits confits dans mon exemple)

    En partant de la fonction droite ça ne marche pas non plus car il peut y avoir des suites de 1, 2 ou 3 chiffres.

    Il faudrait donc une formule pour récupérer les 3 séries de chiffres placés à droite des chaînes de caractères mais de manière aléatoire pour les séparer dans 3 champs différents.

    Un grand merci d'avance pour votre aide !

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 260
    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 260
    Points : 19 423
    Points
    19 423
    Billets dans le blog
    63
    Par défaut
    Bonjour,

    Peut-être regarder du côté de la fonction Split() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim a as string, t as variant
     
    t = Split([Champ]," ")
     
    a = t(1)
    Cdlt,
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    fonction vba qui sépare les éléments (à mettre dans un module VBA standard )
    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
     
    Public Function ChampAlea(ByVal txt As Variant, ByVal choix As Long) As Variant
    Const cEspace As String = " "
    Dim a As Variant, v As Variant, s As String, i As Long, b As Boolean
    If Not IsNull(txt) Then
        a = Split(txt, cEspace, , vbBinaryCompare)
        For Each v In a
            b = IsNumeric(v)
            If choix > 0 And b Then
                i = i + 1
                If i = lType Then
                    ChampAlea = v
                    Exit For
                End If
            ElseIf choix = 0 Then
                If b Then
                    ChampAlea = s
                    Exit For
                Else
                    s = Trim$(s & cEspace & v)
                End If
            End If
        Next v
    End If
    End Function
    dans la requête, utiliser ainsi la fonction pour obtenir chaque colonne, avec [Champ] le nom de votre colonne initiale à splitter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ChampAlea([champ],0) as ChampTexte,
    ChampAlea([champ],1) as ChampNum1,
    ChampAlea([champ],2) as ChampNum2,
    ChampAlea([champ],3) as ChampNum3

  4. #4
    Invité
    Invité(e)
    Par défaut
    Désolé, une petite erreur dans la fonction précédente.

    Voici la bonne version :
    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
     
    Public Function ChampAlea(ByVal txt As Variant, ByVal choix As Long) As Variant
    Const cEspace As String = " "
    Dim a As Variant, v As Variant, s As String, i As Long, b As Boolean
    If Not IsNull(txt) Then
        a = Split(txt, cEspace, , vbBinaryCompare)
        For Each v In a
            b = IsNumeric(v)
            If choix > 0 And b Then
                i = i + 1
                If i = choix Then
                    ChampAlea = v
                    Exit For
                End If
            ElseIf choix = 0 Then
                If b Then
                    ChampAlea = s
                    Exit For
                Else
                    s = Trim$(s & cEspace & v)
                End If
            End If
        Next v
    End If
    End Function

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    magasinier
    Inscrit en
    Mai 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : magasinier
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Un grand merci pour votre aide mais je m'en suis sorti avec 5 requêtes toutes simples.

    J'effectue une copie d'écran dans un traitement de texte et je récupère ces données dans access dans une nouvelle table (liste complète) en demandant à l'assistant de séparer les données dans plusieurs champs via le caractère espace.

    Ce qui me donne une suite de 8 champs: dans le champ 1 uniquement des noms de fournisseurs (ceux qui ne contiennent pas d'espaces), dans les 5 champs suivants (Champ2 à Champ6) on retrouve des données de textes ou des chiffres et que des chiffres dans les champs 7 et 8.

    Dans l'exemple que j'ai donné les suites de 5 chiffres sont les références de mes commandes, pour les commandes dont le nom des fournisseurs ont été séparés dans 5 champs différents je commence donc par isoler les enregistrements dont les références de commande sont dans le champ 6 en me servant de la fonction comme "#####" , je me sers de la formule [liste complète]!Champ1 & " " & [liste complète]!Champ2 & " " & [liste complète]!Champ3 & " " & [liste complète]!Champ4 & " " & [liste complète]!Champ5 pour récupérer le nom complet de chaque fournisseur et j'ajoute le nom complet des fournisseurs + le champ 6 (référence des commandes) + les chiffres qui sont dans les champs 7 et 8 dans une nouvelle table nommée retard des commandes avec des champs nommés fournisseurs / commandes / total quantités / quantités déjà déballées

    Puis je renouvelle l'opération dans 4 nouvelles requêtes en me décalant d'un champ vers la gauche à chaque fois pour les commandes dont le nom des fournisseurs ont été séparés dans 4 / 3 / 2 / 1 champs différents.

    J'ai conçu une macro pour ouvrir les 5 requêtes l'une après l'autre et un état qui contient la liste des fournisseurs avec leur référence de commandes et un nouveau champ nommé "reste à déballer" qui contient la soustraction quantités déjà déballées - total quantités et enfin dans le pied d'état je demande la somme de "reste à déballer" plus le compte des commandes restantes.

    Bon c'est un peu long comme procédure mais ça fonctionne, désolé pour les 2 personnes qui ont répondu à ma demande mais j'ai galéré pas mal de temps avant de trouver cette solution, mais qui sait votre code pourra peut-être servir à d'autre personnes ?

Discussions similaires

  1. Réponses: 21
    Dernier message: 28/01/2008, 20h56
  2. [Tableaux] Extraire les chiffres dans une chaîne
    Par Digiduck dans le forum Langage
    Réponses: 8
    Dernier message: 16/08/2006, 14h33
  3. extraire des entiers d'une chaine de caractère
    Par 18Marie dans le forum Langage
    Réponses: 9
    Dernier message: 10/08/2006, 11h17
  4. [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
  5. Réponses: 9
    Dernier message: 17/01/2003, 11h45

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