Effacer les données des cellules colorisées en blanc
Résolu/Fermé
mijean94
Messages postés
413
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
12 septembre 2024
-
7 oct. 2016 à 23:04
mijean94 Messages postés 413 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 12 septembre 2024 - 9 oct. 2016 à 22:25
mijean94 Messages postés 413 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 12 septembre 2024 - 9 oct. 2016 à 22:25
A voir également:
- Effacer les données des cellules colorisées en blanc
- Effacer les données de navigation - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Pourquoi effacer les données d'une application - Guide
- Effacer les cookies - Guide
- Verrouiller des cellules excel - Guide
4 réponses
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
523
8 oct. 2016 à 00:16
8 oct. 2016 à 00:16
Bonjour,
Essaie avec :
A+
Essaie avec :
If vcel.Interior.ColorIndex = 2 Then vcel.Clear
A+
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
523
8 oct. 2016 à 10:53
8 oct. 2016 à 10:53
Bonjour,
Effectivement, j'avais zappé les deux premiers points.
Pour la détermination de la plage, j'ai opté pour une recherche des limites en balayant les lignes et les colonnes de la plage D3:Q40.
La mémorisation de la plage est obtenue avec la variable "Plage". Il reste à voir comment tu souhaites utiliser cette plage et adapter la portée de la variable, si nécéssaire.
A+
Effectivement, j'avais zappé les deux premiers points.
Pour la détermination de la plage, j'ai opté pour une recherche des limites en balayant les lignes et les colonnes de la plage D3:Q40.
La mémorisation de la plage est obtenue avec la variable "Plage". Il reste à voir comment tu souhaites utiliser cette plage et adapter la portée de la variable, si nécéssaire.
Sub efface_donnee()
Dim LigDeb As Long, LigFin As Long
Dim ColDeb As Integer, ColFin As Integer
Dim Plage As Range, Cel As Range
Dim vcel As Variant
LigDeb = Rows.Count
LigFin = 1
ColDeb = Columns.Count
ColFin = 1
For Each Cel In Range("D2").Resize(, 14)
If Cel.End(xlDown).Row < LigDeb Then LigDeb = Cel.End(xlDown).Row
Next Cel
For Each Cel In Range("D41").Resize(, 14)
If Cel.End(xlUp).Row > LigFin Then LigFin = Cel.End(xlUp).Row
Next Cel
For Each Cel In Range("C3").Resize(38)
If Cel.End(xlToRight).Column < ColDeb Then ColDeb = Cel.End(xlToRight).Column
Next Cel
For Each Cel In Range("R3").Resize(38)
If Cel.End(xlToLeft).Column > ColFin Then ColFin = Cel.End(xlToLeft).Column
Next Cel
Set Plage = Range(Cells(LigDeb, ColDeb), Cells(LigFin, ColFin))
For Each vcel In Plage
If vcel.Interior.ColorIndex = 2 Then vcel.Clear
Next vcel
End Sub
A+
mijean94
Messages postés
413
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
12 septembre 2024
11
8 oct. 2016 à 22:08
8 oct. 2016 à 22:08
Bonjour, et merci pour cette proposition qui fonctionne très bien dans mon fichier d’exemple.
Le problème :
Lorsque je place la macro dans mon fichier finale la sélection n’est pas la bonne ?
J’ai fait des essais et je n’arrive pas à comprendre pourquoi ???
Peux-tu m’orienter pour la recherche du défaut ?
Voici mon fichier : https://www.cjoint.com/c/FJiudv31iPt
Voici la macro modifiée :
Option Explicit
Merci d’avance
Bien cordialement
Le problème :
Lorsque je place la macro dans mon fichier finale la sélection n’est pas la bonne ?
J’ai fait des essais et je n’arrive pas à comprendre pourquoi ???
Peux-tu m’orienter pour la recherche du défaut ?
Voici mon fichier : https://www.cjoint.com/c/FJiudv31iPt
Voici la macro modifiée :
Option Explicit
Sub efface_donnee()
'efface les donnée non utiles
Dim LigDeb As Long, LigFin As Long
Dim ColDeb As Integer, ColFin As Integer
Dim Plages As Range, Cel As Range
Dim vcel As Variant
LigDeb = Rows.Count
LigFin = 1
ColDeb = Columns.Count
ColFin = 1
' cas pour une plage qui va de D3 à IU302
For Each Cel In Range("D3").Resize(, 253) '("= premiere ligne -1 et le nombre après resize = nombre de cellule à traiter
If Cel.End(xlDown).Row < LigDeb Then LigDeb = Cel.End(xlDown).Row
Next Cel
For Each Cel In Range("D303").Resize(, 253) ' ("= dermièere ligne +1
If Cel.End(xlUp).Row > LigFin Then LigFin = Cel.End(xlUp).Row
Next Cel
For Each Cel In Range("C3").Resize(250) '("= premiere colonne -1
If Cel.End(xlToRight).Column < ColDeb Then ColDeb = Cel.End(xlToRight).Column
Next Cel
For Each Cel In Range("IV302").Resize(250) '("= derniere colonne +1
If Cel.End(xlToLeft).Column > ColFin Then ColFin = Cel.End(xlToLeft).Column
Next Cel
Set Plages = Range(Cells(LigDeb, ColDeb), Cells(LigFin, ColFin))
MsgBox "L" & LigDeb & "/" & "C" & ColDeb & " : " & "L" & LigFin & "/" & "C" & ColFin
MsgBox " prés pour effacer les données ? "
For Each vcel In Plages
If vcel.Interior.ColorIndex = 2 Then vcel.Clear
Next vcel
MsgBox "fin de la sequence d'effacement "
End Sub
Merci d’avance
Bien cordialement
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
523
>
mijean94
Messages postés
413
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
12 septembre 2024
9 oct. 2016 à 06:15
9 oct. 2016 à 06:15
Bonjour,
Code modifié (voir la détermination de la dernière colonne) :
A+
Code modifié (voir la détermination de la dernière colonne) :
Sub efface_donnee()
'efface les donnée non utiles
Dim LigDeb As Long, LigFin As Long
Dim ColDeb As Integer, ColFin As Integer
Dim Plages As Range, Cel As Range
Dim vcel As Variant
LigDeb = Rows.Count
LigFin = 1
ColDeb = Columns.Count
ColFin = 1
' cas pour une plage qui va de D3 à IU302
For Each Cel In Range("D3").Resize(, 253) '("= premiere ligne -1 et le nombre après resize = nombre de cellule à traiter
If Cel.End(xlDown).Row < LigDeb Then LigDeb = Cel.End(xlDown).Row
Next Cel
For Each Cel In Range("D302").Resize(, 253) ' ("= dermièere ligne +1
If Cel.End(xlUp).Row > LigFin Then LigFin = Cel.End(xlUp).Row
Next Cel
For Each Cel In Range("C3").Resize(250) '("= premiere colonne -1
If Cel.End(xlToRight).Column < ColDeb Then ColDeb = Cel.End(xlToRight).Column
Next Cel
For Each Cel In Range("IV3").Resize(250) '("= derniere colonne +1
If Cel.End(xlToLeft).Column > ColFin Then ColFin = Cel.End(xlToLeft).Column
Next Cel
Set Plages = Range(Cells(LigDeb, ColDeb), Cells(LigFin, ColFin))
Plages.Select
MsgBox "Prés pour effacer les données dans la plage " & Plages.Address(0, 0) & " ?"
For Each vcel In Plages
If vcel.Interior.ColorIndex = 2 Then vcel.Clear
Next vcel
MsgBox "fin de la sequence d'effacement "
End Sub
A+
mijean94
Messages postés
413
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
12 septembre 2024
11
>
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
9 oct. 2016 à 09:46
9 oct. 2016 à 09:46
Bonjour et merci pour la solution, qui bien sur fonctionne très bien.
bien cordialement
bien cordialement
mijean94
Messages postés
413
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
12 septembre 2024
11
>
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
9 oct. 2016 à 10:42
9 oct. 2016 à 10:42
Bonjour,
Encore une petite demande sur le code du post 5.
Je n’arrive pas à comprendre le fonctionnement du code,
J’ai mis des données aux 4 coins de mon tableau pour tester :
Au lancement de la macro, il détecte des données sur les cellules D15 :IU300 ?, normalement il devrait trouver D3:IV302 ou peut-être D3:IU302.
Si je relance le code, il trouve D14 :IU300, puis encore une fois, il trouve D12 :IU300 et ainsi de suite D11:IU300 ...
As tu une solution ou explication STP ?
Bien cordialement
Encore une petite demande sur le code du post 5.
Je n’arrive pas à comprendre le fonctionnement du code,
J’ai mis des données aux 4 coins de mon tableau pour tester :
Au lancement de la macro, il détecte des données sur les cellules D15 :IU300 ?, normalement il devrait trouver D3:IV302 ou peut-être D3:IU302.
Si je relance le code, il trouve D14 :IU300, puis encore une fois, il trouve D12 :IU300 et ainsi de suite D11:IU300 ...
As tu une solution ou explication STP ?
Bien cordialement
Gyrus
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
523
>
mijean94
Messages postés
413
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
12 septembre 2024
9 oct. 2016 à 12:58
9 oct. 2016 à 12:58
Bonjour,
Pour effectuer la recherche des limites avec la propriété Range.End, il faut débuter cette recherche à l'extérieur de la plage à délimiter.
Avec ton exemple, il faut utiliser les lignes 2 et 303 pour définir les limites haute et basse, la colonne C pour la limite gauche.
Par contre, pour la la limite droite, cela pose problème si tu utilises la totalité des colonnes de la feuille.
Tu as donc intérêt à définir clairement cette plage à délimiter.
A+
Pour effectuer la recherche des limites avec la propriété Range.End, il faut débuter cette recherche à l'extérieur de la plage à délimiter.
Avec ton exemple, il faut utiliser les lignes 2 et 303 pour définir les limites haute et basse, la colonne C pour la limite gauche.
Par contre, pour la la limite droite, cela pose problème si tu utilises la totalité des colonnes de la feuille.
Tu as donc intérêt à définir clairement cette plage à délimiter.
A+
mijean94
Messages postés
413
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
12 septembre 2024
11
9 oct. 2016 à 22:10
9 oct. 2016 à 22:10
Bonjour,
J’ai résolut mon problème (post9) en utilisant uniquement le code si dessous, mais le traitement est long :
Comment compléter le code dans le IF pour ajouter en plus de la condition colorIndex = 2 un condition ET s’il y a une donnée à l’intérieure de la cellule ?
Merci pour l'aide.
Bien cordialement
J’ai résolut mon problème (post9) en utilisant uniquement le code si dessous, mais le traitement est long :
Set Plages = Range(Cells(3, 4), Cells(302, 256))
Plages.Select
For Each vcel In Plages
If vcel.Interior.ColorIndex = 2 Then vcel.Clear
Next vcel
Comment compléter le code dans le IF pour ajouter en plus de la condition colorIndex = 2 un condition ET s’il y a une donnée à l’intérieure de la cellule ?
Merci pour l'aide.
Bien cordialement
mijean94
Messages postés
413
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
12 septembre 2024
11
9 oct. 2016 à 22:25
9 oct. 2016 à 22:25
bonjour,
j'ai trouvé la solution avec le code si dessous.
Merci à tous
Bien cordialement
j'ai trouvé la solution avec le code si dessous.
If vcel.Interior.ColorIndex = 2 And vcel <> "" Then vcel.Clear
Merci à tous
Bien cordialement
8 oct. 2016 à 09:20
Merci Gyrus pour ta solution qui fonctionne parfaitement bien et répond donc au point c de mes interrogations.
Aurais-tu une solution pour le point a et b ?
Merci pour vos réponses.
Bien cordialement