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 :

Extraction d'une chaine de caracteres sans tronquer les mots


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 45
    Par défaut Extraction d'une chaine de caracteres sans tronquer les mots
    Bonjour,

    Nous sommes entrain de changer de logiciel de gestion, et je me trouve confronté à un soucis pour la récupération des désignation articles.

    Voila mon soucis :

    Notre nouveau logiciel (PMISOFT) a 2 champs libellés principaux acceptant maximum 30 caractères. Notre ancien logiciel (APIBAT), a des champs acceptant jusqu'à 90 caractères.

    J'ai récupéré les tables oracles d'APIBAT dans access afin de passer tout ça à la "moulinette".

    JE souhaiterais donc extraire les 30 premiers caractères de mes désignations mais sans couper les mots. Car j'ai déjà récupéré ces 30 premiers caractères mais ça tronque les derniers mots et ce n'est pas très propre.

    Donc je souhaiterais par une fonction identifier les caractères 30 et 31 de chaque chaine et si l'un de ces 2 caractères est un espace alors je peux extraire les 30 premiers caractères de cette chaine.

    En revanche, si ces 2 caractères ne sont pas un espace, je voudrais extraire une chaines allant jusqu'au dernier espace compris dans les 30 premiers caractères.

    Je ne sais pas si c'est très clair.

    J'espère que vous pourrez me répondre

    Merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    les fonctions de manipulations de chaines d caractères à voir ici soçnt :
    -Instr()
    -Mid()
    -Left()
    -Right()

    une fonction que j'utilise, à adapter évidemment
    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
     
    Sub Piou()
    MsgBox RecupererTexteEntreBornes("Ceci est ma phrase test","Ceci","test")
    End Sub
     
    Function RecupererTexteEntreBornes(texte As String, textedebut As String, textefin As String) As String
    Dim result As String
    Dim debut As Integer
    Dim fin As Integer
        debut = InStr(1, texte, textedebut)
        fin = InStr(debut + Len(textedebut), texte, textefin)
        result = ""
        If debut > 0 Then
            If fin > debut + Len(textedebut) Then
                result = Mid(texte, debut + Len(textedebut), fin - debut - Len(textedebut))
            Else
                result = Right(texte, Len(texte) - debut - Len(textedebut) + 1)
            End If
        End If
        RecupererTexteEntreBornes = result
    End Function
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 45
    Par défaut
    merci de ta réponse si rapide

    J'ai reussi à identifier mais dernier espace dans chaque chaine de caractere par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      Function LastOccurence(strString As String, strCharacter As String) As Integer
        Dim intPosition As Integer
     
         intPosition = 1
     
         While intPosition <= Len(strString) And strCharacter <> "" And InStr(intPosition, strString, strCharacter) <> 0
         intPosition = InStr(intPosition, strString, strCharacter)
         LastOccurence = intPosition
         intPosition = intPosition + 1
         Wend
         End Function
    Mais bon ce n'était qu'un petit premier pas, alors je vais essayer ta fonction

    Merci encore de ton aide

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 45
    Par défaut
    Me revoila,

    Voila ce que je viens de faire, ce n'est certainement pas très cartesien mais bon je fais avec mes petites connaissances et votre aide. ça marche pas trop mal en tous les cas
    Mais je suis preneur de toutes amélioration.

    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
     Function Libelle1(strString As String) As String
        Dim lib As String
        Dim charact1 As String
        Dim charact2 As String
        Dim strString2 As String
        Dim intpositioncharact3 As Integer
     
     
        charact1 = Mid(strString, 30, 1)
        charact2 = Mid(strString, 31, 1)
        strString2 = Mid(strString, 1, 30)
        intpositioncharact3 = LastOccurence(strString2, " ")
     
     
        If charact1 = " " Then
        lib = Mid(strString, 1, 30)
        End If
        If charact2 = " " Then
        lib = Mid(strString, 1, 30)
        End If
        If charact1 <> " " Then
        lib = Mid(strString, 1, intpositioncharact3)
        End If
       Libelle1 = lib
     
        End Function
    Voila je suis resté sur la base de départ car j'aime aller jusqu'au bout de mon raisonnement même si je me plante au moins je comprends pourquoi.

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonsoir,

    Fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Function tronquons(quoi As String, limite As Integer) As String
      Dim titi As String
      titi = Left(quoi, limite)
      If Not Mid(quoi, limite + 1, 1) = " " Then
        While Mid(titi, Len(titi), 1) <> " "
          titi = Left(titi, Len(titi) - 1)
        Wend
      End If
      tronquons = Trim(titi)
    End Function
    Appelable ainsi (exemple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim toto As String
      toto = "abracadabra voilà le grand zèbre qui joue beaucoup à saute-mouton dans le pré du voisin."
      MsgBox tronquons(toto, 50)
    devrait suffire...

  6. #6
    Membre Expert
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Par défaut
    sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Function tronquons(quoi As String, limite As Integer) As String
      tronquons = Left$(quoi,instrrev(quoi," ",limite))
    End Function

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

Discussions similaires

  1. [XL-2010] Extraction d'une chaine de caractere
    Par EricBOG dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/07/2013, 16h19
  2. séparation d'une chaine de caractere apres le 1er mot
    Par karaudrey88 dans le forum Langage
    Réponses: 2
    Dernier message: 14/08/2012, 17h19
  3. Extraction des mots d'une chaine de caractere
    Par ahd261 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 09/04/2009, 19h16
  4. [SQL Server 2000] Extraction dans une chaine de caracteres
    Par KOFJCH dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/10/2006, 09h28
  5. extraction d'une chaine de caractere ...
    Par nicolasghaz dans le forum VBScript
    Réponses: 7
    Dernier message: 31/10/2005, 18h53

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