Remplacer les 0 par la case précédente

  • Initiateur de la discussion Pika
  • Date de début
P

Pika

Guest
Bonjour à vous.
Malgré mes recherches sur le forum, je n'ai pas trouvé (et pas su adapté) ce que je voulais.
Ne pouvant pas poster de fichier, je vais ecrire mon code.

Je voudrais donc remplacer tout les zeros d'une plage de données ( B7:S10086) par la valeur de la case précédente ( étant donné que ce ne sera pas un zero vu que la macro aura deja remplacé la valeur :p).

Sub supprimer_zero()
Range('B7').Select
For j = 1 To 18
Columns(j).Select
Cells(7, j).Select
For i = 1 To Cells(10086, j).End(xlUp).Row
If ActiveCell.Value = '0' Then
Range(i, j).Value = Range(i - 1, j).Value
Else
Selection.Offset(1, 0).Select
End If
Next i
Next j
End Sub

A noter aussi que je n'ai pas encore créé la vérification pour la premiere ligne, car au dessus (ligne6) il y a des noms et il faudra donc copier la valeur suivante si ce n'est pas un zero ... mais ca je devrais pouvoir le faire une fois que j'aurais la syntaxe :D.

Pettite précision : Je n'ai jamais fait de VBA, et je suis sous Excel 2002.

Merci de votre aide.
 

2passage

XLDnaute Impliqué
Bonjour,

ce code devrait convenir a ton besoin :

Code:
Private Sub supprime_zero()
Application.ScreenUpdating = False
For j = 1 To 18
    For i = 7 To 10086
        Cells(i, j).Select
        If ActiveCell.Value = 0 Then
            ActiveCell.Value = ActiveCell.Offset(-1, 0).Value
        End If
    Next i
Next j
Application.ScreenUpdating = True
End Sub

On te laisse chercher pour la ligne 6 ou tu veux le code ?

A+

Edit : départ depuis la ligne 7 :p
Edit 2 : héhé .. doublé Robert, mais bon... c'est lui qui a raison : son code est commenté...

Message édité par: 2passage, à: 28/06/2005 11:41
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Pika,

Le code ci-dessous conviendra mieux si j'ai bien saisi ton problème :

Sub supprimer_zero()
Dim cel As Range 'déclare la variable cel
Dim j As Byte 'décalre la variable j

For j = 1 To 18 'boucle sur 18 colonnes
'boucle sur la plage J7:J_dernière_éditée
For Each cel In Range(Cells(7, j), Cells(10086, j).End(xlUp))
'Attention ! Tu considèrais ton zéro comme du texte !
'Il ne faut pas de guillemets pour les nombres...
If cel.Value = 0 Then 'condition : si la cellule égale zéro
cel.Value = cel.Offset(-1, 0).Value 'prend la valeur de la cellule du dessus
End If 'fin de la condition
Next cel 'prochaine cellule de la plage
Next j 'prochaine colonne
End Sub

Édition

Bonjour 2passage on était synchro... mais t'es passé devant...


Message édité par: Robert, à: 28/06/2005 11:38
 

mutzik

XLDnaute Barbatruc
Bonjour Pika,

ton code est tout à fait correct sauf :

If ActiveCell.Value = '0' Then

cette ligne ne va pas rechercher la VALEUR 0 mais le TEXTE 0 puisque tu le mets entre ''

enleves les '' et cela devrait fct ok

et zut, pas raffraichi , comme d'hab

bonjour à tous et bonne journée

Message édité par: mutzik, à: 28/06/2005 11:40
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, le forum,

Juste pour embêter Mutzik !
tu es sûr que Range(i, j).Value = Range(i - 1, j).Value ça marche...

Je profite de cette petite pique pour te féliciter en live pour le Chef-d'œuvre de ta 100ème. À mon humble avis on a rien fait de mieux...


Édition

M... C'est mon 400ème et j'ai rien préparé... Quel naze !

Message édité par: Robert, à: 28/06/2005 11:51
 
P

Pika

Guest
Je vous remercie pour vos réponses :D.
Effectivement, j'ai fait beaucoup d'erreurs que j aurais du corriger moi meme ( comme le texte...) mais on dira queje suis fatigué :D.

Pour ce qui est de la vérification, je préfère chercher un peu :D, je reviendrai cet apres midi si je n'y suis pas arrivé.

Encore merci à vous tous.

Pika
 

Discussions similaires

Réponses
4
Affichages
401

Statistiques des forums

Discussions
314 450
Messages
2 109 721
Membres
110 551
dernier inscrit
Khyolyanna