XL 2016 Effacement du contenu de cellules en raison d'une mauvaise formule

thomasdu43

XLDnaute Occasionnel
Bonjour,

J'ai pioché différentes aides pour construire un fichier (en PJ). Malheureusement, je m'aperçois que le contenu des cellules C7, D7, E7 et F7 (en rouge) s'efface lorsque je change le contenu de la cellule B7 (elle même fonction des cellules A3 et B3).
Pourriez vous m'aider à comprendre le phénomène et le supprimer.
Je vous remercie.
 

Pièces jointes

  • Plan de Maintenance_test.xlsm
    79.3 KB · Affichages: 8

frangy

XLDnaute Occasionnel
Bonjour,

Lorsque tu modifies une cellule dans la feuille PM, la procédure Worksheet_Change est lancée.
Tu as écrit dans cette procédure :
VB:
If Not Intersect([B2:B10], Target) Is Nothing And Target.Count = 1 Then
Target.Offset(, 1).Resize(, 4) = Empty

Donc, lorsque B7 est modifiée, la plage C7:F7 est effacée.

Cordialement.
 

thomasdu43

XLDnaute Occasionnel
Bonjour,

Lorsque tu modifies une cellule dans la feuille PM, la procédure Worksheet_Change est lancée.
Tu as écrit dans cette procédure :
VB:
If Not Intersect([B2:B10], Target) Is Nothing And Target.Count = 1 Then
Target.Offset(, 1).Resize(, 4) = Empty

Donc, lorsque B7 est modifiée, la plage C7:F7 est effacée.

Cordialement.
Bonjour,
Merci pour cette réponse, que faut il modifier ?
Je vous remercie.
 

frangy

XLDnaute Occasionnel
Tel que conçu, ton programme assure un effacement sélectif des lignes 2 à 10 dans les colonnes B à F.
Modification dans la plages A2: A10 ==> effacement B2: F10
Modification dans la plages B2: B10 ==> effacement C2: F10
Modification dans la plages C2: C10 ==> effacement D2: F10
Modification dans la plages D2: D10 ==> effacement E2: F10
Cette procédure permet d’éviter que les données soient conservées alors que l’élément de choix en amont a été changé.
Cela se justifie dans le cas d’un choix en cascade.
Désignation et caractéristique matériel => Typologie => Qualification => Maintenance => Intervenant
Tu es le seul à pouvoir dire si c’est le cas.

Cordialement.
 

thomasdu43

XLDnaute Occasionnel
Tel que conçu, ton programme assure un effacement sélectif des lignes 2 à 10 dans les colonnes B à F.
Modification dans la plages A2: A10 ==> effacement B2: F10
Modification dans la plages B2: B10 ==> effacement C2: F10
Modification dans la plages C2: C10 ==> effacement D2: F10
Modification dans la plages D2: D10 ==> effacement E2: F10
Cette procédure permet d’éviter que les données soient conservées alors que l’élément de choix en amont a été changé.
Cela se justifie dans le cas d’un choix en cascade.
Désignation et caractéristique matériel => Typologie => Qualification => Maintenance => Intervenant
Tu es le seul à pouvoir dire si c’est le cas.

Cordialement.
Merci.
La création d'une cascade de listes (6 rangs) intervient ici sur les cellules de la ligne 3 de la feuille PM (sur la base des infos en feuille BD). J'ai une liste en cascade de nivau 1 en B7 (feuille PM). Le choix fait sur B7 n'a pas lieu d'impacter C7, D7, E7 et F7.
Comment faut il modifier la macro pour ne pas écraser les données saisies dans ces celulles ?
Je vous remercie.
 

frangy

XLDnaute Occasionnel
Dans ce cas, ta procédure se résume à :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    If Target.Address = "$A$3" Then
        Target.Offset(, 1).Resize(, 5) = Empty
    End If
    If Target.Address = "$B$3" Then
        Target.Offset(, 1).Resize(, 4) = Empty
    End If
    If Target.Address = "$C$3" Then
        Target.Offset(, 1).Resize(, 3) = Empty
    End If
    If Target.Address = "$D$3" Then
        Target.Offset(, 1).Resize(, 2) = Empty
    End If
    If Target.Address = "$E$3" Then
        Target.Offset(, 1) = Empty
    End If
    Application.EnableEvents = True
End Sub
Cordialement.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil,

Pour le fun
Si on cause résumé, alors je sors le mien ;)
VB:
Private Sub Worksheet_Change(ByVal T As Range)
If T.Count > 1 Then Exit Sub
If T.Row = 3 And T.Column <= 5 Then
T.Offset(, 1).Resize(, 6 - T.Column) = ""
End If
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16