Problème avec worksheet change

bonjour

je ne suis pas experte en vba et j'essaie de me débrouiller en consultant les echanges sur ce forum mais la je bloque.

j'ai créé un formulaire qui alimente une feuille colonnes A à H et qui indique au destinataire que sa demande est prise en compte via envoi de mail : jusqu'ici tout va bien (mais c'est ca qui plante le reste je mets le code tout en bas)

sur cette feuille où les données sont intégrées (tableau de suivi), je dois pouvoir modifier le statut de traitement via liste déroulante (ok aussi) en colonne I et je voudrai que cela envoi l'information au demandeur lorsqu'une modification est réalisée : cela fonctionne mais de manière aléatoire

mon plus gros soucis : je peux sur ce tableau de suivi mettre des informations dans les colonnes suivantes : colonnes J K et L et là j'ai un soucis parce qu'il m'indique erreur destinataire mais je ne veux pas que les modifications de ces colonnes génèrent l’exécution de ma macro . je pense qu'il y a donc un soucis sur mon worksheet_change. Pourriez-vous m'aider ? ce serait super cool merci à ceux qui me liront

voici la macro en question

Private Sub Worksheet_selectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("I1:I10000")) Is Nothing Then
With Target
sTo = .Offset(0, -5).Value
sSubject = .Offset(0, -4).Value
 End With
End If
Dim oApp As Outlook.Application
Dim oMsg As Outlook.MailItem
Set oApp = Outlook.Application
Set oMsg = oApp.CreateItem(olMailItem)
With oMsg

    .To = sTo
    .Subject = "Modification statut traitement OA : " & sSubject
    .BodyFormat = olFormatHTML
    .Body = "le statut de votre OA : " & sSubject & " vient d'être modifié :  " & ActiveCell.Value

            '.Attachments.Add ActiveWorkbook.FullName

End With
oMsg.Send
Set oMsg = Nothing
Set oApp = Nothing

le code d'intégration des données du formulaire

Private Sub CommandButton1_Click()
If ComboBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Or TextBox5 = "" Or TextBox6 = "" Then
        MsgBox ("Veuillez renseigner tous les champs")
        Exit Sub
    End If
