Microsoft 365 VBA - Traitement du texte d'une "zone de texte"

Rookiiz

XLDnaute Nouveau
Bonjour à tous,

Je créer actuellement un formulaire ou dans la première partie, on colle dans une zone de texte le détail d'une demande client.
Sauf que dans cette zone de texte (ou la propriété multi-ligne est activé), j'ai besoin d'identifier des éléments, qui vont alimenté des variables.

Petite photo pour illustrer.
Exemple_TextBox.png


Dans l'exemple, j'ai besoin d'extraire
- "Toto" dans une variable Nom
- "ROMO MARA" dans une variable Prénom
- "monsieurtoto.romo.mara@toto.com" dans une variable Email

Autre petite difficulté lors de la copie. Entre Nom et ROMO il y a une tabulation, et pas plusieurs espace.

Mon problème, c'est que traiter du texte dans des cellules je sais faire, mais dans une zone de texte, je suis un peu perdu.
Est-ce que c'est possible déjà ?

Merci d'avance a ceux qui prendrons le temps de me répondre.
Cordialement,
Rookiz
 
Solution
C
Bonjour le fil,

Pourquoi ne pas simplement traiter tous les aspects du textes 🤔
VB:
Private Sub Analyser_Click()
  Dim Ind As Integer, sTmp As String, Tab1() As String, Tab2()
  Dim sPrénom As String, sNom As String, eMail As String
  sTmp = Me.TB_Autotask.Value
  Tab1 = Split(sTmp, vbCr)
  For Ind = 0 To UBound(Tab1)
    If InStr(1, Tab1(Ind), "Prénom", vbTextCompare) > 0 Then
      sPrénom = Replace(Tab1(Ind), "Prénom ", "")
      sPrénom = Replace(sPrénom, vbCr, "")
    ElseIf InStr(1, Tab1(Ind), "Nom", vbTextCompare) > 0 Then
      sNom = Replace(Tab1(Ind), "Nom", "")
      ' Rétirer le caractère de tabulation
      sNom = Replace(sNom, vbTab, "")
      ' Retirer le caractère avant le nom
      sNom = Mid(sNom, 2, Len(sNom) - 1)...

Rookiiz

XLDnaute Nouveau
Bonjour job75,
Sur l'exemple, je n'ai mis qu'une partie des informations car le reste est confidentiel.

Le but de l'identification des données que je souhaite réaliser et principalement pour éviter de faire de multiple copier/coller dans les 10 textbox du résultat final. Je récupère le text bruit sur un outils de ticketing.

J'ai quelques mots clés pour me situer dans le texte. J'vais donc essayer de jouer avec ca pour retrouver mes infos.

Est-ce qu'un retour chariot est identifiable dans une recherche ?

Y a t-il une notion de ligne dans une textbox multiline ? (un peu comme dans un tableau )
 
Dernière édition:

Rookiiz

XLDnaute Nouveau
Bon, j'arrive a un résultat encouragent avec ce code.

VB:
Private Sub Analyser_Click()
    texte = TB_Autotask.Value
    tableau = Split(texte, vbCrLf)
    MsgBox tableau(0)
    MsgBox tableau(1)

    tableau2 = Split(tableau(0), " ", 2)
    ResultatPrenom = tableau2(1)
End Sub

Le problème c'est que pour avancer, j'ai du faire des modifs dans mon texte source, hors je ne veux absolument pas le faire. J'ai du remplacer les tabulations par des espaces.

Donc les sauts de ligne, ça va j'arrive à les identifier, mais pas les tabulations.
Vous avez une idée ?
 

Rookiiz

XLDnaute Nouveau
Merci job75.

J'arrive a bien scinder les éléments de la textbox maintenant ,mais j'ai de nouvelle interrogation.

Les éléments que je recherche (nom, prénom, email, ...) ne sont pas toujours au même endroit. Je ne peux donc pas cibler une ligne en particulier pour les retrouver.
Je peux vérifier le contenu de cette manière :
VB:
tableau2 = Split(tableau(0), " ", 2)
if tableau2(0) = "Prénom" then ResultatPrenom = tableau2(1)
Mais trop long, lourd et de plus, je ne sais même pas le nombre de ligne que contient mon premier tableau.

Comment puis spliter la ligne (de mon premier SPLIT) ou j'aurai cherché la valeur "Prénom" ?
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour
je vais me faire l'avocat du diable

