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électionner une partie de lettre d'une chaine de caractere


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Sélectionner une partie de lettre d'une chaine de caractere
    Bonjour à tous,

    je suis nouveau sur le forum en tant que demandeur mais je le consulte depuis longtemps

    J'ai un petit probleme aujourd'hui.

    Dans ma base de données access, j'ai une liste déroulante contenant tous les produits que nous fabriquons dans mon entreprise.
    Cette reference des produit n'est pas vraiment réguliere ( elle peut osciller entre 10 et 22 caractere) mais elle termine presque toujours par une ou plusieurs lettre.
    Ex :

    RSTL-25-V06AS
    DRFIO-254541-V078976D
    DRFIO-254541-V078976ACP
    RST-v05-45 ==> ici pas de lettre

    j'aurais besoin de récupérer ces 1,2 ou 3 derniers caractere dans un autre champ.
    J'ai vu qu'il y avait des commande en fonction de l'emplacement du caractere dans la chaine mais ici je ne vois pas comment faire.
    Mon critere est juste des selectionner les derniers caracteres non numérique de la chaine de caractere et si il n'y en a pas, de mettre un autre texte dans le champ destiné a la copie.

    auriez vous une idée ?

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    le plus simple est d'écrire une fonction VBA.

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function DerniersCarAlpha(t As Variant) As String
    Dim strResultat As String, i As Integer, lgr As Integer
     
    If IsNull(t) Then Exit Function
    t = CStr(t)
    lgr = Len(t)
    For i = lgr To 1 Step -1
        Select Case Mid(t, i, 1)
            Case "0" To "9"
                 Exit For
        End Select
    Next
    DerniersCarAlpha = Mid(t, i + 1)
    End Function
    A+

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci je vais testé cela.
    Par contre étant débutant je ne suis pas sur de savoir comment appliquer votre fonction:
    je compte la mettre en valeur par defaut de mon champ ou je souhaiterai retrouver ces caracteres.

    Pensez vous que cela est bon ?

    Merci pour votre aide!

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    Non je ne crois pas que ça fonctionne.
    La valeur par défaut ne fonctionne que pour un nouvel enregistrement.
    Or, a ce moment, le champ référence produit est vide.

    En fait il faudrait le faire par code dans un formulaire, où l'on peut intercepter l'événement "avant MAJ" (modification enregistrement)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim strDerniersCarAlpha As String
     
    strDerniersCarAlpha = DerniersCarAlpha(Me.ControleSource)
    Me.ControleDestination = strDerniersCarAlpha
    End Sub
    Remplacer ControleSource par le nom du contrôle contenant la référence produit.
    Remplacer ControleDestination par le nom du contrôle dans lequel il faut copier les dernier caractères alphanumériques de la référence produit.

    Sinon, la fonction DerniersCarAlpha est utilisable dans les requêtes.

    A+

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Vous pourriez recourrir aux expressions régulières pour détecter et extraire les derniers caractères non numériques de la référence que vous sélectionnez.

    Dans l'éditeur VBE, activez la référence à la bibliothèque "Microsoft VBScript Regular Expressions x.y"

    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
     
    Public Function getSuffixe(ByVal strReference As String) As String
        Dim oReg As RegExp
        Dim oMac As MatchCollection
     
        Set oReg = New RegExp
        With oReg
            .Pattern = "[a-zA-Z]{1,}$"
            If .Test(strReference) Then
                Set oMac = .Execute(strReference)
                getSuffixe = oMac(0)
            Else
                getSuffixe = ""
            End If
        End With
     
        Set oMac = Nothing
        Set oReg = Nothing
    End Function
    Vous pouvez invoquer dans la fenêtre d'exécution de l'éditeur VBE la fonction ci-dessus comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Debug.Print getSuffixe("RSTL-25-V06AS")
    ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Debug.Print getSuffixe("RST-v05-45")
    En espérant avoir répondu à votre problématique.

    Cordialement,
    NetLogan.

Discussions similaires

  1. Réponses: 22
    Dernier message: 11/07/2014, 17h08
  2. [XL-2007] Sélectionner les 3 premières lettre d'une chaine de caractères
    Par souad12 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/11/2012, 10h10
  3. Réponses: 9
    Dernier message: 08/08/2007, 11h35
  4. extraire une partie d'image d'une image source
    Par Zen_Fou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2006, 11h20
  5. [VBA][Excel]Supprimer une partie du texte d'une grosse liste
    Par annedeblois dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/09/2005, 17h15

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