Effacer contenu et bordures de cellules d'une plage

Fermé
Roland - 20 nov. 2015 à 17:37
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 - 27 nov. 2015 à 10:01
Bonjour,

Je souhaiterais par une macro VBA effacer le contenu et les bordures de cellules d'une partie de la plage M37:AJ147, depuis la cellule contenant la plus grande valeur de la colonne AJ, jusqu'à la fin de cette plage. Ceci sans supprimer de lignes.

Exemple :
dans la plage M37:AJ147 dans la colonne AJ, la cellule AJ100 contient la plus grande valeur
alors le contenu et et les bordures de M100:AJ147 sont effacés, la couleur de fond restant la même.

Merci








13 réponses

ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 20/11/2015 à 18:31
Bonjour

Une macro à adapter

Const plage = "A2:G22"
Const coco = "G"

Sub ok()
Dim paef As Range, m, obj As Object
Dim codeb As Long, cofin As Long, lideb As Long, lifin As Long
m = Application.WorksheetFunction.Max(Columns(coco))
Set obj = Columns(coco).Find(m, , , xlWhole)
lideb = obj.Row
lifin = Range(Split(plage, ":")(1)).Row
codeb = Range(Split(plage, ":")(0)).Column
cofin = Range(Split(plage, ":")(1)).Column
Set paef = Range(Cells(lideb, codeb), Cells(lifin, cofin))
paef.Value = ""
paef.Borders.LineStyle = xlNone
End Sub

Cdlmnt
0
Bonjour

Merci de votre réponse.

Lorsque je veux appliquer la macro il s'affiche le message suivant : "Erreur de compilation : End Sub attendu"

La macro se présente ainsi :

Const plage = "M37:AJ147"
Const coco = "AJ"

Sub ok()
Dim paef As Range, m, obj As Object
Dim codeb As Long, cofin As Long, lideb As Long, lifin As Long
m = Application.WorksheetFunction.Max(Columns(coco))
Set obj = Columns(coco).Find(m, , , xlWhole)
lideb = obj.Row
lifin = Range(Split(plage, ":")(1)).Row
codeb = Range(Split(plage, ":")(0)).Column
cofin = Range(Split(plage, ":")(1)).Column
Set paef = Range(Cells(lideb, codeb), Cells(lifin, cofin))
paef.Value = ""
paef.Borders.LineStyle = xlNone
End Sub

Comment résoudre ce problème?
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 21/11/2015 à 10:35
Lorsque je veux appliquer la macro il s'affiche le message suivant : "Erreur de compilation : End Sub attendu"
Bizarre, chez moi, j'ai quand même recopié ton code dans un module, j'ai pu le compiler et l'exécuter sans erreur.
N'aurais tu pas d'autres macros dans ton module ?
Sinon envoies ton fichier via cjoint.com

Cdlmnt
0
Bonjour CCM81

Je joins le fichier. Je suis sur Excel 2000.
Cliquer sur Outils Macros fait apparaître une liste de 3 macros ("Deuxnuminsertion", "Numéros", "OK"), un clic sur Visual Basic Editor permet de voir les modules, dont deux contiennent des macros (Module 6 : "Deuxnuminsertion"; Module 5 : "Numéros").
J'ai 3 macros dans la liste des macros et 2 dans les modules. Le problème vient-il de là?

Cordialement

http://www.cjoint.com/c/EKvopxAkGIY
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 21/11/2015 à 17:42
Tu supprimes ces lignes, qui déclarent une procedure dont il n'y a ni le corps (le code proprement dit) ni la fin (end sub)

Sub Deuxnuminsertion()
'
' Deuxnuminsertion Macro
' Macro enregistrée le 21/11/2015 par Roland
'
'

RQ. Tu as quelques modules vides que tu peux supprimer

Cdlmnt
0
Bonjour CCM 81

J'ai effectué les modifications présentées dans le fichier joint. Il apparaît le message "Erreur d'exécution 91 - variable ou objet de bloc With non définie".
Le débogueur surligne en jaune la ligne "libed = objet.Row".

J'ai du faire quelque part une opération qui bloque la macro.

Cdlmt

http://www.cjoint.com/c/EKxksb7HEgY
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
23 nov. 2015 à 12:02
Dans la déclaration des variables, modifies le type de la variable m comme ceci
Dim paef As Range, m As Date, obj As Object

Cdlmnt
0
Bonjour CCM81


La macro fonctionne mais il y a un problème exposé dans le fichier joint.

Cdlmt


http://www.cjoint.com/c/EKywbVeRHiY
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
25 nov. 2015 à 11:42
1. Pour ce qui est de la couleur, tu ajoutes le ligne souligée
paef.Borders.LineStyle = xlNone
paef.Interior.ColorIndex = 2
End Sub

2. Pour ce qui est de l'erreur, je crois qu'elle provient du fait qu'en AI160 tu as une valeur qui n'a rien à voir avec les dates du début de colonne.
Essaies ceci
Const Plage = "M37:AI147"
Const coco = "AI1:AI150"

Sub ok()
Dim paef As Range, m As Date, obj As Object
Dim codeb As Long, cofin As Long, lideb As Long, lifin As Long
m = Application.WorksheetFunction.Max(Range(codate))
Set obj = Range(codate).Find(m, , , xlWhole)

lideb = obj.Row
lifin = Range(Split(Plage, ":")(1)).Row
codeb = Range(Split(Plage, ":")(0)).Column
cofin = Range(Split(Plage, ":")(1)).Column
Set paef = Range(Cells(lideb, codeb), Cells(lifin, cofin))
paef.Value = ""
paef.Borders.LineStyle = xlNone
paef.Interior.ColorIndex = 2
End Sub

Cdlmnt
0
Bonjour ccm81

Pour la suppression recherchée j'avais toujours des messages d'erreur lorsque le remplissage à partir de la ligne 837 était présent. J 'ai fini par déplacé la plage M162:AI2004 de façon à laisser cette plage vide. La macro fonctionne alors de cette manière (pourquoi?).

La macro transforme bien la coloration du fond des cellules colorées en fond blanc.

Cordialement
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
Modifié par ccm81 le 26/11/2015 à 14:00
Il y avait un bug ici (un collage prématuré !)

Const Plage = "M37:AI147"
Const coco = "AI1:AI150"

Sub ok()
Dim paef As Range, m As Date, obj As Object
Dim codeb As Long, cofin As Long, lideb As Long, lifin As Long
m = Application.WorksheetFunction.Max(Range(coco))
Set obj = Range(coco).Find(m, , , xlWhole)

lideb = obj.Row
lifin = Range(Split(Plage, ":")(1)).Row
codeb = Range(Split(Plage, ":")(0)).Column
cofin = Range(Split(Plage, ":")(1)).Column
Set paef = Range(Cells(lideb, codeb), Cells(lifin, cofin))
paef.Value = ""
paef.Borders.LineStyle = xlNone
paef.Interior.ColorIndex = 2
End Sub

Cdlmnt
0
Bonjour ccm81


Le message d'erreur 1004 s'affiche :"Impossible de lire la propriété de la classe Worksheet.fonction"


Cdlmt
0
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
27 nov. 2015 à 10:01
Tu as bien défini la plage coco ?
Const coco = "AI1:AI150"
0