Suppression de données dans plusieurs plages à partir d'une cellule

Salut a tous

Suppression de données dans plusieurs plages à partir d'une cellule.

Si je rentre une donnée dans une cellule après validation, je dois supprimer les données dans 3 plages différentes + la cellule.

Développer par rapport au fichier-joint.

Si je veux supprimer ex: “ddd”.

1) dans L11 j'écris “ddd”.

2) je valide avec enter.

3) les données “ddd” des 3 plages B4:K4, B8:B17, E8:E17 + la cellule L11 s'effacent.

4) en + du code, je voudrai faire cela avec enregistrer une macro, mais je ne vois pas comment.

faire avec le choix de la cellule L11 pour reconnaître “ddd” parmi les autres.

merci

Salut,

Voici une proposition à placer dans la feuille 1 de l'éditeur vba de ton fichier exemple

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Plage1 As Range, Plage2 As Range, Plage3 As Range, Plage As Range, VCell As Range

If Target.Address = "$L$11" Then
    Application.EnableEvents = False
    Set Plage1 = ActiveSheet.Range("B4:K4")
    Set Plage2 = ActiveSheet.Range("B8:B17")
    Set Plage3 = ActiveSheet.Range("E8:E17")
    Set Plage = Union(Plage1, Plage2, Plage3)
    For Each VCell In Plage
        If VCell = ActiveSheet.Range("L11").Value Then VCell = ""
    Next
    ActiveSheet.Range("L11").Value = ""
End If
Application.EnableEvents = True
End Sub

En espérant que cela te convienne.

Jers

bonsoir Jers19 et merci c impect

et pour le faire avec l enregistreur de macro tu as une idee

@+

Tu vas dans l'onglet développeur et tu cliques sur le bouton enregistrer une macro.

Attention à partir de ce moment là, toutes les actions que tu vas exécuter sur Excel seront retranscrites en code ce qui va te donner un code très lourd.

Pense bien à appuyer sur le bouton arrêter l'enregistrement quand tu as finis.

salut Jers19

Je connais la procédure pour enregistrer une macro

Mon souci c comment faire pour enregistrer la commande du choix à supprimer

Comment l'enregistreur va savoir quel mot je veux supprimer dans la plage, je ne comprend pas la manip à faire ?

Si tu peux me le faire et me donner le code (ou me renvoyer mon fichier)

Je pourrai voir le pas-à-pas pour comprendre

Merci

salut.

ton problème ne peut pas être gérer par l'enregistreur car le texte à supprimer et les cellules contenant ce texte sont variables.

de plus je ne comprends pas pourquoi tu veux le faire avec l'enregistreur alors que je t'ai fourni le code.

Re Jers19

ton problème ne peut pas être gérer par l'enregistreur car le texte à supprimer et les cellules contenant ce texte sont variables.

ça confirme ce que je penser

je ne comprends pas pourquoi tu veux le faire avec l'enregistreur alors que je t'ai fourni le code.

juste par curiosité et ton code me convient très bien

merci encore

Ah ok je comprends,

Mais il est vrai que malheureusement dans ce cas précis, l'enregistreur ne sera pas d'une grande utilité.

Bon courage pour la suite,

A+

Jers

re salut Jers19

et si a la place de supprimer une cellule ex: bbb je veux supprimer toute la colonne de C1:C150

bien sur valable pour toute la ligne B4:K4 le reste restant tel quel..

merci

ps(pour le résolu des que je suis bon je clic dessus)

Je suis pas sur d'avoir compris

Tu veux rajouter une plage de suppression (ex: C1:C150) en plus de celles déjà définies ?

bonsoir Jers19

regarde le fichier ci-joint (feuille 1)

Suppression de données dans plusieurs plages à partir d'une cellule.

Si je rentre une donnée dans une cellule après validation,

je dois supprimer les données dans 3 plages différentes + la cellule.

Développer par rapport au fichier-joint.

Si je veux supprimer ex: “ddd”.

1) dans N3 j'écris “ddd”.

2) je valide avec enter.

3) les données “ddd” des 3 plages

C1:L26 (dans cette plage c’est la colonne entière qui s’efface des données)

A6:A15, N6:N15,+ la cellule N3 s'effacent.

Donc ca veut dire, si on prend ton fichier exemple, que l'on contrôle les valeurs dans la plage C2:L2, et si par exemple la cellule D2 = N3, on supprime les valeurs de C1 à L26, c'est ca ???

