Effacer plusieurs cellules de couleurs

DianeToulouse

XLDnaute Nouveau
Bonjour,

Complètement débutante sur Excel (2010) je recherche une solution pour pouvoir rapidement supprimer plusieurs cellules d'une même couleur tout en décalant les autres cellules vers le haut.
J'ai vaguement entendu parler de "macro" mais ne sais nullement comment appliquer ce mystérieux outils !!!

HELP ME !!

Ci-joint le fichier en question

Merci d'avance pour toute l'aide que vous pourrez m'apporter :)
 

Pièces jointes

  • Fichier codes.xls
    38 KB · Affichages: 72

Papou-net

XLDnaute Barbatruc
Re : Effacer plusieurs cellules de couleurs

Bonjour DianeToulouse, et bienvenue à toi,

Voici ton fichier modifié.

Pour lancer la macro "Effacer", tu appuies sur [Ctrl] + [Shift] + touche D.

Tu peux ajouter ou supprimer des cellules dans le tableau, la macro détectera automatiquement le nombre de lignes et de colonnes et agira en conséquence. Tu ne dois toutefois pas insérer de lignes ou colonnes vides au milieu du tableau.

Espérant avoir répondu.

Cordialement.
 

Pièces jointes

  • Copie de Fichier codes.xls
    43 KB · Affichages: 91

Dranreb

XLDnaute Barbatruc
Re : Effacer plusieurs cellules de couleurs

Bonjour.
Hou, là. D'après ce qu'il me semble ce n'est pas seulement les cellules qui suivent dans la colonne qui doivent se décaler vers le haut, mais aussi les colonnes suivantes, la cellule de tête de chacune devenant celle de queue de la précédente ?
Quelques cellules de cette couleurs, celles dans une plage sélectionnée ou toutes ?
Comment souhaitez vous déclencher le processus ?
À +
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Effacer plusieurs cellules de couleurs

Bonjour le fil, Bienvenue Diane, bonjour le forum,

En pièce jointe ton fichier modifié. Il faut que tu sélectionnes une cellule qui contient la couleur que tu désires supprimer, puis tu lances la Macro1.
Le code :
Code:
Sub Macro1()
Dim coul As XlColorIndex 'déclare la variable coul
Dim ld As Integer 'déclare la variable ld (Ligne du Début)
Dim nl As Integer 'déclare la variable nl (Nombre de Lignes)
Dim lf As Integer 'déclare la variable lf (Ligne de Fin)
Dim li As Range 'déclare la variable li (LIgne)
Dim i As Integer 'déclare la variable i (Incrément)
Dim cel As Range 'déclare la varialbe cel (CELLule)

coul = ActiveCell.Interior.ColorIndex 'définit la couleur coul
ld = ActiveSheet.UsedRange.Cells(1).Row 'définit la ligne du début ld
nl = ActiveSheet.UsedRange.Rows.Count 'définit le nombre de ligne nl
lf = nl + (ld - 1) 'définit la ligne de fin lf
'si "non" au message, sort de la procédure
If MsgBox("Attention ! Vous allez supprimer toutes les cellules de la même couleur que la cellule active !" & Chr(13) _
    & "Voulez-vous continuer ?", vbYesNo) = vbNo Then Exit Sub
For i = lf To ld Step -1 'boucle 1 : inversée, de la ligne de fin lf à la ligne de début ld
    For Each cel In Application.Intersect(ActiveSheet.UsedRange, Rows(i)) 'boucle 2 : sur toutes les cellules à l'intersection de la ligne et de la plage éditée
        If cel.Interior.ColorIndex = coul Then cel.Delete shift:=xlShiftUp 'si la couleur de fond est la même que coul, supprime la cellule avec décalage vers le haut
    Next cel 'prochaine cellule de la boucle 2
Next i 'prochaine ligne de la boucle 1
End Sub
Le fichier :
 

Pièces jointes

  • Diane Toulouse v01.xls
    56 KB · Affichages: 60

Dranreb

XLDnaute Barbatruc
Re : Effacer plusieurs cellules de couleurs

Pour le cas ou, comme je le supposais, le tableau représente bien une seule liste linéaire de 350 éléments maxi classés et disposée en 14 colonnes de 25 lignes, peut on supprimer toutes les couleurs lors du traitement ? On pourrait ainsi travailler avec un tableau de Variant, ce serait plus facile et plus rapide.
À +
 

DianeToulouse

XLDnaute Nouveau
Re : Effacer plusieurs cellules de couleurs

Bonjour.
Hou, là. D'après ce qu'il me semble ce n'est pas seulement les cellules qui suivent dans la colonne qui doivent se décaler vers le haut, mais aussi les colonnes suivantes, la cellule de tête de chacune devenant celle de queue de la précédente ?
Quelques cellules de cette couleurs, celles dans une plage sélectionnée ou toutes ?
Comment souhaitez vous déclencher le processus ?
À +

1# C'est tout à fait ça! Il s'agit d'une liste de code que je souhaite mettre à jour régulièrement, c'est-à-dire supprimer certains codes et en ajouter d'autres (à la suite). Je n'ai aucune idée de comment le faire...
2# Le fichier que j'ai envoyé avec mon message n'est qu'un exemple, j'ai besoin de connaitre (de A à Z avec des petits pas!) et de pouvoir reproduire la procédure sur le fichier original...
Merci d'avance pour votre aide :)
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Effacer plusieurs cellules de couleurs

Bonsoir le fil, bonsoir le forum,

Le code que je t'ai proposé est commenté (pour te permettre d'en comprendre le fonctionnement) et devrait fonctionner sur n'importe quel fichier...
 

Dranreb

XLDnaute Barbatruc
Re : Effacer plusieurs cellules de couleurs

C'est tout à fait ça!
Bon. Le plus simple c'est de charger les Values de la plage dans un tableau de Variant, de modifier celui ci, de le reverser dans la plage, puis d’ôter la couleur qui a servi à repérer les références à supprimer.
Travaillez avec un tableau de variant à deux dimensions mais en raisonnant en une dimension. Soit N l'indice dans le tableau virtuel à une dimension, la ligne c'est (N - 1) Mod LMax + 1, et la colonne c'est (N - 1) \ LMax + 1, avec LMax le nombre de références par colonne. Faites une boucle sur NEntré pour explorer tous les éléments et incrémentez un NSorti si la valeur n'est pas à supprimer et affectez l'élément NEntré à l'élément NSorti du tableau virtuel à une dimension, donc dans le tableau réel avec ligne et colonne calculés comme je l'ai indiqué, aussi bien à partir de NEntré que de NSorti.

P.S. Il est même possible d'isoler complètement l'accès au tableau réel par des procédures Property Let et Property Get pour avoir vraiment l'impression de travailler dans un tableau à une dimension appelé TVirt:
VB:
Property Get TVirt(ByVal N as Long) as Variant
TVirt = TVar((N - 1) Mod LMax + 1, (N - 1) \ LMax + 1)
End Property
Property Let TVirt(ByVal N as Long, ByVal Réf as Variant)
TVar((N - 1) Mod LMax + 1, (N - 1) \ LMax + 1) = Réf
End Property
Bon courage.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 199
Messages
2 086 157
Membres
103 137
dernier inscrit
Billly