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
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 '------------------------------------------
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
'------------------------------------------
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 '------------------------------------------
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
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
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
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
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...
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
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 '--------------------------------------
'--------------------------------------
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
'--------------------------------------
'-------------------------------------- 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 '--------------------------------------
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
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 :
ce977f78-34b2-4ecb-864a-31106c29f4bd@5g2000yqz.googlegroups.com...
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...
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
Bonjour Denis,
J'obtiens un Run Time erreur 91.... Object variable or With block variable not set à la hauteur de DerLig
Merci
Denys
Bonjour Denis,
J'obtiens un Run Time erreur 91.... Object variable or With block
variable not set à la hauteur de DerLig
J'obtiens un Run Time erreur 91.... Object variable or With block variable not set à la hauteur de DerLig
Merci
Denys
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
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....
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
Il va falloir que tu recommences tes explications, car il est clair pour moi que je n'ai rien compris de ta requête.
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
On Feb 15, 12:15 pm, "MichD" <michde...@hotmail.com> 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.
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
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
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 '--------------------------------------
'--------------------------------------
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
'--------------------------------------
'-------------------------------------- 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 '--------------------------------------