non

si N3 correspond a une colonne exemple : ddd = colonne F la colonne entière F1:F26 s efface

même chose pour les autres colonne de C a L qui correspondent a N3

on supprime les valeurs de C1 à L26, c'est ca ???

on supprime les valeurs de F1 a F26 le reste et bon

C1:L26 c la plage ou je supprime les donnees de la colonne qui correspond a N3

merci a toi j espère être clair

si N3 correspond a une colonne exemple : ddd = colonne F la colonne entière F1:F26 s efface

Ce veut dire quoi colonne F :

Si une cellule dans cette plage est égale à DDD, on supprimer ou il faut que toutes les cellules de la colonne (F1 à F26) soient égales à ddd ?

salut Jers19

La plage C1 a L26 correspond à 10 colonnes : C=aaa/ D=bbb/ E=ccc/ F=ddd/ G=eee/ H=fff/ I=ggg/ J, K, L=(vide)

Voici 2 exemples donc 2 actions bien séparées

Si en N3 je rentre ddd (réf : F2 de la colonne F) je vide cette colonne de toutes c données (donc vierge) de F1 a F26

Si en N3 je rentre fff (réf : H2 de la colonne H) je vide cette colonne de toutes c données (donc vierge) de H1 a H26

Valable pour toutes les colonnes dans la mesure où je rentre une réf de C2 a L2 en N3

@+

Salut,

Voici la modification demandée.

Jers

salut Jers19

presque la même les 2 marches bien après la qu elle est la mieux ????

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Plage1 As Range, Plage2 As Range, Plage3 As Range, Plage As Range, VCell As Range, re As Range

    If Target.Address = "$N$3" Then
        Application.EnableEvents = False
        Set Plage1 = ActiveSheet.Range("A6:A15")
        Set Plage2 = ActiveSheet.Range("C2:L26")
        Set Plage3 = ActiveSheet.Range("N6:N15")
        Set Plage = Union(Plage1, Plage2, Plage3)
        Set re = Plage.Find(Target.Value, lookat:=xlWhole)
        If Not re Is Nothing Then
            Do
                If Not Intersect(re, Plage2) Is Nothing Then
                    re.EntireColumn.ClearContents
                Else
                    re.ClearContents
                End If
                Set re = Plage.FindNext(re)
            Loop Until re Is Nothing
            ActiveSheet.Range("N3").ClearContents
        End If
    End If
    Application.EnableEvents = True
End Sub

merci a toi

ps si je met un code fais avec enregistreur tu peux me le corriger bien propre ??

Le principal, c'est que ca marche

En ce qui concerne l'enregistreur. je pense que le mieux, c'est que tu essaies de le faire en codant directement.

Bien sur je t'aiderai si besoin.

A+

Jers

Jers19 voila le code (qui marche bien) a corriger

et je voudrais si possible supprimer le bouton d exécution par entrée du clavier ou de la souris après la saisie en DA7

