Remplacement de toute cellules non vide par une même valeur

Kiriko

XLDnaute Occasionnel
Bonjour,
Je cherche un système (par macro ?) qui permettrait de remplacer toute cellule non vide d'une plage donnée par une même valeur ("X").
La plage pouvant comporter jusqu'à 15000 cellules (dont souvent 2 à 3% [soit 500 max] seulement peuvent être non vides.
Si ça peut accélérer l'affaire, ces cellules à "remplacer" contiennent exclusivement des valeurs numérique (différentes de zéro).
Est-il possible de trouver une solution qui ne soit pas trop longue en traitement ?
Je pense qu'il n'est pas utile de joindre un fichier, mais dites-moi si c'est nécessaire, je le posterais.
Merci par avance !
 

JCGL

XLDnaute Barbatruc
Re : Remplacement de toute cellules non vide par une même valeur

Bonjour à tous,
Salut Papou,

Après Sélection d'une plage, peux-tu essayer ceci :

VB:
Sub Remplace()
    Dim Cel As Range
    For Each Cel In Selection
        If Cel > 0 Then Cel = "X"
    Next Cel
End Sub

A+ à tous
 

Staple1600

XLDnaute Barbatruc
Re : Remplacement de toute cellules non vide par une même valeur

Bonjour à tous____________________________Re JCGL ;)

Une autre possibilité
PS: test Ok sur mon PC
Code vb:
Sub substX()
Dim pl As Range
Set pl = Selection.SpecialCells(xlCellTypeConstants)
On Error Resume Next
With pl
.Value = "X"
End With
End Sub
 

Kiriko

XLDnaute Occasionnel
Re : Remplacement de toute cellules non vide par une même valeur

Bonjour Paritec, bonjour JCGL,
Merci beaucoup, cela fonctionne parfaitement...
Est-il possible de définir "dynamiquement" la longueur de la plage avant d'appliquer le code ?
Elle débuterais en BK4:DG4 et "descendrait" jusqu'à la dernière ligne non vide...
Fichier joint avec le code de JCGL

Merci encore !
 

Pièces jointes

  • Remplacement valeurs.xlsm
    82.5 KB · Affichages: 110

Staple1600

XLDnaute Barbatruc
Re : Remplacement de toute cellules non vide par une même valeur

Re

Kiriko
Je pue de la gue-le ... :rolleyes: ou tes lunettes sont HS ?

Une variante avec mise en forme
Code vb:
Sub substXbis()
Dim pl As Range
Set pl = Selection.SpecialCells(xlCellTypeConstants)
On Error Resume Next
With pl
.Value = "X": .Font.Bold = True: .Interior.ColorIndex = 6
.HorizontalAlignment = -4108: .VerticalAlignment = -4108
End With
End Sub




substx.png
 

Kiriko

XLDnaute Occasionnel
Re : Remplacement de toute cellules non vide par une même valeur

Bonjour Staple1600 !
Désolé, je n'avais pas mis à jour le fil avant de répondre....
Avec ta solution, toute les cellules de la sélection de mon fichier sont remplacées, même les vides....
Mauvais "format" de mes cellules ?
Pour info, c'est un collage de valeur ou les cellules initiales sont des formules, et qui renvoient "" sur les cellules vides...
Mais je bosse bien sur le collage en valeur de ces cellules... Pas sûr d'être clair...
 

JCGL

XLDnaute Barbatruc
Re : Remplacement de toute cellules non vide par une même valeur

Bonjour à tous,
Re L'Agrafe,

Pour répondre strictement à notre ami :

VB:
Sub Remplace()
    Dim Cel As Range
    For Each Cel In Feuil22.Range("BK4:DG206")
        If Cel > 0 Then Cel = "X"
    Next Cel
    Range("BK4").Select
End Sub

A+ à tous
 

Kiriko

XLDnaute Occasionnel
Re : Remplacement de toute cellules non vide par une même valeur

Merci JCGL, j'avais effectivement adapté ton code en ce sens dans le fichier joint dans le message #5.
Comme évoqué, l'idéal serait de sélectionner "dynamiquement" la plage
Code:
BK4:DG(x)
où le (x) serait la dernière ligne non complètement vide. A moins que vous pensiez que le gain de temps serait négligeable ? Dans certains cas, cela pourrait descendre jusqu'à la ligne 2000, mais souvent pas plus loin que 206...
Merci encore !!!
 

chris

XLDnaute Barbatruc
Re : Remplacement de toute cellules non vide par une même valeur

Bonjour
Bise à JGGL, Staple, Paritec

Sauf erreur de ma part on doit pouvoir le faire ainsi sans macro

  • Sélectionner une cellule à 0 (BK4 ou une voisine)
  • CTRL * : sélectionne toute la zone jusqu'à DH
  • Shift flèche gauche si DH doit être désélectionné
  • F5
  • Cellules : cocher Différence par ligne
  • Taper X puis CTRL entrée
 

Kiriko

XLDnaute Occasionnel
Re : Remplacement de toute cellules non vide par une même valeur

Merci JCGL,
Je suis désolé, ta réponse me signifie que je me suis mal expliqué....
En fait, je cherche à ce que le "2000" soit "dynamique"... en fonction des lignes vides.... Je pensais à des "xlup" ou "xldown", mais je ne sais pas l'adapter...
Ce que je n'ai pas précisé, c'est que la 1ère ligne vide de la plage est aussi la dernière... C'est à dire qu'il n'y a aucune ligne complètement vide jusqu'à la dernière (qui peut être la ligne 10, où la ligne 2000, ou la ligne 150,...
Merci encore !
 

Kiriko

XLDnaute Occasionnel
Re : Remplacement de toute cellules non vide par une même valeur

Décidément, je devrais vraiment actualiser avant d'envoyer un nouveau message...
Bonjour chris !
Effectivement, ça fonctionne impeccablement...
Avec l'enregistreur de macros, ça donne :
HTML:
Sub TestChris()
    Range("BK4:DG2000").Select
    Selection.RowDifferences(ActiveCell).Select
    Selection.FormulaR1C1 = "X"
    Range("BK4").Select
End Sub
Et l'exécution est très rapide (quasi instantanée) !!
Merci beaucoup chris !
Merci beaucoup JCGL, Staple, Paritec !!
 

Staple1600

XLDnaute Barbatruc
Re : Remplacement de toute cellules non vide par une même valeur

Re à tous, Bonjour Chris ;)

L'idée de chris dans la macro de Kiriko mais sans les Select ;)
Code:
Sub TestChrisII()
With Range("BK4:DG2000").RowDifferences([BK4])
     .Value = "X"
End With
Range("BK4").Select
 End Sub
 
Dernière édition:

Kiriko

XLDnaute Occasionnel
Re : Remplacement de toute cellules non vide par une même valeur

Encore merci Staple1600 !
Ultime question :
dans
Code:
.RowDifferences([BK4])
Au lieu de nommer BK4, ne peut-on pas spécifier une valeur (vide)?
Car il peut arriver que BK4 ne soit pas vide...
J'ai essayé plusieurs syntaxes sans succès....
 

Discussions similaires

Statistiques des forums

Discussions
312 164
Messages
2 085 872
Membres
103 007
dernier inscrit
salma_hayek