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