Dim L As Integer

 If MsgBox("Confirmez-vous l'enregistrement des données ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
     L = Sheets("Tableau Suivi").Range("a65536").End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

     Sheets("Tableau Suivi").Range("C" & L).Value = ComboBox1
     Sheets("Tableau Suivi").Range("D" & L).Value = TextBox8
     Sheets("Tableau Suivi").Range("A" & L).Value = TextBox2
     Sheets("Tableau Suivi").Range("B" & L).Value = TextBox3
     Sheets("Tableau Suivi").Range("E" & L).Value = TextBox4
     Sheets("Tableau Suivi").Range("F" & L).Value = TextBox5
     Sheets("Tableau Suivi").Range("G" & L).Value = TextBox6
    Sheets("Tableau Suivi").Range("H" & L).Value = TextBox7

 End If

Dim oApp As Outlook.Application
Dim oMsg As Outlook.MailItem
Set oApp = Outlook.Application
Set oMsg = oApp.CreateItem(olMailItem)
With oMsg

    .To = TextBox8.Value
          .Subject = "Enregistrement OA par le magasin de Toul"
    .BodyFormat = olFormatHTML
    .Body = "Bonjour, je vous confirme l'enregistrement de l'OA - Description du besoin : " & TextBox4 & " avec une date de besoin au " & TextBox5
    '.Attachments.Add ActiveWorkbook.FullName
End With

oMsg.Send

Set oMsg = Nothing
Set oApp = Nothing

''''''''''''''''''''''''''''''''''''''''''''''''''

'ThisWorkbook.Close SaveChanges:=True
'ThisWorkbook.Close

MsgBox " Enregistrement validé"
 Unload Me
Sheets("Intro").Activate

End Sub

Bonjour,

Merci d'utiliser les balises </> pour rendre votre code lisible...

A première vue, cette instruction est placée beaucoup trop tôt dans le code :

End If

Du coup, tout ce qui suit est exécuté, quelle que soit la plage modifiée sur la feuille.

PS : les déclarations de variable en cours de macro sont à proscrire ! Mieux vaut les grouper en début de macro.

Bonjour

désolée pour les balises j'arrivais pas à m'en servir.

merci beaucoup de m'avoir répondu. j'ai changé le End If de place et déjà cela va mieux je peux modifier mes colonnes suivantes sans quand la macro se ré-exécute.

j'ai encore 2 questions :

- qu'entendez vous par "les déclarations de variable en cours de macro sont à proscrire ! Mieux vaut les grouper en début de macro." ? si j'ai bien compris je dois remplacer les active.cell.value qui se promènent par une déclaration dans mon target au début . est-ce bien cela ?

- pourquoi lorsque je créé un nouvel enregistrement via mon formulaire il m'envoie un mail et il me renvoie un mail de modification "vide" quand j'ouvre le tableau de suivi même si je n'ai pas changé la valeur de la cellule ?

merci encore à vous

j'ai encore 2 questions :

- qu'entendez vous par "les déclarations de variable en cours de macro sont à proscrire ! Mieux vaut les grouper en début de macro." ? si j'ai bien compris je dois remplacer les active.cell.value qui se promènent par une déclaration dans mon target au début . est-ce bien cela ?

Bonjour,

Déclaration de variable = instruction qui commence par Dim

Pour la seconde question, je ne sais pas, je n'ai pas épluché en détail le pavé de code !

J'ai modifié un peu la syntaxe, mais je n'ai jamais utilisé VBA pour envoyer des mails, ni la possibilité de le tester pour l'instant, donc ce n'est pas dit que tout fonctionne !

Private Sub Worksheet_selectionChange(ByVal Target As Range)

Dim oApp As Outlook.Application, oMsg As Outlook.MailItem

If Not Intersect(Target, Range("I1:I10000")) Is Nothing Then
    With Target
        sTo = .Offset(0, -5).Value
        sSubject = .Offset(0, -4).Value
    End With
    Set oApp = Outlook.Application
    Set oMsg = oApp.CreateItem(olMailItem)
    With oMsg
        .To = sTo
        .Subject = "Modification statut traitement OA : " & sSubject
        .BodyFormat = olFormatHTML
        .Body = "le statut de votre OA : " & sSubject & " vient d'être modifié : " & Target.Value
        .Send
    End With
    Set oMsg = Nothing
    Set oApp = Nothing
End If

End Sub
Private Sub CommandButton1_Click()

Dim L As Integer, oApp As Outlook.Application, oMsg As Outlook.MailItem

If ComboBox1 = "" Or TextBox2 = "" Or TextBox3 = "" Or TextBox4 = "" Or TextBox5 = "" Or TextBox6 = "" Then
    MsgBox ("Veuillez renseigner tous les champs")
    Exit Sub
End If

If MsgBox("Confirmez-vous l'enregistrement des données ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
    With Sheets("Tableau Suivi")
        L = .Range("A" & Rows.Count).End(xlUp).Row + 1 'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
        .Range("C" & L).Value = ComboBox1
        .Range("D" & L).Value = TextBox8
        .Range("A" & L).Value = TextBox2
        .Range("B" & L).Value = TextBox3
        .Range("E" & L).Value = TextBox4
        .Range("F" & L).Value = TextBox5
        .Range("G" & L).Value = TextBox6
        .Range("H" & L).Value = TextBox7
    End With
    Set oApp = Outlook.Application
    Set oMsg = oApp.CreateItem(olMailItem)
    With oMsg
        .To = TextBox8.Value
        .Subject = "Enregistrement OA par le magasin de Toul"
        .BodyFormat = olFormatHTML
        .Body = "Bonjour, je vous confirme l'enregistrement de l'OA - Description du besoin : " & TextBox4 & " avec une date de besoin au " & TextBox5
        .Send
    End With
    Set oMsg = Nothing
    Set oApp = Nothing
    MsgBox " Enregistrement validé"
    Unload Me
    Sheets("Intro").Activate
End If

End Sub

merci à vous Pedro22 d'avoir pris le temps de regarder mon problème. je teste cela en rentrant ce soir

bonne fin de journée

Rechercher des sujets similaires à "probleme worksheet change"