[VBA] Supression d'une ligne et décalage vers le haut

pitipilot Messages postés 112 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 14 mai 2021 - 17 juin 2011 à 10:46
pitipilot Messages postés 112 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 14 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

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
pitipilot Messages postés 112 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 14 mai 2021 1
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'.
    
0
Rejoignez-nous