XL03 VB Agrandissement plage de selection offset gauche & droite
Résolu
SpcCwb
Messages postés
65
Date d'inscription
Statut
Membre
Dernière intervention
-
SpcCwb Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
SpcCwb Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- XL03 VB Agrandissement plage de selection offset gauche & droite
- Les textes ne doivent pas être en retrait à droite et à gauche - Guide
- Windows 11 barre des taches a gauche - Guide
- Vb - Télécharger - Langages
- Son plus fort à gauche qu'à droite ecouteur bluetooth - Forum Huawei
- Barre droite clavier - Forum Windows
3 réponses
Bonjour,
1 - Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
2 -
1 - Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
2 -
Sub toto() For Each c In Range("D2:D787") If c.Value = "" Or c.Value = 0 Then Range(c.Offset(, -3), c.Offset(, 1)).Select Selection.Delete Shift:=xlUp End If Next End Sub
SpcCwb
Messages postés
65
Date d'inscription
Statut
Membre
Dernière intervention
1
Désolé jordane, un oubli de ma part...
Bonjour,
Le problème est que ton code s'arrêtera sur ta dernière cellule de ta sélection, pour que le code s'arrête sur la première cellule vide ajoute un exit sub
Range(c(1, 1), c(1, -1)).Select
Exit Sub
Le problème est que ton code s'arrêtera sur ta dernière cellule de ta sélection, pour que le code s'arrête sur la première cellule vide ajoute un exit sub
Range(c(1, 1), c(1, -1)).Select
Exit Sub
J'ai essayé ton code Mike, alors le coup du Exit Sub n'est pas nécessaire car une cellule vide dans la colonne D ne signifie pas celles qui suivent le sont également.
Donc pour faire ce que je décris dans ma problématique ce code fonctionne très bien:
En revanche ça soulève un autre problème, lors de la suppression de la ligne en cas de cellule c vide, la ligne c+1 remonte d'un cran (logique) et VBA continue donc à lire le code et passe sur Next c (logique encore une fois), le problème c'est que du coup la cellule c+1 n'est pas traité par le code...
Pour être plus claire, admettons que la première cellule vide c soit en D1, les cellules D2 et D3 étant vide aussi (ce que je souhaite serait donc que ces 3 lignes soient supprimées...). Le code commence, la cellule D1 qui correspond donc à c1 (au niveau du compteur du For) est supprimée, les cellules D2 et D3 montent donc d'une ligne chacune et se retrouvent respectivement en D1 et D2 ...or la prochaine cellule c, la c2 (toujours au niveau du compteur du For) va correspondre à la cellule D2 qui sera à son tour supprimée, ce qui nous laisse avec la cellule D1 (anciennement D2) qui est pourtant vide.
Une idée sur le code qui me permettrait de traité ces cellules "oubliées"?
Donc pour faire ce que je décris dans ma problématique ce code fonctionne très bien:
For Each c In range("D2:D787")
If c.Value = "" Or c.Value = 0 Then
range(c(1, -2), c(1, 2)).Select
Selection.Delete Shift:=xlUp
End If
Next c
En revanche ça soulève un autre problème, lors de la suppression de la ligne en cas de cellule c vide, la ligne c+1 remonte d'un cran (logique) et VBA continue donc à lire le code et passe sur Next c (logique encore une fois), le problème c'est que du coup la cellule c+1 n'est pas traité par le code...
Pour être plus claire, admettons que la première cellule vide c soit en D1, les cellules D2 et D3 étant vide aussi (ce que je souhaite serait donc que ces 3 lignes soient supprimées...). Le code commence, la cellule D1 qui correspond donc à c1 (au niveau du compteur du For) est supprimée, les cellules D2 et D3 montent donc d'une ligne chacune et se retrouvent respectivement en D1 et D2 ...or la prochaine cellule c, la c2 (toujours au niveau du compteur du For) va correspondre à la cellule D2 qui sera à son tour supprimée, ce qui nous laisse avec la cellule D1 (anciennement D2) qui est pourtant vide.
Une idée sur le code qui me permettrait de traité ces cellules "oubliées"?
t VBA continue donc à lire le code et passe sur Next c (logique encore une fois), le problème c'est que du coup la cellule c+1 n'est pas traité par le code...
Oui c'est normal..
Il faut donc faire ta boucle en partant du bas et en remontant....
Sub toto() Dim L as Long Dim c as Range For L = 787 to 2 step -1 Set c = Cells(L,"D") If c.Value = "" Or c.Value = 0 Then Range(c.Offset(, -3), c.Offset(, 1)).Select Selection.Delete Shift:=xlUp End If Next End Sub