[VBA] Supression d'une ligne et décalage vers le haut
pitipilot
Messages postés112Date d'inscriptionmercredi 19 mai 2010StatutMembreDernière intervention14 mai 2021
-
17 juin 2011 à 10:46
pitipilot
Messages postés112Date d'inscriptionmercredi 19 mai 2010StatutMembreDernière intervention14 mai 2021
-
20 juin 2011 à 08:07
Bonjour, j'effectue des requêtes SQL sur une base que j'affiche dans un tableau Excel. J'aimerais supprimer toute les lignes contenant un mot clé et décaler celles du dessous vers le haut :
Derniere_ligne = Columns("B:B").Find("*", Range("B1"), , , xlByRows, xlPrevious).Row
For b = 12 To Derniere_ligne
sMessage = InStr(Range("C" & b).Value, "\MESSAGE'.")
If sMessage <> 0 Then Range(b & b).ClearContents
Range("A:A,B:B,C:C,D:D,E:E,F:F").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp
Next
Vous l'aurez compris l'instruction après le THEN Range(b & b).ClearContents ne fonctionne absolument pas, quel est donc la syntaxe à utiliser ?
Du coup l'instruction suivante (Range("A:A,B:B,C:C,D:D,E:E,F:F").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp) va t'elle fonctionner ?
Bonne journée
A voir également:
[VBA] Supression d'une ligne et décalage vers le haut
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 17 juin 2011 à 12:48
Salut
"Range(b & b).ClearContents"
En supposant que VBA reconnaisse b comme une chaine, "b & b" ressemblerait à "1212" si b vaut 12.
Évidemment, ça ne ressemble pas à une adresse de cellule.
Maintenant, il faudrait savoir quelle zone tu veux nettoyer.
Si c'est toute la ligne, essaye Row(b).ClearContents (ou Rows, je ne sais plus)
Si tu veux spécifier un Range, il te suffit de créer une chaine qui ressemble à un range, exemple Range("C" & b & ":F" & b).ClearContents
Quant à la suppression des lignes vidées, il est inutile de le demander avant la fin de la boucle, sinon, ta variable Derniere_ligne n'aura plus de sens.
Place donc ta ligne de Delete après le Next.
NB :
Range("A:A,B:B,C:C,D:D,E:E,F:F")
est la même chose que
Range("A:F")
en plus court
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
pitipilot
Messages postés112Date d'inscriptionmercredi 19 mai 2010StatutMembreDernière intervention14 mai 20211 20 juin 2011 à 08:07
Merci Jack ça fonctionne parfaitement, voilà le code :
'début supression des champs contenant \MESSAGE'.
For b = 12 To Derniere_ligne
sMessage = InStr(Range("C" & b).Value, "\MESSAGE'.")
If sMessage <> 0 Then Rows(b).Delete 'Si champ contient \MESSAGE'. alors supprimer la ligne
Next
'Fin supression des champs contenant \MESSAGE'.