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

  • Initiateur de la discussion Initiateur de la discussion thomasdu43
  • Date de début Date de début

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 !

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

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,

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.
 
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.
 
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.
 
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.
 
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
 
- 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