Ouvrir un UserForm si une cellule change

Bonjour tous,

J'ai une procédure évènementielle Workcheet_Change qui s'exécute si la valeur d'une cellule change afin d'envoyer un e-mail avec certains données. A ce stade tous marche finalement :) (Merci une autre fois pour vos aides), mais j'ai voulais avant l'envoie de l'email lancer un formulaire qui va demander à l'utilisateur de saisir certaines données manquantes pour cette cellule particulière ensuite l'enregistrer dans la feuille Excel à la place définie et l'utiliser dans l'e-mail.

En gros, j'arrive à exécuter le formulaire à partir de la procédure Workcheet_Change, mais je n'arrive pas à le remplir par les données correspondante à la cellule changée (récupérer la variable ThisRow) :(

Voici mon code pour vous comprenez de près ;)

Option Explicit
Dim ValCell As Variant
Sub Worksheet_Change(ByVal Target As Range)
    Dim Destinataire As String, xOutApp As Object, OutMail As Object, xMailItem As String
    Dim xMailBody As String, DernLigne As Long, ThisRow As Long

If Target.Column = 10 And Target.Value = "Gagnée" Then

    DernLigne = Sheets("Clients Gagnés 2021").Range("a65536").End(xlUp).Row + 1
    ThisRow = Target.Row
'Commerce.Load
Commerce.Show
end sub
Sub UserForm_Initialize()
NumOfr = Sheets("Affaires 2021").Range("A" & ThisRow)
NumOfr.Locked = True

Actua.AddItem "Gré à gré"
Actua.AddItem "Selon formule contractuelle"
Actua.AddItem "Pas d'actualisation à N+1"
Actua.Style = fmStyleDropDownList

end sub 

Merci d'avance

Bonjour,

pour être accessible depuis le module de code de l'Userform, la variable ThisRow (initialisée au niveau module de code de la Feuille) doit être déclarée en Public au niveau d'un module standard:

Public ThisRow As Long

A+

Bonjour,

Merci pour ta réponse c'est bien ça mais j'ai un autre problème plus compliqué pour mon niveau :(

Je voulais que si l'utilisateur clique sur la bouton quitter pour ne pas remplir le formulaire. La cellule revient à son état initial

Private Sub Quitter_Click()
Dim Confirmer As Byte
    Confirmer = MsgBox("Si vous annulez la saisie, vous perdrez toutes les données saisies et le client ne serait pas enregistré comme gagné." _
    & "Êtes-vous sûr de vouloir annuler ?", vbYesNo + vbCritical + vbDefaultButton2, "Abandon de la procédure")
Select Case Confirmer
Case 6 'yes
'la cellule revient à son état initial 
Unload Me
Case 7 'no
End Select
End Sub

Merci pour vos aides :)

Avant de saisir (ou sélectionner) "Gagnée", c'est quoi la valeur initiale ?

Toujours la même valeur? Toujours vide ? Ca dépend ?

A voir une solution en fonction de la réponse

ça dépend de on a plusieurs valeurs initiales possibles, donc on ne peut pas tout simplement forcer la cellule à une valeur X et supprimer la ligne correspondante de la feuille "Clients gagnés ".

Par contre avant le faite d'ajouter l'USF, j'avais cette fonction qui permet de retourner la cellule à son état initiale si l'utilisateur choisi de n'est pas confirmé la modif.

Apres ci on déclare ValCell et Target comme Public est ce que c'est une solution ?

Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Target.Column = 10 And Target.Count = 1 Then
   ValCell = Target
 End If
End Sub

Effectivement si "ça dépend...", la solution est de passer par la sub SelectionChange(... pour récupérer la valeur initiale dans la variable ValCell qui devra être déclarée dans un module standard en public, pour être accessible depuis le Userform. Mais ne pas toucher à Target.

ValCell = Target.Value

Pour remettre la cellule à son état initial depuis l'Userform:

.../...
Case 6 'yes
'la cellule revient à son état initial 
WorkSheets("Nom de la Feuille").Range("J" & ThisRow).value = ValCell
Unload Me
...

Merci infiniment pour ta réponse je la testerai et je vous tiens au courant

Bonne fin de la journée

Rechercher des sujets similaires à "ouvrir userform change"