Le but de l'identification des données que je souhaite réaliser et principalement pour éviter de faire de multiple copier/coller dans les 10 textbox du résultat final. Je récupère le text bruit sur un outils de ticketing.
perso je rejoins @job75

prendre tout un texte pour le découper avec split dans des variables c'est pas pire que découper un texte pour le mettre dans des textes box (j'irais même jusqu’ à dire de nommer les textbox comme les variables)

pourquoi
et bien par ce qu’après on peu plus facilement exploiter les données dans excel/VBA /PW

pour les tabulation faire un simple replace (texte,vbTab," ")
et quelque chose me dis que si tu a des tabulation cet extraction(vers le textbox) vient d'une feuille (je peux me tromper)
en gros ton extraction passe par une feuille intermediaire
outils tiketing--->feuille--->textbox dans formulaire
suis je dans le vrai??
 

Rookiiz

XLDnaute Nouveau
Bonjour patricktoulon,

C'est presque ça.
C'est une réponse de formulaire (tableau), envoyé sur notre outil par mail, qui le traduit en texte brut lors de la création automatique du ticket. Process sur lequel je n'ai pas la main ... malheureusement.

Je suis d'accord, compléter des textbox indépendantes et nommé serait beaucoup plus simple, mais plus long.

Si je n'arrive pas a réaliser ce traitement, je passerai bien évidemment par la méthode copier/coller.
 

patricktoulon

XLDnaute Barbatruc
re
on
Bonjour patricktoulon,

C'est presque ça.
C'est une réponse de formulaire (tableau), envoyé sur notre outil par mail, qui le traduit en texte brut lors de la création automatique du ticket. Process sur lequel je n'ai pas la main ... malheureusement.

Je suis d'accord, compléter des textbox indépendantes et nommé serait beaucoup plus simple, mais plus long.

Si je n'arrive pas a réaliser ce traitement, je passerai bien évidemment par la méthode copier/coller.
heu .... le texte n'arrive pas dans ton textbox de formulaire par mail que je sache
parce que si c'est le cas j'aimerais bien savoir comment une app externe peut atteindre un Msforms.textbox dans un formulaire excel

à mon avis il y a des choses que tu n'a pas comprises

d'autant plus que tu parle de copier coller
là j'ai mon œil droite qui dit coucou !!! a mon œil gauche 🤣
 

Rookiiz

XLDnaute Nouveau
La complétude de mon unique Textbox se fait effectivement avec un copier/coller, mais entre le faire une fois et le faire 10 fois en sélectionnant chaque mot dans un texte, ça prend pas le même temps.

C'est juste un besoin de gain de temps, car on a plus de 50 tickets par jour.
 
C

Compte Supprimé 979

Guest
Bonjour le fil,

Pourquoi ne pas simplement traiter tous les aspects du textes 🤔
VB:
Private Sub Analyser_Click()
  Dim Ind As Integer, sTmp As String, Tab1() As String, Tab2()
  Dim sPrénom As String, sNom As String, eMail As String
  sTmp = Me.TB_Autotask.Value
  Tab1 = Split(sTmp, vbCr)
  For Ind = 0 To UBound(Tab1)
    If InStr(1, Tab1(Ind), "Prénom", vbTextCompare) > 0 Then
      sPrénom = Replace(Tab1(Ind), "Prénom ", "")
      sPrénom = Replace(sPrénom, vbCr, "")
    ElseIf InStr(1, Tab1(Ind), "Nom", vbTextCompare) > 0 Then
      sNom = Replace(Tab1(Ind), "Nom", "")
      ' Rétirer le caractère de tabulation
      sNom = Replace(sNom, vbTab, "")
      ' Retirer le caractère avant le nom
      sNom = Mid(sNom, 2, Len(sNom) - 1)
    ElseIf InStr(1, Tab1(Ind), "@", vbTextCompare) > 0 Then
      eMail = Replace(Tab1(Ind), vbCr, "")
      ' Rétirer le caractère de tabulation
      eMail = Replace(eMail, vbTab, "")
      ' Retirer le caractère avant l'email
      eMail = Mid(eMail, 2, Len(eMail) - 1)
    End If
  Next Ind
    Debug.Print sPrénom & "/" & sNom & "/" & eMail
End Sub

@+
 

Discussions similaires