Effacer cellules entre cellules vides

Bonjour le forum

Voici mon souci

Je souhaiterais effacer des groupes de cellules dans une colonne suivant les conditions ci-dessous:

  • les cellules se trouvent entre deux cellules vides
  • La première cellule en dessous de la première cellule vide doit contenir "BON"

Je vous remercie par avance pour votre aide.

Bonne soirée

Bonjour,

exemple :

Sub eff()
    Dim c As Range
    Set c = [B:B].Find("BON", LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing And c.Offset(1) <> "" Then Range(c, c.End(xlDown)).ClearContents
End Sub

eric

Bonjour Éric

Merci pour ta réponse rapide.

Je testerai ton code dès que possible.

Bonne journée à toi et au forum.

Bonjour à tous

Eric

J'ai testé le bout de code et j'ai un message d'erreur "variable objet ou variable de bloc with non définie"

au niveau de la ligne:

If Not c Is Nothing And c.Offset(1) <> "" Then

Voici ce que dit l'aide à propos de l'erreur:

Respécifiez une référence pour la variable objet. Par exemple, utilisez une nouvelle instruction Set pour définir une nouvelle référence à l’objet.

Je ne trouve pas la solution, peux tu m'aiguiller.

Encore merci

Bonjour,

J'avais testé...

Il faudrait un fichier (réduit) avec l'erreur pour voir.

eric

Bonjour Eric, le forum

En pièce jointe un extrait de mon fichier.

Bonne journée

Bonjour,

Tu aurais pu faire l'effort de mettre le code.

Je ne pensais pas que tu la lancerais sans avoir écrit BON qq part...

Sub eff()
    Dim c As Range
    Set c = [A:A].Find("BON", LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
        If c.Offset(1) <> "" Then Range(c, c.End(xlDown)).ClearContents
    End If
End Sub

eric

eric

j'ai testé le code, il n'y a plus de message d'erreur mais par contre rien ne se passe.

Je continue à fouiller.

merci pour ton attention

Entre les 2 tu es passé de la colonne B à la A, j'ai fait en conséquence.

eric

suite

ça commence à venir.

J'ai modifié la ligne

 Set c = [B:B].Find("BON", LookIn:=xlValues, lookat:=xlWhole)

qui devient

Set c = [A:A].Find("*BON*", LookIn:=xlValues, lookat:=xlWhole)

Il n'y a pas de boucle, il faut lancer la macro pour chaque groupe à effacer.

Je vais tacher de m'en sortir.

A suivre

Ce n'était pas vraiment dit explicitement.

Sub eff()
    Dim c As Range
    Set c = [A:A].Find("BON*", LookIn:=xlValues, lookat:=xlWhole)
    While Not c Is Nothing
        If c.Offset(1) = "" Then c.ClearContents Else Range(c, c.End(xlDown)).ClearContents
        Set c = [A:A].FindNext(c)
    Wend
End Sub

eric

Suite

Avec une boucle c'est mieux mais tout n'est pas encore parfait.

Voici le code modifié:

For c = 1 To 65000
   Set c = [A:A].Find("*BON*", LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
        If c.Offset(1) <> "" Then Range(c, c.End(xlDown)).ClearContents
    End If
    c = c + 1
 Next c

La macro fonctionne, les bonnes lignes sont supprimées mais malgré tout j'ai

un message d'erreur "incompatibilité de type".

Un "On Error Resume Next" placé avant c = c + 1 supprime le message mais ne m'explique pas

le pourquoi.

A suivre

c est un range, pas un numérique.

Teste le code que je t'ai mis au-dessus.

eric

Pardon éric je n'ai pas vu ta réponse en page 2.

J'ai testé le dernier code mais rien ne se passe.

Rajoute l'* oubliée devant BON

ou plutôt remplace la ligne par :

Set c = [A:A].Find("BON", LookIn:=xlValues, lookat:=xlPart)

Je n'avais pas vu que BON était en fin de texte.

Soit précis et donne tous les détails quand tu fais une demande.

eric

Ce coup ci c'est bon.

Le * manquant remis en place a tout changé.

Merci éric pour ta patience et ton efficacité.

salut eric,

peut être que tu peux m'aider.

sur ce fichier, l'action sur le bouton doit effacer les cellules vides et tout faire remonter.

Le problème est que pour que ça fonctionne, il faut appuyer plusieurs fois sur le bouton.

je joins le fichier

merci à toi

12danntrier.xlsm (17.88 Ko)

Bonjour,

démarre ta propre question plutôt que de te mettre sur une terminée depuis 5 mois.

Tu auras plus de chances d'avoir des réponses.

eric

Rechercher des sujets similaires à "effacer entre vides"