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 :

Problème formule lien hypertexte mail contenu cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut Problème formule lien hypertexte mail contenu cellule
    Bonjour,
    Je cherche à envoyer des mails en me servant de la formule lien hypertexte mailto mais le texte réel, adresse, objet, corps dépasse les limites des cellules excel, je cherche à contourner ce problème.

    Il faut que j'envoie un mail à la fois vers un seul destinataire et j'imaginais combiner formule lien hypertexte mailto et macro:

    - un cilc sur la cellule lien hypertexte mailto.... ouvre ma messagerie (thunderbird) et remplit adresse et objet;

    - une macro pourrait copier coller de excel vers thunderbird le contenu d'une cellule vers le corps du mail??????

    Est-ce seulement possible????


    Autre question mais la je ne me fais pas trop d'espoire, j'ai 2 comptes sur thunderbird et les mails peuvent partir de l'un ou de l'autre selon les cas.....serait-il envisageable de selectionner le bon compte depuis excel?????


    MERCI

  2. #2
    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
    Points : 5 901
    Points
    5 901
    Par défaut
    Salut,

    Tu peux regarder la discussion ici

    Je n'utilise pas ThunderBird, donc assez difficile de répondre...

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Oui, ca a l'air pas mal mais serait il possible que la macro detecte un clic dans une cellule qui contient 1 adresse mail et l'integre pour qu'elle soit le destinataire????

    Je souhaite donc envoyer le mail a 1 dedtinataire a la fois dont l'adresse est dans une cellule et je ne crois pas en une multiplication des macro avec chaque adresse alors qu'en plus les adressesne sont pas fixe, a chaqure nouvelle ligne un nouveau destinataire est a ajouter

    Je ne sais meme pas si ca peut etre la bonne voie de reflexion.

    Je recois des dossiers papiets et a chaque fois je remplis la ligne supplementaire avec les donnees du nouveau dossier papier, en fin de ligne, je clique sur la cellule qui contient l'adresse mail obtenue par la formule lien hypertexte mailto pour envoyer le mail

  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
    Points : 5 901
    Points
    5 901
    Par défaut
    Ici, avec Outlook, dès que je click sur une cellule avec adresse courriel, un message est créé par Outlook avec l'adresse comme destinataire, même en tentant de l'intercepter dans la procédure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
    Tu pourrais passer par un double-click sur une autre cellule de la même ligne ou en créant un menu contextuel (click droit) sur une cellule...

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    J'ai besoin d'un peu plus d'explucation j'avoue

  6. #6
    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
    Points : 5 901
    Points
    5 901
    Par défaut
    Pour faire plus simple, passons par double-click

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        'En supposant que les adresses courriels sont en colonne J
        If InStr(1, Cells(Target.Row, 10), "@") > 0 Then
            MsgBox "Il y a une adresse courriel sur la ligne " & Target.Row
        Else
            MsgBox "Il n'y a pas d'adresse courriel sur la ligne " & Target.Row
        End If
    End Sub

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    OK, je me penche dessus.

    Pour bien faire, il faudrait que le cilc sur le lien de la cellule (admettons BN2) contenant ma formule: lien hypertext mailto.... ouvre thunderbird, comme d'habitude et qu'en plus il déclenche une macro qui copierait du texte contenu dans une cellule (A2&" "&B2, par exemple) pour le coller dans la fenêtre thunderbird ouverte dans le corps du texte????

    Comme ça, ma cellule "lien hypertext mailto..." reste dans la limite du nombre de caractères et le texte supplémentaire reste dans les cellule A2 et B2?????


    C'est à cela que je pensais mais suis ouvert à toute autre solution arrivant au même résultat

    Il faudrait qu'a chaque fois, le clic en BN2 copie/colle A2 & B2; en BN3: A3 & B3......

    J'ai essayé de faire tourner le code, rien ne se passe?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        'En supposant que les adresses courriels sont en colonne J
        If InStr(1, Cells(Target.Row, 10), "@") > 0 Then
            MsgBox "Il y a une adresse courriel sur la ligne " & Target.Row
        Else
            MsgBox "Il n'y a pas d'adresse courriel sur la ligne " & Target.Row
        End If
    End Sub
    Mes adresses étant dans la colonne AD j'ai changé 10 en 29, je ne sais pas où doublecliquer et je ne vois pas comment rapprocher cela du fait d'ouvrir thunderbird d'un côté et de copier/coller le corps de mon mail?

    Peut être en partant sur le If pour dire que s'il y a bien une adresse mail, en plus d'ouvrir thunderbird, excel doit copier/coller A2 et B2 dans le corps du mail????

    Peut être avec un simple clic sur la cellule du lien alors qui l'activerait et qui lancerait ta macro dans laquelle on mettrait l'instruction copier/coller?????

    Ok avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        'En supposant que les adresses courriels sont en colonne J
        If Not Application.Intersect(Target, Range("AR:AR")) Is Nothing Then
            MsgBox "Il y a une adresse courriel sur la ligne " & Target.Row
        Else
            MsgBox "Il n'y a pas d'adresse courriel sur la ligne " & Target.Row
        End If
    End Sub
    Pour l'ouverture de thunderbird et l'affichage de la MsgBox.

    Du coup, la cellule passe en édition et il faut que je ré appui sur "ENTER" à chaque fois.....

    Il faudrait remplacer la MsgBox par un copier/coller de A2 et B2 dans le corps du mail et plus d'un texte après body dans la formule lien hypertexte mailto.... et le tout sera OK

    J'ai trouvé ça sur internet mais j'avoue avoir besoin d'un petit coup de balet pour retomber seulement sur ce que je voudrais faire.....

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    Option Explicit
    ' ------------------------------------------------------------------
    'Déclaration des tableaux qui recevront les touches à utiliser suivant
    ' le logiciel de messagerie par défaut du système.
    ' Déclarés ici, les tableaux ont une portée qui couvre tout le module
    Dim TouchesPJ(5) As String, TouchesEnvoi(5) As String
    ' ------------------------------------------------------------------
    ' Procédure principale qui compose les éléments du message
    ' et effectue la demande d'envoi
    ' c'est cette procédure qui sera appelée par le programme principal (ici Excel)
    '
    Sub EnvoiEmail(Adresse As String, Objet As String, Corps As String, Optional PJ As String, Optional Cc As String, Optional Bcc As String, Optional Collage As Boolean)
    ' Remarques : seuls les arguments : Adresse, Objet et Corps sont obligatoires
    ' l'argument PJ (pièce jointe) est optionnel. S'il est fourni,
    ' c'est le chemin complet du fichier à joindre qui doit être fourni
    ' pour joindre plusieurs pièces,
    ' il faudrait que PJ soit un tableau et qu'il soit traité + bas par une boucle...
    ' les arguements Cc (copie) et Bcc (copie cachée) sont également facultatifs
    ' l'argument Collage permet d'indiquer à la procédure si elle doit coller
    ' le contenu du presse papier dans le corps du message
    ' Pour Excel, On peut envoyer une plage de cellule au lieu d'une cellule
    ' en utilisant dans le programme appelant les fonctions PH() ou PT() fournies + bas
    '-----------------------------------------------------------------------------
    ' Quelques exemples d'appel de la procédure EnvoiMail depuis un classeur Excel
    '
    ' Envoi simple sans pièce jointe :
    ' EnvoiMail Range("A1"), Range("A2"), Range("A3")
     
    ' Si les cellules sont nommées :
    ' EnvoiMail Range("Adresse"),Range("Sujet"),Range("Corps")
     
    ' Pour envoyer une plage :
    ' EnvoiMail Range("Adressse"),Range("Sujet"),PT(Range("A3:A10"))
     
    ' En utilisant les  arguements nommés (c'est le plus clair):
    ' EnvoiMail Adresse:= Range("A1"), _
    '           Objet:= Range("A2"), _
    '           Corps:= PH(Range("A3:A10")), _
    '           Collage:= True _
    '           PJ:= Application.Path & "\AJoindre.jpg" _
    '           Bcc:="zorro@fantomas.com"
    '--------------------------------------------------------------------------------
    Dim HyperLien As String ' Reçoit les éléments de l'hyperlien
                            ' composés à partir des arguments fournis à la procédure
    Dim i As Integer        ' un compteur
    Dim Client As Integer
    ' la syntaxe de base du mailto est la suivante :
    ' mailto:dest@domaine.bof?Subject=Le sujet du message _
                             &Body=Le corps du message _
                             &cc=Destinataire copie _
                             &bcc=Destinataire copie cachée
     
    HyperLien = "mailto:" & Adresse & "?"       ' Le ? introduit les arguments
    HyperLien = HyperLien & "Subject=" & Objet & " (à " & Time() & ")"
    If Not Collage Then ' (en cas de collage, le corps est ajouté juste avant le collage)
        HyperLien = HyperLien & "&Body=" & Corps    ' le & sépare les arguments
    End If
    If Cc <> "" Then HyperLien = HyperLien & "&cc=" & Cc
    If Bcc <> "" Then HyperLien = HyperLien & "&bcc=" & Bcc
     
    ' Activation du lien
    '
    ActiveWorkbook.FollowHyperlink HyperLien    ' Pour Excel (les autres doivent être en commentaire)
    'ThisDocument.FollowHyperlink HyperLien      ' Pour Word (les autres doivent être en commentaire)
    'Application.FollowHyperlink HyperLien       ' Pour Access (les autres doivent être en commentaire)
     
     
    Attendre 2                                  ' Appel d'une procédure qui temporise
                                                ' c'est à dire que la procédure courante
                                                ' (ici EnvoiMail) est suspendue pendant 5s
                                                ' cela permet d'Attendre que le client
                                                ' de messagerie soit lancé et prêt
                                                ' avant d'envoyer les touches
                                                ' sinon ce serait le programme appelant
                                                ' (ici Excel) qui recevrait les touches
                                                ' A REGLER selon votre config
     
    ' l'argument  de FollowHyperlink se plante au delà de 817 caractères
    ' donc pour les long messages, on peut utiliser le copier/coller
    ' C'est le programme appelant qui effectue le COPIER
    ' (éventuellement même une copie de cellules en tant qu'image : Selection.CopyPicture)
    ' la présente procédure se contente de COLLER le contenu du presse-papier
    ' si l'arguement Collage est à True
    If Collage Then
        ' colle puis insère le texte du message au début du message
        SendKeys "+{INSERT}", True  ' collage
        SendKeys "^{HOME}", True    ' début du message
        SendKeys Corps, True        ' envoi du corps du message
        SendKeys "{Enter}", True    ' ligne suivante
    End If
    Client = 2  ' 1=Outlook Express
                ' 2=Mozilla Thunderbird
                ' 3=Office Outlook
                ' Suivent des configurations pour d'autres clients de messagerie
                ' trouvées sur le forum
                ' 4=Une autre version pour Outlook2003
                ' 5=Incredimail
                ' 6=Office Outlook 2007
                ' 7=...à vous d'ajouter d'autres clients
     
    Select Case Client      ' appel du chargement des tableaux des touches selon le
                            ' client de messagerie indiqué
        Case 1
            OutLookExpress
        Case 2
            MozillaThunderbird
        Case 3
            Office2003OutLook
        Case 4
            Office2003OutLookV2
        Case 5
            Incredimail
        Case 6
            Office2007OutLook
        Case 7
            Office2000OutLook
        Case Else
            MsgBox "Aucun client de messagerie connu n'est indiqué"
            Exit Sub
    End Select
     
    ' Le traitement de la pièce jointe ne s'exécute que si la procédure à reçu qqchose
    ' dans l'argument PJ (Optional<=>Facultatif)
     
    If PJ <> "" Then
        For i = 1 To TouchesPJ(0)   ' dans TouchesPJ(0) on a stocké le nombre de touches
                                    ' à envoyer au programme pour joindre une pièce
            SendKeys TouchesPJ(i), True     ' Envoie les touches d'ajout d'1 pièce jointe
            Attendre 1                        ' temporise (à règler éventuellement)
        Next i
        SendKeys PJ, True       ' A ce stade le programme Attend un nom de fichier
                                ' on lui envoie
        Attendre 1                ' on temporise
        SendKeys "{ENTER}", True    ' et on valide ce nom de fichier
        Attendre 1
    End If
    For i = 1 To TouchesEnvoi(0)
        SendKeys TouchesEnvoi(i), True  ' on envoie le message
    Next i
    End Sub
     
    Sub Attendre(Secondes As Integer)
    ' Cette procédure temporise pendant le nombre de secondes qu'on lui transmet en argument
    Dim Début As Long, Fin As Long, Chrono As Long
    Début = Timer
    Fin = Début + Secondes
    Do Until Timer >= Fin
        DoEvents
    Loop
    End Sub
     
    Sub OutLookExpress()
    'Initialisation des tableaux de touches pour Outlook Express
        ' Pour une pièce jointe
        TouchesPJ(0) = 2        ' Nombre de touches nécessaires
        TouchesPJ(1) = "%i"     ' Appel du menu Insertion par la touche Alt-i
        TouchesPJ(2) = "p"      ' appel du sous-menu pièce par la touche p
        ' Pour l'envoi du mail
        TouchesEnvoi(0) = 1     ' Nombre de touches nécessaires
        TouchesEnvoi(1) = "%s"  ' Envoi du message avec Alt-s
    End Sub
     
    Sub MozillaThunderbird()
    'Initialisation des tableaux de touches pour Mozilla Thunderbird
        ' Pour une pièce jointe
        TouchesPJ(0) = 4        ' Nombre de touches nécessaires
        ' il semble que l'appel par Alt-f du menu fichier ne marche pas
        ' à tous les coups donc (merci à FRED65200)
        TouchesPJ(1) = "{F10}"     ' Appel des menus par {F10}
        TouchesPJ(2) = "f"     ' Appel du menu Fichier par la touche f
        TouchesPJ(3) = "j"      ' appel du sous-menu Joindre par la touche j
        TouchesPJ(4) = "f"      ' appel du sous-sous-menu Fichier par la touche f
        ' Pour l'envoi du mail
        TouchesEnvoi(0) = 4             ' Nombre de touches nécessaires
        TouchesEnvoi(1) = "%xf"         ' choisit l'expéditeur qui commence par F
                                        ' à changer bien sur pour votre cas perso
        TouchesEnvoi(2) = "^{ENTER}"    ' Envoi du message avec Ctrl-Entrée
        TouchesEnvoi(3) = "{DOWN}"  ' Flèche bas pour choisir l'option "Envoyer en HTML seul"
                                        ' dans la boite dialogue
        TouchesEnvoi(4) = "{ENTER}"     ' confirmation par Entrée
    End Sub
     
    Sub Office2003OutLook()
    'Initialisation des tableaux de touches pour Office Outlook 2003
        ' Pour une pièce jointe
        TouchesPJ(0) = 2        ' Nombre de touches nécessaires
        TouchesPJ(1) = "%i"     ' Appel du menu Insertion par la touche Alt-i
        TouchesPJ(2) = "f"      ' appel du sous-menu fichier par la touche f
        ' Pour l'envoi du mail
        TouchesEnvoi(0) = 1     ' Nombre de touches nécessaires
        TouchesEnvoi(1) = "%v"  ' Envoi du message avec Alt-v
    End Sub
     
    '--------------------------------------------------------
    ' Voici quelques contributions trouvées sur le forum
    ' pour d'autres logiciels de messagerie
    ' merci à leurs auteurs
    ' par contre, je ne les ai pas vérifiés
    '--------------------------------------------------------
     
    Sub Incredimail()
        ' Contribution de KOLOCO pour Incredimail
        ' Initialisation des tableaux de touches pour Incrédimail
        ' Pour une pièce jointe
        TouchesPJ(0) = 1        ' Nombre de touches nécessaires
        TouchesPJ(1) = "^+a"    'Appel du menu Insertion Fichier par la touche Ctrl+Shift+A
        ' Pour l'envoi du mail
        TouchesEnvoi(0) = 1     ' Nombre de touches nécessaires
        TouchesEnvoi(1) = "%s"  'Envoi du message avecAlt-s
    End Sub
     
    Sub Office2003OutLookV2()
        ' Version corrigée par CLARK1978 à essayer si la version d'origine ne gère pas
        ' la touche Alt-i correctement
        ' Initialisation des tableaux de touches pour Office Outlook 2003
        ' Pour une pièce jointe
        TouchesPJ(0) = 3            ' Nombre de touches nécessaires
        TouchesPJ(1) = "%a"         'Appel du menu Insertion par la touche Alt-a (affichage)
        TouchesPJ(2) = "{RIGHT}"    ' puis flèche à droite
        TouchesPJ(3) = "f"          ' appel du sous-menu fichier par la touche f
        ' Pour l 'envoi du mail
        TouchesEnvoi(0) = 1         ' Nombre de touches nécessaires
        TouchesEnvoi(1) = "%v"      ' Envoi du message avecAlt-v
    End Sub
     
    Sub Office2007OutLook()
        ' Contribution de PC512 pour Office 2007
        ' Initialisation des tableaux de touches pour Office Outlook 2007
        ' Pour une pièce jointe
        TouchesPJ(0) = 2        ' Nombre de touches nécessaires
        TouchesPJ(1) = "%s"     ' Appel du menu Insertion par la touche Alt-i
        TouchesPJ(2) = "jf"     ' appel du sous-menu fichier par la touche f
        ' Pour l'envoi du mail
        TouchesEnvoi(0) = 1     ' Nombre de touches nécessaires
        TouchesEnvoi(1) = "%v"  'Envoi du message avecAlt-v
    End Sub
     
    Sub Office2000OutLook()
        ' Contribution de TANATLOC92 pour Office Outlook 2000
        ' Initialisation des tableaux de touches pour Office Outlook 2000
        ' Pour une pièce jointe
        TouchesPJ(0) = 2 ' Nombre de touches nécessaires
        TouchesPJ(1) = "%i" ' Appel du menu Insertion par la touche Alt-i
        TouchesPJ(2) = "f" ' appel du sous-menu fichier par la touche f
        ' Pour l'envoi du mail
        TouchesEnvoi(0) = 1 ' Nombre de touches nécessaires
        TouchesEnvoi(1) = "^{ENTER}" ' Envoi du message avec Ctrl-Entrée
    End Sub
    '----------------------------------------------------------------------------------
    ' POUR ENVOYER UNE PLAGE DE CELLULES
    '----------------------------------------------------------------------------------
    ' Les fonctions qui suivent sont adaptées à Excel
    ' elles permettent d'envoyer une plage de cellules plutôt qu'une seule cellule
    ' elles sont utilisées par le PROGRAMME APPELANT pour préparer le corps du message
    '                             ------------------
    ' avant de le transmettre à la procédure EnvoiMail
     
    ' Première Version:
    ' Transforme une plage en tableau HTML
    ' (mais votre programme de messagerie risque de vous demander une confirmation
    '  pour un envoi de message en HTML, ce qui rompt l'automatisme)
     
    Function PH(LaPlage As Range) As String
        ' transforme une plage en tableau HTML
        Dim l As Long, c As Long
        PH = "<html><table width='100%'>" 'balises de début du code HTML et de début de  table
        For l = 1 To LaPlage.Rows.Count   ' pour chaque ligne de la plage
            PH = PH & "<tr>"              ' balise de début de ligne
            For c = 1 To LaPlage.Columns.Count  'pour chaque colonne de la ligne
                ' balise début de colonne +  contenu de la cellule + balise fin de colonne
                PH = PH & "<td>" & LaPlage.Cells(l, c) & "</td>"
            Next c
            PH = PH & "</tr>" ' balise fin de ligne
        Next l
        PH = PH & "</table></html>"  ' balises de fin de table et de fin de code HTML
        'MsgBox PH
    End Function
     
    ' Deuxième Version:
    ' Transforme une plage en texte délimité avec Tabulations
    Function PT(LaPlage As Range) As String
        ' transforme une plage en texte avec tabulations et retours ligne
        Dim l As Long, c As Long
        PT = ""
        For l = 1 To LaPlage.Rows.Count
            For c = 1 To LaPlage.Columns.Count
                PT = PT & LaPlage.Cells(l, c)
                If c < LaPlage.Columns.Count Then
                    ' on ajoute une tabulation que si on n'est pas sur la dernière colonne
                    PT = PT & "%09"  ' %09 est le code pour la tabulation (vbTab ne fonctionne pas ici)
                End If
            Next c
            PT = PT & "%0A"  ' %0A est le code pour le retour ligne (vbCrLf ne fonctionne pas ici)
        Next l
        'MsgBox PT
    End Function
     
    '---------------------------------------------------------------------------
    'Autre méthode totalement différente et indépendante mais qui ne fonctionne
    ' QU'AVEC OUTLOOK. Elle fait appel à la technologie Automation (OLE)
    ' il faut ajouter la bibliothèque "Microsoft Outlook 11.0 Object Library"
    ' à votre projet
    ' son avantage principal : la fenêtre Outlook ne s'ouvre pas !!!
    ' autre avantage : c'est un peu plus élégant
    ' (merci à JeanMimi75)
    ' Pour le programme appelant l'utilisation est identique, il suffit de changer
    ' le nom de la procédure appelée (EnvoiMailMéthodeOLE au lieu de EnvoiEmail)
    ' par exemple :
    ' En utilisant les  arguements nommés (c'est le plus clair):
    ' EnvoiMailMéthodeOLE Adresse:= Range("A1"), _
    '           Objet:= Range("A2"), _
    '           Corps:= PH(Range("A3:A10")), _
    '           PJ:= Application.Path & "\AJoindre.jpg" _
    '           Bcc:="zorro@fantomas.com"
    ' Attention avec cette technique, le collage du contenu du presse-papier n'est pas géré
    '----------------------------------------------------------------------------
    Sub EnvoiMailMéthodeOLE(Adresse As String, Objet As String, Corps As String, Optional Pièce As String, Optional Cc As String, Optional Bcc As String)
        Dim MonAppliOutlook As New Outlook.Application
        Dim MonMail As Outlook.MailItem
        Dim MaPièce As Outlook.Attachments
        Set MonMail = MonAppliOutlook.CreateItem(olMailItem)
        With MonMail
            '.Display ' retirer le commentaire si vous voulez que le fenêtre Outlook s'affiche
            .To = Adresse
            If Not IsNull(Cc) Then .Cc = Cc
            If Not IsNull(Bcc) Then .Bcc = Bcc
            .Subject = Objet
            .Body = Corps
            If Not IsNull(Pièce) Then
                Set MaPièce = .Attachments
                MaPièce.Add Pièce, olByValue
            End If
            .Send
        End With
    End Sub

  8. #8
    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
    Points : 5 901
    Points
    5 901
    Par défaut
    Le code pour utiliser ThunderBird, tu l'as déjà dans le message #2
    Le double-click vérifie qu'il y a un arobase dans une cellule.
    Si oui, tu démarres ta procédure d'envoi plutôt qu'un MsgBox, c'est tout.

    Il s'agit pour toi de mettre les bonnes valeurs aux bons endroits (destinataire, sujet, texte, ...)

    Une fois fait, tu changes de cellule pour sortir du mode Édition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Target.Offset(1,0).select

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        'En supposant que les adresses courriels sont en colonne J
        If Application.Intersect(Target, Range("AR:AR")) Is Nothing Then
            Envoimail
        Else
            MsgBox "Il n'y a pas d'adresse courriel sur la ligne " & Target.Row
        End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Envoimail()
    Envoimail Adresse:=Range("BN2"), _
              Objet:="NOTIFICATION(S), "
              Corps:="Madame, Monsieur, Veuillez trouver, ci-jointe(s), la ou les notification(s)de: "&" "&A2&" "&B2
    '           Collage:= True _
    End Sub
    Ou en utilisant le collage.


    Pour l'instant j'obtiens une erreur:
    Erreur de compilation:

    Nombre d'arguments incorrect ou affectation de propriété incorrecte


    sur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Corps:="Madame, Monsieur, Veuillez trouver, ci-jointe(s), la ou les notification(s) d'affectation de: "&" "&A2&" "&B2

    Avec: :=" surligné

    Merci pour target offset, impec.


    Dans ma cellule, j'ai une formule lienhypertexte mailto et le code ne voit du coup jamais de "@", ce qui ne me gêne pas trop puisque ça déclenche de toute façon ta MsgBox (pour l'instant) à tous les coups.

    Je n'arrive vraiment pas à rédiger une procédure Envoimail correct, ce qui me semble être la clef définitive de mon problème....

    J'ai lu qu'il y avait aussi une limite de nombre de caractères dans cette procédure, il me faudrait donc utiliser "Collage" mais la aussi, au niveau syntaxe, je doute, je pense mettre un copy de la cellule dans laquelle j'aurai mis mon blabla avant????

    Dans BN2 BN3....j'aurai toujours une formule, ce qui peut être aussi gênant pour:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Envoimail Adresse:=Range("BN2")
    Non?

  10. #10
    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
    Points : 5 901
    Points
    5 901
    Par défaut
    Tu utilises EnvoiMail avec des arguments à l'intérieur de la procédure EnvoiMail qui n'en a pas...

    Déclare-toi des variables pour le destinataire, le sujet, le corps,...
    Ensuite utilise la méthode dans le lien que j'ai fourni.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim destinataire as string, sujet as string, body as string
    destinataire = Range("BN2")
    sujet= "Titre du sujet"
    body = "Madame, Monsieur, Veuillez trouver, ci-jointe(s), la ou les notification(s) d'affectation de: " & Range("A2") & " " & Range("B2")
     
    strcommand = "C:\Program Files\Mozilla Thunderbird\thunderbird"
    strcommand = strcommand & " -compose " & "to='" & destinataire & "'"
    strcommand = strcommand & "," & "subject=" & sujet & ","
    strcommand = strcommand & "body=" & body
     
    Call Shell(strcommand, vbNormalFocus)
    quelque chose comme ça, j'imagine

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    A ok
    A oui.

    J'ai le texte "body" qui s'inscrit à la place des destinataire.

    Et que penses-tu du copier/coller avec "collage"?

    Et la dernière chose: en fait, l'adresse et le corps ne sont pas toujours contenue sur la ligne 2 mais sur la ligne sur laquelle je clic.

    J'ai mon lien hypertext mailto... en BNx et je souhaiterai utiliser Ax et Bx quand je clic sur mon lien en BNx

    Quelque chose du genre:

    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
    Sub Envoimail()
    Dim destinataire As String, sujet As String, body As String
    destinataire = Range("BN2")
    sujet = "NOTIFICATION(S)"
    body = "Madame, Monsieur, Veuillez trouver, ci-jointe(s), la ou les notification(s)de: " & Range("A2") & " " & Range("B2")
     
    strcommand = "C:\Program Files\Mozilla Thunderbird\thunderbird"
    strcommand = strcommand & " -compose " & "to='" & destinataire & "'"
    strcommand = strcommand & "," & "subject=" & sujet & ","
    strcommand = strcommand & "body=" & body
     
    Call Shell(strcommand, vbNormalFocus)
     
    Sheets("DONNEESADMINAINSCRIRE").Range("A2:B2").Copy
    Collage:= True
     
     
    End Sub
    Mais je pense ne pas être bon sur la déclaration la non plus?

  12. #12
    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
    Points : 5 901
    Points
    5 901
    Par défaut
    Tu n'as qu'à modifier ce que j'ai mis par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Range("A" & Target.Row)
    ou quelque chose comme ça

    Le copier/coller ne devrait pas être utile, selon moi.
    Seulement ce qui est envoyé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call Shell(strcommand, vbNormalFocus)
    devrait suffire

    Il s'agit juste de bien créer la chaîne strcommand
    Comme je n'ai pas ThunderBird, je ne peux pas tester...

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    D'accord, j'eesaie de faire mon maximum de mon côté, j'arrive à:


    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 Envoimail()
    Dim destinataire As String, sujet As String, body As String
    destinataire = Range("A" & Target.Row)
    sujet = "NOTIFICATION(S)"
    body = "Madame, Monsieur, Veuillez trouver, ci-jointe(s), la ou les notification(s)de: " & Range("A" & Target.Row) & " " & Range("A" & Target.Row)
     
    strcommand = "C:\Program Files\Mozilla Thunderbird\thunderbird"
    strcommand = strcommand & " -compose " & "to='" & destinataire & "'"
    strcommand = strcommand & "," & "subject=" & sujet & ","
    strcommand = strcommand & "body=" & body
     
    Call Shell(strcommand, vbNormalFocus)
     
     
    End Sub
    Retour d'excel:

    Erreur d'exécution '424':

    Objet requis

    Pour info, je pense que c'est le resultat de la "strcommand", voici ce que me donne la fenêtre de thunderbierd ouverte après le double clic:


    A2 en premier destinataire

    Madame en corps du mail.

    Objet: OK

    Le code là où ili en est pour rappelle:

    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
    Sub Envoimail()
    Dim destinataire As String, sujet As String, body As String
    destinataire = Range("A2")
    sujet = "NOTIFICATION(S)"
    body = "Madame, Monsieur, Veuillez trouver, ci-jointe(s), la ou les notification(s)de: " & Range("A2") & " " & Range("A2")
     
    strcommand = "C:\Program Files\Mozilla Thunderbird\thunderbird"
    strcommand = strcommand & " -compose " & "to='" & destinataire & "'"
    strcommand = strcommand & "," & "subject=" & sujet & ","
    strcommand = strcommand & "body=" & body
     
    Call Shell(strcommand, vbNormalFocus)
     
     
     
    End Sub
    J'ai remis les "A2" pour débloquer le renvoie d'erreur

  14. #14
    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
    Points : 5 901
    Points
    5 901
    Par défaut
    Effectivement, le Target n'a pas été passé en paramètre...

    Soit tu le passes en paramètre, soit tu utilises Activecell.Row plutôt que Target.Row

    Après avoir composé ton strcommand, mets Debug.Print strcommand et va voir dans la fenêtre Exécution ce que ça donne... Et tu pourrais aussi déclarer strcommand
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim strcommand as String

  15. #15
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Après avoir lu et relu, je vois que le destinataire A2 c'est parfaitement logique, c'est là que je parlais de BNx x étant la ligne de la cellule dans laquelle je clique mais je ne suis pas arrivé à placer le: "= Range("A" & Target.Row)"

    Et pour le body, je comprends moins pourquoi il s'arrête à Madame???? et c'est bien là qu'il me faudrait Ax et Bx....

    Sinon ça m'a bien l'air d'être en bonne voie.

    Autre chose, voici la formule dans BN2 (et plus largement dans toutes les cellules de la colonne BN):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNA(SI(BF2="OUI";LIEN_HYPERTEXTE("mailto:"&RECHERCHE(AS2;DONNEESLISTES!$A$2:$A$239;DONNEESLISTES!$L$2:$L$239)&","&LIEN_HYPERTEXTE(BG2)&","&RECHERCHE(AF2;DONNEESLISTES!$T$2:$T$10;DONNEESLISTES!$AD$2:$AD$10));""));"";SI(BF2="OUI";LIEN_HYPERTEXTE("mailto:"&RECHERCHE(AS2;DONNEESLISTES!$A$2:$A$239;DONNEESLISTES!$L$2:$L$239))&","&LIEN_HYPERTEXTE(BG2)&","&LIEN_HYPERTEXTE(RECHERCHE(AF2;DONNEESLISTES!$T$2:$T$10;DONNEESLISTES!$AD$2:$AD$10));""))
    Avec le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Envoimail()
    Dim destinataire As String, sujet As String, body As String
    destinataire = Range("BN2")
    sujet = "NOTIFICATION(S)"
    body = "Madame, Monsieur, Veuillez trouver, ci-jointe(s), la ou les notification(s)de: " & Range("A2") & " " & Range("A2")
     
    strcommand = "C:\Program Files\Mozilla Thunderbird\thunderbird"
    strcommand = strcommand & " -compose " & "to='" & destinataire & "'"
    strcommand = strcommand & "," & "subject=" & sujet & ","
    strcommand = strcommand & "body=" & body
     
    Call Shell(strcommand, vbNormalFocus)
     
    End Sub
    Je ne parviens pas à me débarasser du "Mailto" dans le premier destinataire dans thunderbird???

    Pour l'instant, 2 fenêtres thunderbird s'ouvrent, une pour le clic sur le lien dans la cellule et une pour le double clic pour la macro.

    Peut-on bloquer la première?

    Activecell.Row

    PARFAIT

    Pour:
    Dim strcommand as String

    Réponse dès que je l'écris:

    Erreur de compilation
    Attendu: variable
    Code utilisée:

    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
    Sub Envoimail()
    Dim strcommand As String, Dim destinataire As String, sujet As String, body As String
    destinataire = Range("BN" & ActiveCell.Row)
    sujet = "NOTIFICATION(S)"
    body = "Madame, Monsieur, Veuillez trouver, ci-jointe(s), la ou les notification(s)de: " & Range("A" & ActiveCell.Row) & " " & Range("B" & ActiveCell.Row)
     
    strcommand = "C:\Program Files\Mozilla Thunderbird\thunderbird"
    strcommand = strcommand & " -compose " & "to='" & destinataire & "'"
    strcommand = strcommand & "," & "subject=" & sujet & ","
    strcommand = strcommand & "body=" & body
    Dim strcommand As String
    Debug.Print strcommand
    Call Shell(strcommand, vbNormalFocus)
     
     
    End Sub
    Je ne vois rien se passer avec:

    Debug.Print strcommand

    C'est dommage, ça bloque pour peu de chose, la logique qui amène le destinataire et l'objet sont OK, c'est le corps qui bloque.

    Et sans le "mailto", c'est réglé

  16. #16
    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
    Points : 5 901
    Points
    5 901
    Par défaut
    À la ligne 2, tu répètes 2 fois Dim... pas bon ça...
    Pour voir le résultat du Debug.Print, ouvre la fenêtre Exécution dans VBA (Ctrl-G)

  17. #17
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Je pense avoir trouvé une solution pour que les deux fenêtres ne s'ouvrent pas, il faudrait que si dans la cellule BNx il y a bien une adresse mail, le double clic sur la cellule BOx déclenche la macro:

    Je tente:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        'En supposant que les adresses courriels sont en colonne J
        If InStr(Target, Range("BN:BN")), "@") And Application.Intersect(1, Cells(Target.Row, 66)) > 0 Then
     
           MsgBox "Il y a une adresse courriel sur la ligne " & Target.Row
        Else
            Envoimail
        End If
        Target.Offset(1, 0).Select
    End Sub
    La ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If InStr(Target, Range("BN:BN")), "@") And Application.Intersect(1, Cells(Target.Row, 66)) > 0 Then
    Reste en rouge

    Erreur de compilation:

    Erreur de syntaxe....

    C'était une erreur de paranthèse mais, corrigée, rien ne se passe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        'En supposant que les adresses courriels sont en colonne J
        If InStr(Target, Range("BN:BN"), "@") > 0 And Application.Intersect(1, Cells(Target.Row, 66)) > 0 Then
     
           MsgBox "Il y a une adresse courriel sur la ligne " & Target.Row
        Else
            Envoimail
        End If
        Target.Offset(1, 0).Select
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Intersect(1, Cells(Target.Row, 66)) > 0 Then
    Le 1 reste en surbrillance et le message est:

    Erreur de compilation:

    Incompatibilité de type

    Avec le Ctrl G:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Program Files\Mozilla Thunderbird\thunderbird -compose to='mailto:xxxx.yyyy@aaaa.fr,ssss.tttt@aaaa.fr',subject=NOTIFICATION(S),body=Madame, Monsieur, Veuillez trouver, ci-jointe(s), la ou les notification(s): NNNN MMMM
    On voit que le retour est presque parfait (seul le mailto empêche l'envoi dans la fenêtre thunderbird, il faut le retirer "à la main").

    Retombons-nous sur une limitation du nombre de caractères????? Qui bloquerait après Madame?????

  18. #18
    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
    Points : 5 901
    Points
    5 901
    Par défaut
    Si je me fie au site de Mozilla ICI
    La syntaxe devrait être comme celle-ci

    Attention aux guillemets et apostrophes
    thunderbird -compose "to='john@example.com,kathy@example.com',cc='britney@example.com',subject='dinner',body='How about dinner tonight?',attachment='C:\temp\info.doc,C:\temp\food.doc'"

    (use attachment="file:///C:/temp/food.doc" for Thunderbird 2.0)
    Je ne sais pas si c'est vraiment nécessaire d'utiliser le chemin C:\Program Files\Mozilla Thunderbird\, par contre.

  19. #19
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Voilà pour régler le problème des deux fenêtres:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        'En supposant que les adresses courriels sont en colonne J
        If Range("BN" & ActiveCell.Row) > "" And InStr(1, Cells(Target.Row, 66), "@") > 0 Then
     
     
            MsgBox "Il y a une adresse courriel sur la ligne " & Target.Row
           Envoimail
        Else
            MsgBox "Il n'y a pas d'adresse courriel sur la ligne " & Target.Row
              End If
     
         Target.Offset(1, 0).Select
     
    End Sub

    Nous restons donc sur 2 problèmes:


    - le mailto
    - le corps du mail

    J'en suis là:


    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
    Sub Envoimail()
    Dim destinataire As String, sujet As String, body As String, strcommand As String
    destinataire = Range("AR" & ActiveCell.Row)
    body = "Madame, Monsieur, à l'étude de son dossier, il nous manque:  " & Range("AO" & ActiveCell.Row) & ", " & Range("AQ" & ActiveCell.Row) & ", " & Range("AP" & ActiveCell.Row) & "de " & Range("A" & ActiveCell.Row) & ", " & Range("B" & ActiveCell.Row)
    sujet = "PIECE(S) MANQUANTE(S)"
    thunderbird -compose "to='destinataire',subject='sujet',body='body'"
     
     
    strcommand = "C:\Program Files\Mozilla Thunderbird\thunderbird"
    strcommand = strcommand & " -compose " & "to='" & destinataire & "'"
    strcommand = strcommand & "," & "subject=" & sujet & ","
    strcommand = strcommand & "body=" & body
     
    Debug.Print strcommand
     
    Call Shell(strcommand, vbNormalFocus)
    Debug.Print strcommand
     
     
     
     
    End Sub
    Excel me demande une fin d'instruction dès que je tape:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    thunderbird -compose "to='destinataire',subject='sujet',body='body'"
    En me surlignant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "to='destinataire',subject='sujet',body='body'"
    Je garde les "strcommand"?

    Je voudrais choisir le compte d'envoi, j'ai donc rajouté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "to='destinataire',subject='sujet',body='body',preselectid='id2'"
    Qu'en dis-tu?

  20. #20
    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
    Points : 5 901
    Points
    5 901
    Par défaut
    Enlève cette ligne-là
    thunderbird -compose "to='destinataire',subject='sujet',body='body'"
    Elle fait déjà partie de strCommand

    Pour ce qui est du compte, je ne sais pas... essaie-le et vois si ça marche...

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/07/2015, 12h02
  2. Réponses: 5
    Dernier message: 06/02/2014, 20h43
  3. Réponses: 0
    Dernier message: 31/01/2014, 13h49
  4. Problème formule lien hypertexte
    Par Kestion100 dans le forum Excel
    Réponses: 1
    Dernier message: 30/01/2014, 15h22
  5. [VBA E] Problème de lien entre textbox et cellule
    Par vanessaferraz dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/06/2006, 08h49

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