Effacer si

Le
Denys
Bonjour à tous,

Par VBA, comment pourrais-je dire:
pour chaque cellule dans la colonne B11:B?, si la cellule = "" alors
la cellule correspondante dans les colonnes C,D et E doivent aussi
être = ""

Voici où j'en suis.

Sub EnleverLignes()
Application.ScreenUpdating = False

Sheet1.Select

With ActiveSheet


For Each cell In Range("B11:B2000")
If cell.Value = "" Then
ActiveCell.Offset(0, 1).Value = ""
ActiveCell.Offset(0, 2).Value = ""
ActiveCell.Offset(0, 3).Value = ""
ActiveCell.Offset(0, 4).Value = ""
End If
Next
end with
End Sub

Ca ne fonctionne pas

J'ai aussi essayé ce qui suit:

Sub EnleverLignes()
Application.ScreenUpdating = False

Sheet1.Select

With ActiveSheet


Dim Lastrow As Integer, i As Integer
Lastrow = Cells.Find("*", [A1000], , , xlByRows,
xlPrevious).Activate
Cells(ActiveCell.Row, 1).Activate

For i = Lastrow To 2 Step -1
If ActiveCell.Row = 10 Then Exit Sub
If Cells(i, 2).Value = "" Then
Cells(i, 3).ClearContents
Cells(i, 4).ClearContents
Cells(i, 5).ClearContents
Cells(i, 6).ClearContents


End If
Next
End With
'Range("A11").Select

End Sub

Fonctionne pas non plus

Auriez-vous une idée ?

Merci pour votre temps
Denys
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #25224652
Bonjour,

Ceci fonctionne. Assure-toi que ta feuille n'est pas protégée.
Si ça ne fonctionne pas, quel est le message d'erreur?
'---------------------------------
Sub test()
Dim Rg As Range, C As Range
With Worksheets("Feuil1") 'Nom feuille à adapter
Set Rg = .Range("B11:B" & .Range("B65536").End(xlUp).Row)
End With
For Each C In Rg
If C.Value = "" Then
C.Offset(, 1).Resize(, 3) = ""
End If
Next
End Sub
'---------------------------------

Si tes cellules sont vraiment vides et ne sont pas le résultat
d'une formule qui retourne "", il y a ceci de beaucoup plus
rapide qu'une boucle :

'------------------------------------------
Sub test1()
Dim Rg As Range, C As Range
With Worksheets("Feuil1") 'Nom feuille à adapter
Set Rg = .Range("B11:B" & .Range("B65536").End(xlUp).Row)
End With
On Error Resume Next
Application.ScreenUpdating = True
Application.EnableEvents = True
Rg.SpecialCells(xlCellTypeBlanks).Offset(, 1).Resize(, 3) = ""
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'------------------------------------------


MichD
---------------------------------------------------------------
Denys
Le #25224752
Bonjour Denis,

En fait, il est possible que les cellules de la colonne B soient
vides, mais pas celles des colonnes C,D et E.... Ce qu'il me faut,
c'est trouver la dernière ligne utilisée et si la cellule B
correspondante est vide, alors les celluleas des colonnes C,D et E
doivent aussi être vides.

Le contenu des cellules provient de "dropdown list". La feuille n'est
pas protégée.

En fait ce serait un peu comme suit, si je prends ta réponse:

Sub test()
Dim Rg As Range, C As Range
With Worksheets("Feuil1") 'Nom feuille adapter
Set Rg = .Range("B11:B" & .Cells.Find("*", [A1000], , , xlByRows,
xlPrevious)) ' La dernière cellule occupée
End With
For Each C In Rg
If C.Value = "" Then
C.Offset(, 1).Resize(, 3) = ""
End If
Next
End Sub

Est-ce que c'est compréhensible?

Denys
Denys
Le #25224742
Rebonjour Denis
Si je lui attibue une plage précise
Set Rg = .Range("B11:B80")

Ca fonctionne bien..... Il n'y a rien après la ligne 15 dans la
colonne B, mais des écritures apparaissent dans les colonnes C,D et E
jusqu'à la ligne 42.... Mon problème, c'est que je ne voudrais pas
prendre une plage trop large ou trop petite...

Denys
MichD
Le #25224842
Si j'ai compris ce que tu veux :

