Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA Remplacer valeur d'une cellule colorée

Djeje95

XLDnaute Nouveau
Bonjour,

Je suis un peu novice,
Je cherche à remplacer la valeur d'une cellule colorée par une valeur 0
Ma feuille est remplie de la colonne A à CC et de la ligne 1 à 10000.
La valeur de la couleur est 16749054
voici ce que j'ai essayé mais il me manque des étapes:
Sub changer_valeur_couleur_cellule()
Range("A1:CC60000").Select
Dim Cel As Range
For Each Cel In Selection
If NO_Couleur = 16749054 Then Cells.Value = "0"
Next
End Sub

Merci d'avance
 
Solution
Bonsoir le fil

Pas besoin de macro
CTRL+H =>Options / Format

Ce qui donne si vraiment VBA needed
VB:
Sub Macro1()
With Application.FindFormat.Interior
.Pattern = xlSolid: .Color = 16749054
End With
Application.FindFormat.Locked = True
Application.FindFormat.FormulaHidden = False
Cells.FindNext(After:=Cells(1)).Activate
Cells.Replace What:="", Replacement:="0", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=False
End Sub
NB: Mais plus simple avec CTRL+H et plus ergonomique

EDITION: Bonsoir eriiiic (Bing! Collision)
Désolé, je ne t'ai pas vu passé

eriiic

XLDnaute Barbatruc
Bonjour à tous,

avec un .find sur format qui évite de boucler sur toutes les cellules.
Avec la taille de la plage à examiner plus l'écriture en une fois, il y aura un gros gain :
VB:
Sub cherche_Format()
    Dim c1 As Range, pl As Range, adr1 As String
    With Application
        .FindFormat.Clear
        .FindFormat.Interior.Color = 16749054
    End With
    With [A1:CC60000]
        Set c1 = .Find(What:="", SearchFormat:=True)
        If Not c1 Is Nothing Then
            adr1 = c1.Address: Set pl = c1
            Do
                Set c1 = .Find(What:="", After:=c1, SearchFormat:=True)
                If c1.Address <> adr1 Then Set pl = Union(pl, c1)
            Loop While Not c1 Is Nothing And c1.Address <> adr1
            pl.Value = 0
        End If
    End With
End Sub
eric
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Pas besoin de macro
CTRL+H =>Options / Format

Ce qui donne si vraiment VBA needed
VB:
Sub Macro1()
With Application.FindFormat.Interior
.Pattern = xlSolid: .Color = 16749054
End With
Application.FindFormat.Locked = True
Application.FindFormat.FormulaHidden = False
Cells.FindNext(After:=Cells(1)).Activate
Cells.Replace What:="", Replacement:="0", LookAt:=xlPart, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=False
End Sub
NB: Mais plus simple avec CTRL+H et plus ergonomique

EDITION: Bonsoir eriiiic (Bing! Collision)
Désolé, je ne t'ai pas vu passé
 

eriiic

XLDnaute Barbatruc
Parce que j'étais en mode furtif... ;-)
Intéressant avec Ctrl+h, je n'y avais pas pensé.
Chez moi la ligne :
VB:
Cells.FindNext(After:=Cells(1)).Activate
plante.
Têtu je la met en commentaire.
Seulement après avoir fait le boulot, je ne sais pas où il part... Excel ramène le sablier, clignote la fenêtre plusieurs fois, et ça se termine par un 'excel ne répond plus' obligeant à une fermeture brutale...
Je retesterai après un reboot mais je reste pessimiste.
Sur 2019 et w7 tout ça.
eric
 

Staple1600

XLDnaute Barbatruc
Re

Mon Excel 2013 a toussé mais le zéro a fini par gagné.
Mais pas de message d'erreur
Ci-dessous plus de 3 cellules pour tester
VB:
Sub PurpleRain()
Dim i&
Application.ScreenUpdating = False
For i = 1 To 1600
Select Case i Mod 2
Case 0
Columns(i).Cells(1).Resize(Application.RandBetween(1, 1600)).Interior.Color = 16749054
Case Else
End Select
Next
End Sub
 

eriiic

XLDnaute Barbatruc
La ligne ne tombe plus en erreur mais il part toujours dans les choux pour moi.

Si je remplace les Cells par une plage restreinte [A1:C11], là ça fonctionne.
Il doit partir dans une boucle sur toutes les cellules. Bizarre...
eric
 

Staple1600

XLDnaute Barbatruc
Re

Je ne comprends pas ce que tu entends par
"de ne pas passer en mémoire virtuelle".

Je me contente juste d'ouvrir Excel de coller les différents codes VBA et de les exécuter.
(W1064bits XL2013 et 4Go)
 

eriiic

XLDnaute Barbatruc
4 Go c'est peut-être juste.
Quand windows n'a plus assez de ram, il en crée une extension virtuelle sur le disque dur.
Tu imagines tout de suite le coup de frein que ça met, même si c'est un SSD.
Déjà si tu as un SSD tu peux configurer le système pour l'empêcher d'utiliser les HDD, qu'il n'aille que sur le SSD.
Sur le bouton windows tu recherches et lances "Informations système "
Note la ram et la mémoire virtuelle dispos.
Lance la proc excel et surveille si la ram dispo approche de 0 et si tu entames plus la mémoire virtuelle.
Si c'est le cas tu peux aller t'acheter la barette que tu aurais dû prendre au siècle dernier ;-)
eric
 

Staple1600

XLDnaute Barbatruc
Re

Justement pas de SSD
(J'envisage la chose mais chat échaudé craint l'eau froide)
Je viens de faire un systeminfo
Mémoire physique totale: 3 579 Mo
Mémoire physique disponible: 1 139 Mo
Mémoire virtuelle : taille maximale: 7 163 Mo
Mémoire virtuelle : disponible: 3 647 Mo
Mémoire virtuelle : en cours d'utilisation: 3 516 Mo
EDITION: Le même Excel et browser "éteints"
Mémoire physique totale: 3 579 Mo
Mémoire physique disponible: 1 896 Mo
Mémoire virtuelle : taille maximale: 7 163 Mo
Mémoire virtuelle : disponible: 5 192 Mo
Mémoire virtuelle : en cours d'utilisation: 1 971 Mo

PS: Est-ce que je peux te joindre à l'occasion en MP pour continuer la discussion vu que tout ceci n'a rien à voir avec la question du demandeur
 
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…