Option Explicit
Sub Macro1()
'
' Macro1 copie la nouvelle donnee cy33 , cv2
'

    Range("DA7").Select
    Selection.Copy
    Range("CY33").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll ToRight:=-1
    Range("CV2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll ToRight:=1
    Range("DA7").Select
    Application.CutCopyMode = False
    Selection.ClearContents

'   Macro1 classe alphabetiquement cw,cx,cy et copie dans c,e,g
'

'
    Range("CW4:CW33").Select
    Selection.Copy
    ActiveWindow.SmallScroll Down:=25
    Range("CX36").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=-40
    Range("CX4:CX33").Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.SmallScroll Down:=45
    Range("CX66").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=-60
    Range("CY4:CY33").Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.SmallScroll Down:=70
    Range("CX96").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=-45
    Range("CX36").Select
    ActiveWindow.SmallScroll Down:=70
    Range("CX36:CX125").Select
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("index").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("index").Sort.SortFields.Add Key:=Range( _
        "CX36:CX125"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("index").Sort
        .SetRange Range("CX36:CX125")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    ActiveWindow.SmallScroll Down:=-85
    Range("CX36:CX65").Select
    Selection.Cut
    ActiveWindow.SmallScroll Down:=-60
    Range("CW4").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=60
    Range("CX66:CX95").Select
    Selection.Cut
    ActiveWindow.SmallScroll Down:=-105
    Range("CX4").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=85
    Range("CX96:CX125").Select
    Selection.Cut
    ActiveWindow.SmallScroll Down:=-115
    Range("CY4").Select
    ActiveSheet.Paste
    Range("CW4:CW33").Select
    Selection.Copy
    Range("C4").Select
    ActiveSheet.Paste
    Range("CX4:CX33").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("E4").Select
    ActiveSheet.Paste
    Range("CY4:CY33").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("G4").Select
    ActiveSheet.Paste
    Range("k2").Select

    Columns("c:Cv").EntireColumn.Hidden = False
' Macro3  classe alphabetiquement k:cv
'
       Range("CV1").Select
    ActiveWindow.ScrollColumn = 99
    ActiveWindow.ScrollColumn = 98
    ActiveWindow.ScrollColumn = 78
    ActiveWindow.ScrollColumn = 60
    ActiveWindow.ScrollColumn = 44
    ActiveWindow.ScrollColumn = 32
    ActiveWindow.ScrollColumn = 24
    ActiveWindow.ScrollColumn = 21
    ActiveWindow.ScrollColumn = 18
    ActiveWindow.ScrollColumn = 15
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 10
    ActiveWindow.ScrollColumn = 9
    ActiveWindow.ScrollColumn = 10
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 12
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.ScrollColumn = 10
    ActiveWindow.ScrollColumn = 11
    ActiveWindow.SmallScroll Down:=135
    Range("K1:CV153").Select
    Range("CV1").Activate
    Application.CutCopyMode = False
    Selection.Copy
    Range("K154").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("index").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("index").Sort.SortFields.Add Key:=Range( _
        "K155:CV155"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("index").Sort
        .SetRange Range("K154:CV306")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
    Selection.Cut
    Range("K1").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=-200
    Columns("a:Cv").EntireColumn.Hidden = True

End Sub

merci a toi et bon courage

Salut,

Voici le code un peu épuré.

Il faut bien noté qu'avec l'enregistreur de macro, il y a bcp de select ce qui est une source de ralentissement importante.

Option Explicit
Sub Macro1()
' Macro1 copie la nouvelle donnee cy33 , cv2
    Range("DA7").Select
    Selection.Copy
    Range("CY33").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Range("CV2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Range("DA7").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    '   Macro1 classe alphabetiquement cw,cx,cy et copie dans c,e,g
    Range("CW4:CW33").Select
    Selection.Copy
    Range("CX36").Select
    ActiveSheet.Paste
    Range("CX4:CX33").Select
    Selection.Copy
    Range("CX66").Select
    ActiveSheet.Paste
    Range("CY4:CY33").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("CX96").Select
    ActiveSheet.Paste
    Range("CX36:CX125").Select
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("index").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("index").Sort.SortFields.Add Key:=Range("CX36:CX125"), SortOn:=xlSortOnValues, _
    Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("index").Sort
        .SetRange Range("CX36:CX125")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("CX36:CX65").Select
    Selection.Cut
    Range("CW4").Select
    ActiveSheet.Paste
    Range("CX66:CX95").Select
    Selection.Cut
    Range("CX4").Select
    ActiveSheet.Paste
    Range("CX96:CX125").Select
    Selection.Cut
    Range("CY4").Select
    ActiveSheet.Paste
    Range("CW4:CW33").Select
    Selection.Copy
    Range("C4").Select
    ActiveSheet.Paste
    Range("CX4:CX33").Select
    Selection.Copy
    Range("E4").Select
    ActiveSheet.Paste
    Range("CY4:CY33").Select
    Selection.Copy
    Range("G4").Select
    ActiveSheet.Paste
    Columns("C:CV").EntireColumn.Hidden = False
' Macro3  classe alphabetiquement k:cv
    Range("CV1").Select
    Selection.Copy
    Range("K154").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveWorkbook.Worksheets("index").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("index").Sort.SortFields.Add Key:=Range("K155:CV155"), SortOn:=xlSortOnValues, _
    Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("index").Sort
        .SetRange Range("K154:CV306")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
    Selection.Cut
    Range("K1").Select
    ActiveSheet.Paste
    Columns("A:CV").EntireColumn.Hidden = True

End Sub

Jers

Rechercher des sujets similaires à "suppression donnees plages partir"