'--------------------------------------
Sub test()
Dim Rg As Range, C As Range, DerLig As Long
With Worksheets("Feuil1") 'Nom feuille à adapter
With .Range("B11:B" & .Range("B65536").End(xlUp).Row)
DerLig = .Find("", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With
Set Rg = .Range("B11:B" & DerLig)

End With
Application.ScreenUpdating = False
Application.EnableEvents = False
For Each C In Rg
If C.Value = "" Then
xx = C.Address
cdd = C.Offset(, 1).Resize(, 3).Address
C.Offset(, 1).Resize(, 3).Value = ""
End If
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'--------------------------------------

MichD
---------------------------------------------------------------
Jacquouille
Le #25225032
Donc l'astuce c'est de trouver la dernière cellule occupée en col B, C, D et
E ... ?
Pourquoi pas un test sur la ligne entière , à savoir si la ligne est vide ?


Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Denys" a écrit dans le message de groupe de discussion :


Rebonjour Denis
Si je lui attibue une plage précise
Set Rg = .Range("B11:B80")

Ca fonctionne bien..... Il n'y a rien après la ligne 15 dans la
colonne B, mais des écritures apparaissent dans les colonnes C,D et E
jusqu'à la ligne 42.... Mon problème, c'est que je ne voudrais pas
prendre une plage trop large ou trop petite...

Denys
Denys
Le #25225022
Bonjour Denis,

J'obtiens un Run Time erreur 91.... Object variable or With block
variable not set à la hauteur de DerLig

Merci

Denys
Denys
Le #25225082
A B
C D
2013/05/01 Carl Manitoba Correct amount
2013/05/02 Pierre Manitoba Correct amount
2013/05/03 Paul Manitoba Correct amount
2013/05/04 Manitoba Correct amount
2013/05/05 Manitoba Correct amount
2013/05/06 Manitoba Correct amount
2013/05/07 Manitoba Correct amount
2013/05/08 Manitoba Correct amount
2013/05/09 Manitoba Correct amount
2013/05/10 Manitoba Correct amount
2013/05/11 Manitoba Correct amount
Manitoba
Manitoba

Ce qu'il faut, c'est que tout soit effacé après la troisième ligne ca r
il n'y a plus de noms d'inscrits.
Pour l'instant, Excel ne prend que la plage de la colonne B...jusqu'à
la fin des incriptions en B, donc ici B11:B14....il n'y a donc rien à
effacer en C et D.... faudrait que le plage se termine avec la
dernière ligne de la colonne C dans ce cas-ci...

Le code que tu m'as donné semble pourtant le faire, mais quand je
l'applique étape par étape, il ne regarde que trois lignes....

Denys
MichD
Le #25225272
Il va falloir que tu recommences tes explications, car
il est clair pour moi que je n'ai rien compris de ta requête.



MichD
---------------------------------------------------------------
Denys
Le #25225262
On Feb 15, 12:15 pm, "MichD"
Il va falloir que tu recommences tes explications, car
il est clair pour moi que je n'ai rien compris de ta requête.

MichD
---------------------------------------------------------------



Non, je ne crois pas.....je suis persuadé que tu m'as fourni une bonne
réponse.....
Je vais refaire mes devoirs, il y a quelque chose qui m'échappe, car
ça devrait fonctionner.....
Il y a un problème de plage reconnue par excel qui ne prend que la
colonne B au lieu de prendre la plage à partir de la dernière cellule
de la colonne C,D ou E...

Je vais d'abord retravailler avec ce que tu m'as donné....Tu en as
fais beaucoup....

Merci pour ton temps....S'il y a de quoi, je reviendrai plus tard

Denys
MichD
Le #25225362
Est-ce que ceci est mieux?

'--------------------------------------
Sub test()
Dim Rg As Range, C As Range, DerLig As Long
With Worksheets("Feuil1") 'Nom feuille à adapter
With .Range("B:E")
DerLig = .Find("*", LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With
Set Rg = .Range("B11:B" & DerLig)

End With
Application.ScreenUpdating = False
Application.EnableEvents = False
For Each C In Rg
If C.Value = "" Then
C.Offset(, 1).Resize(, 3).Value = ""
End If
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'--------------------------------------




MichD
---------------------------------------------------------------
Publicité
Poster une réponse
Anonyme