Pop-up si modification

Résolu/Fermé
fadmaam Messages postés 34 Date d'inscription mardi 5 mai 2015 Statut Membre Dernière intervention 3 novembre 2015 - 4 sept. 2015 à 15:42
fadmaam Messages postés 34 Date d'inscription mardi 5 mai 2015 Statut Membre Dernière intervention 3 novembre 2015 - 8 sept. 2015 à 16:51
Bonjour,

J'ai encore besoin d'un petit coup de main pour une macro (je ne comprends décidément rien à VBA :-( ).

Je souhaiterais que lorsque quelqu'un tente de modifier/effacer une des infos contenues dans les colonnes A,B et C de l'onglet "Contract Portfolio", un messsage s'affiche à l'écran ssi le numéro de contrat (colonne C) est repris dans la colonne C des onglets "Evaluation" et/ou "Activities". Le message devrait être du genre "Attention, ce contrat est utilisé dans l'onglet 'XXX' (Evaluation et/ou Activities). Etes-vous certain de vouloir procéder à cette modification ?".
Le principe n'est pas de bloquer la personne mais juste de l'avertir... Il faudrait donc que la personne puisse quand même effectuer une modification si nécessaire (via un bouton Yes/No ?).

Voici le lien vers le fichier : http://www.cjoint.com/c/EIenDAqBqDt

Merci d'avance


Cordialement,
FadY
A voir également:

2 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
4 sept. 2015 à 20:22
Bonsoir Fady, bonsoir le forum,

Essaie le code ci-dessous à placer dans l'onglet Contract Portfolio.

Dim TEST As Boolean 'déclare la variable TEST

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim OS(1) As Worksheet 'déclare le tableau de deux valeurs OS (OngletS)
Dim VR As String 'déclare la variable VR (Valeur Reherchée)
Dim R As Range 'déclare la variable R (Recherche)

If TEST = True Then Exit Sub 'si TEST est [Vrai], sort de la procédure (évite la boucle sur la procédure Change)
TEST = True 'définit la variable TEST
'si le changement a lieu ailleurs que dans les colonnes A, B ou C, sort de la procédure
If Application.Intersect(Columns("A:C"), Target) Is Nothing Then Exit Sub
Set OS(0) = Sheets("Evaluation") 'définit l'onglet OS(1)
Set OS(1) = Sheets("Activities") 'définit l'onglet OS(2)
VR = Cells(Target.Row, 3).Value 'définit la valeur cherché (valeur de la cellule en colonne C de la ligne de la celluile modifiée)
For I = 0 To 1 'boucle sur les deux onglets
    Set R = OS(I).Cells.Find(VR, , xlValues, xlWhole) ' définit la recherche R (Recherche la valeur VR entière dans tout l'onglet OS(I))
    If Not R Is Nothing Then 'condition 1 : si il existe au moin une occurrence triouvée
        'condition 2 : si "Non" au message
        If MsgBox("Ce contrat est utilisé dans l'onglet " & OS(I).Name & "." & Chr(13) & _
   "Êtes-vous certain de vouloir procéder à cette modification ?", vbYesNo, "ATTENTION") = vbNo Then
            Application.Undo 'la dernière action effectuée est annulée
            Exit For 'sort de la boucle
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next I 'prochaine onglet de la boucle
TEST = False 'réinitialise la variable TEST
End Sub


Veille à bien laisser la variable TEST au dessus de la procédure comme elle est...
0
fadmaam Messages postés 34 Date d'inscription mardi 5 mai 2015 Statut Membre Dernière intervention 3 novembre 2015
8 sept. 2015 à 09:24
Bonjour,

Avant tout, merci pour ton aide !

J'ai eu un peu de mal à insérer ton code (je suis vraiment novice) car il y avait déjà une macro et ça déconnait pas mal mais ça fonctionne au final ;-)

J'ai néanmoins un petit souci car ça tient aussi compte des cellules vides. Donc, si je rajoute une ligne dans l'onlget "Contract portfolio" (en écrivant dans une cellule vide de la colonne A), j'obtiens le message d'alerte.

Comment corriger ?


FadY
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
8 sept. 2015 à 13:40
Bonjour FadY, bonjour le forum,

j'ai rajouté une ligne de code :

If VR = "" Then Exit Sub 'si la valeur recherchée et vide, sort de la procédure

Ça devrait résoudre le probleme :
Dim TEST As Boolean 'déclare la variable TEST

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim OS(1) As Worksheet 'déclare le tableau de deux valeurs OS (OngletS)
Dim VR As String 'déclare la variable VR (Valeur Reherchée)
Dim R As Range 'déclare la variable R (Recherche)

If TEST = True Then Exit Sub 'si TEST est [Vrai], sort de la procédure (évite la boucle sur la procédure Change)
TEST = True 'définit la variable TEST
'si le changement a lieu ailleurs que dans les colonnes A, B ou C, sort de la procédure
If Application.Intersect(Columns("A:C"), Target) Is Nothing Then Exit Sub
Set OS(0) = Sheets("Evaluation") 'définit l'onglet OS(1)
Set OS(1) = Sheets("Activities") 'définit l'onglet OS(2)
VR = Cells(Target.Row, 3).Value 'définit la valeur cherché (valeur de la cellule en colonne C de la ligne de la celluile modifiée)
If VR = "" Then Exit Sub 'si la valeur recherchée et vide, sort de la procédure
For I = 0 To 1 'boucle sur les deux onglets
    Set R = OS(I).Cells.Find(VR, , xlValues, xlWhole) ' définit la recherche R (Recherche la valeur VR entière dans tout l'onglet OS(I))
    If Not R Is Nothing Then 'condition 1 : si il existe au moin une occurrence triouvée
        'condition 2 : si "Non" au message
        If MsgBox("Ce contrat est utilisé dans l'onglet " & OS(I).Name & "." & Chr(13) & _
   "Êtes-vous certain de vouloir procéder à cette modification ?", vbYesNo, "ATTENTION") = vbNo Then
            Application.Undo 'la dernière action effectuée est annulée
            Exit For 'sort de la boucle
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next I 'prochaine onglet de la boucle
TEST = False 'réinitialise la variable TEST
End Sub

0
fadmaam Messages postés 34 Date d'inscription mardi 5 mai 2015 Statut Membre Dernière intervention 3 novembre 2015
8 sept. 2015 à 16:51
Ca semble fonctionner ;-)


Un tout grand merci !!!


Cordialement,
FadY
0