Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Supprimer une cellule lorsque la ligne correspondante a été modifiée sur une autre feuille

Spielbergh

XLDnaute Nouveau
Bonjour,

Je débute en VBA et ce Forum m'a déjà beaucoup aidé mais je n'ai pas pu trouvé la solution au cas suivant :

C'est un fichier dans lequel des informations sont remplies à partir d'un USERFORM dans la feuille "Database".
Je voudrais que chaque fois qu'une cellule d'une ligne est modifiée sur la feuille "database", la dernière cellule (colonne M) de la ligne correspondante sur la feuille "validation" soit supprimée. La ligne correspondante serait retrouvée à partir du numéro de note de crédit dans la colonne E sur les deux feuilles.
Les Données dans la feuille "validation" sont simplement reprises de la feuille "Database", cette feuille ne sera pas accessible à tout le monde.

Avez-vous une solution ?

Merci d'avance

Bonne journée
 

Pièces jointes

  • test 7.xlsm
    270.9 KB · Affichages: 7
Solution
Ok donc pour toute cellule modifiée dans la ligne 12 en feuille "database", on remet à vide la cellule M12 de la feuille "validation". Code à placer dans la feuille "database":
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cellule As Range
 
    With ThisWorkbook.Worksheets("Validation")
        For Each Cellule In Target.Cells
            .Cells(Cellule.Row, 13).ClearContents
        Next Cellule
    End With
End Sub

C'est tellement simple ! Je ne sais pas pourquoi tu as embarqué la colonne E dans cette affaire et d'ailleurs je n'ai compris ton 2ème message
Je demandais de pouvoir le faire en cherchant la cellule E12 de la feuille database dans la colonne E de la feuille validation pour utiliser une autre...

Dudu2

XLDnaute Barbatruc
Ok donc pour toute cellule modifiée dans la ligne 12 en feuille "database", on remet à vide la cellule M12 de la feuille "validation". Code à placer dans la feuille "database":
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cellule As Range
 
    With ThisWorkbook.Worksheets("Validation")
        For Each Cellule In Target.Cells
            .Cells(Cellule.Row, 13).ClearContents
        Next Cellule
    End With
End Sub

C'est tellement simple ! Je ne sais pas pourquoi tu as embarqué la colonne E dans cette affaire et d'ailleurs je n'ai compris ton 2ème message
Je demandais de pouvoir le faire en cherchant la cellule E12 de la feuille database dans la colonne E de la feuille validation pour utiliser une autre méthode qu'une "formule" pour la feuille validation
 

Spielbergh

XLDnaute Nouveau
Ça fonctionne merci beaucoup pour ton temps !
Encore une question :
C'est possible qu excell ne l'exécute que si la cellule M est remplie ?

J'ai essayé ceci :
If .Cells(Cellule.Row, 13) = "'" then exit sub else

Mais ça ne change rien

Car ça ralentit pas mal le remplissage des données puisqu'il l'exécute pour chaque cellule lorsque je save luserform
 

Dudu2

XLDnaute Barbatruc
Si c'est une question de temps d'exécution ta modif ne change pratiquement rien.
Même si tu modifies 100 cellules ça ne devrait pas prendre beaucoup de temps.
Peut-être y a-t-il des conflits de modifs que je ne peux pas voir. Essaie:

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cellule As Range
    Dim EnableEventsAtCallTime As Boolean
 
    EnableEventsAtCallTime = Application.EnableEvents
    Application.EnableEvents = False

    With ThisWorkbook.Worksheets("Validation")
        For Each Cellule In Target.Cells
            if Not IsEmpty(.Cells(Cellule.Row, 13)) then .Cells(Cellule.Row, 13).ClearContents
        Next Cellule
    End With

    Application.EnableEvents = EnableEventsAtCallTime
End Sub

Et emballe la séquence de mise à jour avec
Code:
Application.ScreenUpdating = False

<séquence de mise à jour>

Application.ScreenUpdating = True
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…