Microsoft 365 Problème d'extraction de données pour envoi par mail

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

lebel

XLDnaute Nouveau
Bonjour, j'ai une routine qui doit me permettre d'envoyer certaines données par mail , une grande partie de mon code s'exécute parfaitement mais malgré une condition : si dans colonne F je rencontre à nouveau une valeur = "x", j'arrête l'extraction des données :

je vous joins le code et une image du mail généré
MERCI de votre AIDE.
 

Pièces jointes

Bonsoir Lebel,
Sans fichier test, c'est un peu au pif.
Après test il s'avère que le IF soit sensible à la casse. "X" est différent de "x".
Essayez pour voir :
VB:
If UCase(Cells(currentRow, "F").Value) = "X" Then
Sinon essayez de fournir un petit fichier test.
Par ex avec un x minuscule en F24 :
Code original :
1736712528863.png

Code modifié :

1736712619455.png
 
Dernière édition:
Bonjour,

Tout comme le camarade sylvanu je ne vois pas comment le "W" peut poser problème vu que le test se fait sur le "X".
Donc je n'ai pas compris si le problème est résolu ou non, et du coup je fais une proposition de modification de la macro postée en fichier TXT.

VB:
Sub CreerEmail()
'
Dim OutlookApp As Object, OutlookMail As Object
Dim ws As Worksheet
Dim cell As Range
Dim emailAddress As String, bodyText As String
Dim currentRow As Long

    ' Définir la feuille
    Set ws = ThisWorkbook.Sheets("Inscript Rando & Scan accueil")

    ' Vérifier si une cellule dans la colonne Y est sélectionnée
    If Not Intersect(Selection, ws.Range("Y4:Y1100")) Is Nothing Then

        Set cell = Selection

        ' Récupérer l'adresse email
        emailAddress = ws.Cells(cell.Row, "U").Value

        ' Commencer à rédiger le corps de l'email
        bodyText = "Veuillez trouver ci-joint la confirmation de votre inscription." & vbCrLf & vbCrLf

        currentRow = cell.Row

        ' Collecter les données jusqu'à ce qu'il trouve "X" dans la colonne F ou jusqu'à la fin de la plage de données
        Do
            bodyText = bodyText & "Nom: " & ws.Cells(currentRow, "G").Value & vbCrLf
            bodyText = bodyText & "Prénom: " & ws.Cells(currentRow, "H").Value & vbCrLf
            bodyText = bodyText & "Code: " & ws.Cells(currentRow, "V").Value & vbCrLf
            bodyText = bodyText & "Choix: " & ws.Cells(currentRow, "F").Value & vbCrLf & vbCrLf
            currentRow = currentRow + 1
        Loop While currentRow <= 1100 And UCase(ws.Cells(currentRow, "F").Value) <> "X"

        ' Créer un email dans Outlook après avoir collecté toutes les données
        Set OutlookApp = CreateObject("Outlook.Application")
        Set OutlookMail = OutlookApp.CreateItem(0)

        With OutlookMail
            .To = emailAddress
            .Subject = "Confirmation d'inscription"
            .Body = bodyText
            .Display ' Afficher l'email (utiliser .Send pour envoyer directement)
        End With

        ' Nettoyer
        Set OutlookMail = Nothing
        Set OutlookApp = Nothing

    Else

        MsgBox "Veuillez sélectionner une cellule dans la colonne Y4:Y1100.", vbExclamation

    End If

End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour