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

Requêtes et SQL. Discussion :

Extraire une chaine avant un caractère ou avant une autre Chaine [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2019
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Extraire une chaine avant un caractère ou avant une autre Chaine
    Bonjour
    Après avoir fait le tour du Forum (et d'autres désolé personne n'est parfait ), je n'ai pas trouvé de solution à mon problème.
    Je cherche a extraire X caractères avant une chaîne de caractère commençant par un #
    Concretement je cherche à extraire "2019-12-17 16:56:31" dans la chaine suivante :
    Dupont, Francis: 2019-12-17 16:56:31
    #DIAG.HELPDESK#
    Contact : Mr Bourcier
    Diagnostic : Rouleau d'étiquettes non mis correctement, rectification par le client.

    J'ai essayé de jouer avec Len, Mid, Left & Right mais je n'y arrive pas

    Merci de votre aide

    Sébastien

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 264
    Points : 5 651
    Points
    5 651
    Par défaut
    Bonjour,

    Un 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
    15
    Sub test()
       Dim sTxt As String
       sTxt = "Dupont, Francis: 2019-12-17 16:56:31" & vbCrLf & _
              "#DIAG.HELPDESK#" & vbCrLf & _
              "Contact:  Mr Bourcier" & vbCrLf & _
              "Diagnostic:  Rouleau d 'étiquettes non mis correctement, rectification par le client."
       Debug.Print ">"; sDH(sTxt); "<"
    End Sub
     
    Public Function sDH(s As String) As String
       Dim k1 As Long, k2 As Long
       k1 = InStr(s, ":") + 2
       k2 = InStr(s, "#") - 2
       sDH = Mid(s, k1, k2 - k1)
    End Function
    Le problème est qu'un saut de ligne peut selon l'origine est constitué soit de 1, soit de 2 caractères.

    Bonne continuation.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2019
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Merci Beaucoup pour la réponse rapide.
    J'avais potentiellement pensé à ce genre de Solution mais dans ma chaîne je peux avoir plusieurs fois "#" ou ":". Par Exemle sur le même format de mon exemple je peux avoir dans la même chaine #DEVISEMIS#, #INJOIGNABLE#....
    Donc il faut que je trouve une solution pour extraire l'horodatage devant chaque # spécifique.
    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 264
    Points : 5 651
    Points
    5 651
    Par défaut
    Dans ce qui est proposé, cela extrait ce qui se trouve entre le premier : et le premier #.
    Il faudrait peut-être mettre une feuille Excel, ou txt, avec une petite série d'exemples de textes à travailler.
    Cdt

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2019
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Bonjour
    Bonne et heureuse année EricDgn et à ceux qui liront ce post

    Comme demandé voici une quizaine d'exemple de #
    L'idée est donc d'extraire la partie rouge par exemple sur ces exemples et dans le fichier sachant que je peux avoir différents #, voir plusieurs dans le même champs :
    Bousnan, Soufiyane: 2020-1-3 15:41:36
    #INJOIGNABLE#
    ou
    Thieffry, Ludovic: 2020-1-4 15:38:31
    #DIAG.HELPDESK#
    Contact : Mme Rimbaud
    Diagnostic : Le CB passe à zéro en caisse.

    Classeur3.xlsx

    Voilà à votre bon coeur mesdames messieurs

    merci

  6. #6
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 264
    Points : 5 651
    Points
    5 651
    Par défaut
    Bonjour,

    Une façon de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function sDH(s As String) As Variant
       Dim k1 As Long, k2 As Long
       sDH = ""
       k2 = InStr(s, "#") - 2
       k1 = InStrRev(s, ":", k2 - 6) + 1
       If k1 > 0 Then
          sDH = Mid(s, k1, k2 - k1 + 1)          '--- en texte
          sDH = CDate(Mid(s, k1, k2 - k1 + 1))   '--- en date
       End If
    End Function
    Bonne continuation.
    Fichiers attachés Fichiers attachés

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2019
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Génial
    Merci il ne me reste plus qu'à affiner cela pour le faire une fois sur #INJOIGNABLE#, #DIAG.HELPDESK# car le but est d'horodaté chaque étape.
    Merci beaucoup

  8. #8
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Salut
    Eventuellement une autre solution
    Passez dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function ExtraireTexte(MonChamp As String, LeSymbole As String, LePas As Integer)
    ExtraireTexte = Split(MonChamp, LeSymbole)(LePas - 1)
    End Function
    et dans une req QBE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExtraireTexte(Gauche([nomduchamp];DansChaîne([nomduchamp];"#")-1);" ";3) & " " & ExtraireTexte(Gauche([nomduchamp];DansChaîne([nomduchamp];"#")-1);" ";4)

  9. #9
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 264
    Points : 5 651
    Points
    5 651
    Par défaut
    Bonjour,

    Je n'ai pas saisi ce que vous entendiez par
    il ne me reste plus qu'à affiner cela pour le faire une fois sur #INJOIGNABLE#, #DIAG.HELPDESK# car le but est d'horodaté chaque étape
    mais voici toujours quelque chose pour afficher selon chaque code entre #. Dans l'exemple envoyé, il n'y a que dans la cellule A8 qu'il y plus d'un code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function DHc(sTxt As String, sCode As String) As Variant
       Dim k1 As Long, k2 As Long
       DHc = ""
       k2 = InStr(sTxt, sCode) - 2
       If k2 > 0 Then
          k1 = InStrRev(sTxt, ":", k2 - 6) + 1
          DHc = Mid(sTxt, k1, k2 - k1 + 1)          '--- en texte
          DHc = CDate(Mid(sTxt, k1, k2 - k1 + 1))   '--- en date
       End If
    End Function
    Bonne continuation.
    Fichiers attachés Fichiers attachés

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2019
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Parfait Merci Eric !!! c'était exactement ça, j'avais trouvé une solution mais plus longue.
    Je transfert ça dans ma base et vous confirme
    Merci Beaucoup

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2019
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Eric,
    Cela fonctionne parfaitement. Encore merci
    Par contre y'a t'il une possibilité pour traiter l'erreur que la Fonction peut renvoyer (erreur de conversion lors du CDate) car d'autres élément que la date ont parfois été insérés EX :
    Thieffry, Ludovic: 2019-12-26 16:26:17
    38027232000
    #DIAG.HELPDESK#
    Contact :


    Cela crée donc une Erreur d’exécution de la requete à cause de l’incompatibilité de Type

    merci

  12. #12
    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 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 665
    Points : 34 373
    Points
    34 373
    Par défaut
    Salut,

    dans ce cas, tu peux limiter aux caractères compris entre les ':' et le retour chariot...

  13. #13
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Dans le même veine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExtraireTexte(Gauche([nom1];DansChaîne([nom1];Chr(13)+Chr(10))-1);" ";3) & " " & ExtraireTexte(Gauche([nom1];DansChaîne([nom1];Chr(13)+Chr(10))-1);" ";4)

  14. #14
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 264
    Points : 5 651
    Points
    5 651
    Par défaut
    Bonjour,

    S'il y a trop d'exceptions cela finira par ne plus fonctionner !
    En attendant, ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function DHc(sTxt As String, sCode As String) As Variant
       Dim k1 As Long, k2 As Long
       DHc = ""
       k2 = InStr(sTxt, sCode) - 2
       If k2 > 0 Then
          k1 = InStrRev(sTxt, ": ", k2 - 6) + 1     '--- : + espace
          k2 = InStr(k1 + 2, sTxt, ":") + 5         '--- : entre heures et minutes
          DHc = Mid(sTxt, k1, k2 - k1 + 1)          '--- en texte
          DHc = CDate(Mid(sTxt, k1, k2 - k1 + 1))   '--- en date
       End If
    End Function
    Pour le résultat, à vous de choisir: ou en texte ou en date (supprimer ce qui n'est pas utile). Pour la mise au point, en texte est sans doute ce qui convient le mieux.

    Bonne continuation.

  15. #15
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2019
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2019
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Tout est opérationnel un grand Merci !!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/05/2019, 19h48
  2. Réponses: 30
    Dernier message: 09/08/2011, 16h36
  3. Réponses: 5
    Dernier message: 04/07/2007, 19h31
  4. extraire une chaine de caractères
    Par nopnop dans le forum C
    Réponses: 11
    Dernier message: 10/04/2007, 18h21
  5. Extraire une chaine de caractéres
    Par fatati dans le forum Oracle
    Réponses: 4
    Dernier message: 30/01/2007, 15h39

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