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

Macros et VBA Excel Discussion :

Exécuter un remplacement de retour à la ligne dans une textbox via KeyPress/onkey [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Documentaliste
    Inscrit en
    Mars 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Documentaliste

    Informations forums :
    Inscription : Mars 2017
    Messages : 15
    Par défaut Exécuter un remplacement de retour à la ligne dans une textbox via KeyPress/onkey
    Bonjour à tous !

    Dans le cadre de mon travail, je cherche à remplacer l'appui d'un Shift+Enter ou Shift+Enter (du pavé numérique) dans une textbox par un "<br>", qui exécute un retour à la ligne en HTML.

    Je m'explique :
    J'ai créé récemment une macro me permettant d'extraire les données d'un fichier .txt pour les traiter sous Excel 2010. Le lancement de la partie traitement se fait via une Userform qui me permet également (en sélectionnant un onglet avancé), de définir une adresse mail sur laquelle envoyer le résultat.
    Jusque là, tout fonctionne, après le traitement mon Outlook s'ouvre et auto complète les champs tels que le destinataire, l'objet, etc. Ma signature (qui est une image) est également intégrée à la fin de ce mail.

    Malheureusement, en tant que perfectionniste (et également flemmard ), je souhaiterais également remplir le corps de mon mail directement dans une Textbox sur ma Userform sous Excel et avant le début de mon traitement, ce qui nécessite donc que je transforme automatiquement mes retours à la ligne en <br> pour qu'Outlook les prennes en compte.

    J'ai fais des recherches par rapport aux applications KeyPress ou onKey, mais je n'arrive pas à obtenir quelque chose de concluant lors de l'exécution de ma Userform... (malgré mes lignes de code, rien ne se passe lors d'un appui...).

    Quelqu'un dispose-t-il de la solution, et pourrait-il me fournir un exemple de code afin d'utiliser correctement l'une de ces applications pour mon cas ?

    Il me faudrait :
    ► L'emplacement dans lequel déposer mon code (Dans un module ? Directement dans le code de ma Userform en utilisant un userform_activate() ?)
    ► La manière de paramétrer les applications pour obtenir le "<br>" au bon endroit
    ► Le moyen de désactiver ces applications (pour éviter que les utilisateurs ne fassent n'importe quoi dans les autres champs à remplir)

    Je précise que ça ne fais que 2 mois que je touche au VBA et donc que les explications, si vous en avez, sont les bienvenues.

    Merci d'avance pour vos aides !

    Cordialement,
    Bastien.

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    peux-tu nous montrer la procédure qui crée et rempli le mail ?

    Si c'est une procédure munie de paramètres (par exemple pour passer des arguments "Corps" / "Adresse" / "Object" etc...) il faut également nous montrer la procédure appelante

    il est probablement plus pratique de passer par le HTMLBody et/ou faire le Replace des retours chariots lors du traitement vers Outlook plutôt que sur ton userform ?

  3. #3
    Membre averti
    Homme Profil pro
    Documentaliste
    Inscrit en
    Mars 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Documentaliste

    Informations forums :
    Inscription : Mars 2017
    Messages : 15
    Par défaut
    Bonjour !

    Tout d'abord, merci de t'intéresser à mon problème.
    Ensuite, j'ai trouvé ce code sur d'autres forum et je l'ai mis à ma sauce, le voici :

    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
    27
    28
    29
    30
    Sub Envoi_par_mail()
     
    'range("E7").Replace What:="§", Replacement:="<br>", LookAt:=xlPart
    'ceci est une tentative de remplacer les retours à la ligne juste avant envoi, sous condition que l'utilisateur les remplace par le signe "§" lorsqu'il tape le corps de son texte
     
     Dim OutApp As Object
        Dim OutMail As Object
        Dim strbody As String
     
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
     
        strbody = range("E7") 'la cellule E7 contient le .text de ma textbox, en écriture classique
     
        On Error Resume Next
     
        With OutMail
            .Display
            .Attachments.Add ThisWorkbook.Path & "\" & ThisWorkbook.Name                            'mon tableur
            .To = range("E6")                                                                        'mon destinataire
            .Subject = "Convertisseur downst-TDI (Envoi automatisé)" & " - " & range("E5")        'Sujet + nom du projet à remplir préalablement dans la Userform avant validation
            .HTMLBody = strbody & "<br>" & .HTMLBody
            .Send
        End With
     
        On Error GoTo 0
        Set OutMail = Nothing
        Set OutApp = Nothing
     
    End Sub
    J'espère que cela va t'aider à mieux comprendre mon problème.

    il est probablement plus pratique de passer par le HTMLBody et/ou faire le Replace des retours chariots lors du traitement vers Outlook plutôt que sur ton userform ?
    Oui effectivement, c'est ce que je fais actuellement, mais je n'arrive pas à détecter un "CHR(10)" pour le remplacer par "<br>" dans ma cellule... du coup je dois passer par une syntaxe de substitution (ici "§").
    Ce dont j'ai besoin en fait, c'est d'automatiser la conversion pour que l'utilisateur n'ai pas à insérer des caractères spéciaux afin de scinder les lignes du corps de son message. Cela peut se faire dans la textbox de ma Userform, ou alors dans la cellule E7 qui prend la valeur de la textbox à la fermeture de la Userform et à la fin du traitement des données de ma macro.

    Cordialement.

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Essaie comme ceci.
    Il faudrait être certain du type de saut de ligne
    Dans une cellule, si on tape Alt-Enter, ça donne un vbLf, mais ça pourrait être un vbCrLf aussi selon la manière de procéder dans ton appli, donc à vérifier...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strbody = Replace(Range("E7"), vbLf, "<br>")

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Au pire, une méthode de bourrin comme on en a l'habitude avec le père Joe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strbody = Replace(Replace(Replace(Range("E7"), vbLf, "<br>"), vbCr, "<br>"), vbCrLf, "<br>")
    pas impossible qu'il faille plutôt jouer sur les Chr(X) à la place des constantes Vb

  6. #6
    Membre averti
    Homme Profil pro
    Documentaliste
    Inscrit en
    Mars 2017
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Documentaliste

    Informations forums :
    Inscription : Mars 2017
    Messages : 15
    Par défaut
    Bonjour Parmi !

    Dans une cellule, si on tape Alt-Enter, ça donne un vbLf, mais ça pourrait être un vbCrLf aussi selon la manière de procéder dans ton appli, donc à vérifier...
    Rapide, efficace, rien à redire si ce n'est que ça fonctionne pour shift+enter dans la textbox et alt+enter dans ma cellule, donc c'est encore mieux que ce que j'espérais !
    Du coup, je vais m'intéresser à toutes ces constantes dont je ne connaissais pas l'existence, merci pour les tips !

    Au pire, une méthode de bourrin comme on en a l'habitude avec le père Joe
    Et merci pour le fou-rire
    Même si je pense que la petite ligne de parmi solutionne ma question... on est jamais trop prudent ! (Et si ça c'est être un bourrin, je te rassure joe, vu la tête du reste de mon code, je suis un très gros bourrin, tu n'es pas seul ! ).

    En tous cas, un grand merci à vous deux !
    Passez une agréable fin de journée.

    Sujet résolu !

    Cordialement.

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

Discussions similaires

  1. [CSS] Empecher le retour à la ligne dans une cellule
    Par pekka77 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 26/02/2009, 17h50
  2. Insertion d'un retour à la ligne dans une TextBox
    Par clodius46 dans le forum VBA Word
    Réponses: 2
    Dernier message: 06/09/2007, 00h24
  3. Pb retour de ligne dans une balise DT
    Par lord_paco dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/12/2005, 18h11
  4. [C#] Retour à la ligne dans un textbox
    Par Oberown dans le forum Windows Forms
    Réponses: 8
    Dernier message: 26/07/2005, 10h46
  5. [C#] Retour à la ligne dans un TextBox MultLine
    Par Oberown dans le forum ASP.NET
    Réponses: 3
    Dernier message: 06/07/2005, 12h39

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