XL03 VB Agrandissement plage de selection offset gauche & droite
Résolu/Fermé
SpcCwb
Messages postés
65
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
26 novembre 2020
-
Modifié par jordane45 le 7/01/2015 à 13:27
SpcCwb Messages postés 65 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 26 novembre 2020 - 7 janv. 2015 à 15:18
SpcCwb Messages postés 65 Date d'inscription mardi 7 mai 2013 Statut Membre Dernière intervention 26 novembre 2020 - 7 janv. 2015 à 15:18
A voir également:
- XL03 VB Agrandissement plage de selection offset gauche & droite
- Windows 11 barre des taches a gauche - Guide
- Vb cable - Télécharger - Audio & Musique
- 2 ecrans souris de droite a gauche ✓ - Forum Windows
- Vb - Télécharger - Langages
- Combien y a-t-il de bateaux dans la zone de 1500 pixels de large et 500 pixels de haut à partir du coin supérieur gauche de cette image ? - Forum Graphisme
3 réponses
jordane45
Messages postés
38173
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mai 2024
4 665
7 janv. 2015 à 13:27
7 janv. 2015 à 13:27
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
Mike-31
Messages postés
18318
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
26 avril 2024
5 078
7 janv. 2015 à 13:36
7 janv. 2015 à 13:36
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
SpcCwb
Messages postés
65
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
26 novembre 2020
1
Modifié par SpcCwb le 7/01/2015 à 14:40
Modifié par SpcCwb le 7/01/2015 à 14:40
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"?
jordane45
Messages postés
38173
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mai 2024
4 665
7 janv. 2015 à 14:45
7 janv. 2015 à 14:45
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
SpcCwb
Messages postés
65
Date d'inscription
mardi 7 mai 2013
Statut
Membre
Dernière intervention
26 novembre 2020
1
7 janv. 2015 à 15:18
7 janv. 2015 à 15:18
Plus qu'une chose à dire: PARFAIT, MERCI BEAUCOUP vous deux!
7 janv. 2015 à 14:41