Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Effacer si

11 réponses
Avatar
Denys
Bonjour =E0 tous,

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

Voici o=F9 j'en suis....

Sub EnleverLignes()
Application.ScreenUpdating =3D False

Sheet1.Select

With ActiveSheet


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

Ca ne fonctionne pas...

J'ai aussi essay=E9 ce qui suit:

Sub EnleverLignes()
Application.ScreenUpdating =3D False

Sheet1.Select

With ActiveSheet


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

For i =3D Lastrow To 2 Step -1
If ActiveCell.Row =3D 10 Then Exit Sub
If Cells(i, 2).Value =3D "" 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=E9e ?

Merci pour votre temps
Denys

10 réponses

1 2
Avatar
MichD
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
---------------------------------------------------------------
Avatar
Denys
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
Avatar
Denys
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
Avatar
MichD
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
---------------------------------------------------------------
Avatar
Jacquouille
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
Avatar
Denys
Bonjour Denis,

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

Merci

Denys
Avatar
Denys
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
Avatar
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
---------------------------------------------------------------
Avatar
Denys
On Feb 15, 12:15 pm, "MichD" wrote:
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
Avatar
MichD
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
---------------------------------------------------------------
1 2