Supprimer une ligne sans laisser à vide

Bonjour à tous!,

Voilà, le titre dit à peu près tout... Sauf que j'ai eu beau chercher, je n'ai pas trouvé la solution à mon problème, quelle tristesse!!

Alors j'ai un bouton qui doit servir à identifier une ligne dans mon tableau avec 2 infos données et qui, par la suite, doit supprimer cette ligne (La supprimer et non pas la rendre vide : je ne veux pas qu'il reste une ligne vide)... Je croyais que le code suivant (et les essais précédents... ) ferait l'affaire mais il semble bien que non... Qu'est-ce que je fais de mal cette fois? Quelqu'un peut m'aider?

Private Sub CommandButton2_Click()
i = 0
id = UserForm1.TextBox1.Value

    If Cells(i + 1, 1).Value = id And Cells(i + 1, 11).Value = 2 Then

        Feuil1.Rows(i + 1).Delete

    End If
End Sub

Merci d'avance

Bonsoir,

vous pouvez essayer cela :

chantalc33 a écrit :

Bonjour à tous!,

Voilà, le titre dit à peu près tout... Sauf que j'ai eu beau chercher, je n'ai pas trouvé la solution à mon problème, quelle tristesse!!

Alors j'ai un bouton qui doit servir à identifier une ligne dans mon tableau avec 2 infos données et qui, par la suite, doit supprimer cette ligne (La supprimer et non pas la rendre vide : je ne veux pas qu'il reste une ligne vide)... Je croyais que le code suivant (et les essais précédents... ) ferait l'affaire mais il semble bien que non... Qu'est-ce que je fais de mal cette fois? Quelqu'un peut m'aider?

Private Sub CommandButton2_Click()
i = 0
id = UserForm1.TextBox1.Value

    If Cells(i + 1, 1).Value = id And Cells(i + 1, 11).Value = 2 Then

        Feuil1.Rows(i + 1).Delete Shift:=xlUp ' il faut préciser qu'il faut remonter le reste du tableau

    End If
End Sub

Merci d'avance

@ bientôt

LouReeD

Bonjour LouReeD,

Merci pour le complément de code, mais il ne se passe absolument rien. La ligne ne se vide pas et ne se supprime pas...

... entireRow.delete ...

Déjà essayer... Rien à faire, ne fonctionne pas...

Bonsoir Chantalc33,

Je suis plus que débutant, mais j'ai trouvé ça sur le site, et ma fois, je trouve que c'est pas mal..

https://www.blog-excel.com/gerer-doublons-et-lignes-vides/

bon courage

Oui, c'est très bien. Le problème c'est que je ne vois pas comment l'intégré dans mon code à moi et ajouter mes propres critères pour définir quelle ligne doit être supprimée... Alors je suis toujours au point de départ... Impossible de supprimer la ligne.

Bonjour,

Normalement du point vue de la syntaxe le code est correct est suffisant : C'est donc qu'il y a une raison externe pour que ça ne fonctionne pas.

Ce qui est étonnant c'est que ça ne fonctionne pas sans message d'erreur (A moins que tu ai omis de nous en parler ?)

Je suspecte quand même quelques causes possible...

1 - Tu as résumé ton code de manière un peu simpliste : une des 2 conditions n'est pas remplie. Il faudrait déboguer (voir le fichier...)

le i = 0 me parait suspect pourquoi écrire la macro comme ça si ce n'est pas un (mauvais) "fake"

Sinon Cells(1, 1) et Cells(1, 11) et Rows(1).Delete sont bien suffisant...

2 - Tu testes tes Cells sur une autre feuille que Feuil1 et comme ça ne pointe pas sur la même feuille les conditions ne sont pas remplies.

3 - Tu n'utilises pas Feuil1 à bon escient et Feuil1 n'est pas la Feuille qui contient le tableau. (rappel : Avec cette syntaxe Feuil1 est le CodeName de ta Feuille et non son nom d'onglet...) Pourquoi utilises-tu Feuil1 dans l'instruction Rows et pas dans l'instruction Cells.

Ce manque de rigueur laisse planer toutes les incertitudes.

Si ta macro n'est pas un "fake" grossier, tu peux tester cette macro de remplacement pour déboguer :

Private Sub CommandButton2_Click()
Dim i%, Y1 As Boolean, Y2 As Boolean
i = 0
ID = UserForm1.TextBox1.Value
Y1 = Cells(i + 1, 1).Value = ID
Y2 = Cells(i + 1, 11).Value = 2
   If Y1 And Y2 Then
      Feuil1.Rows(i + 1).Delete
   Else
      MsgBox "Y1 est " & Y1 & " Et Y2 est " & Y2
   End If
End Sub

...Si tu as droit au MsgBox tu sauras au moins quelle conditions est fausse.

Bref en l'absence de fichier joint il est difficile d'en dire plus... Bien que j'ai encore quelques idées en réserve !

Comme quoi joindre un fichier est toujours plus productif...

A+

Salut galopin01,

Définitivement, je suis un peu perdue dans tes questions, mais je vais essayer d'y répondre au mieux... (Je fais du VBA depuis seulement quelque jours donc... je ne suis pas certaine que mes réponses seront satisfaisantes) :

1 - Pas de message d'erreur, ce n'est pas une omission de ma part : il ne se passe tout simplement rien en cliquant sur le bouton.

2 - Je ne sais pas ce que tu entends par "mauvais fake"? Pour moi, toutes les autres formules dans mon fichier référant à une cellule débute par Cells(i + 1, ?), j'ai donc déduits (peut-être innocemment) que c'était la bonne façon de le faire en général...?

3 et 4 - Au moment de tester ce bouton, userform1 utilisait toujours la feuille nommer DBASE qui réfère effectivement à Feuil1... J'ai testé, de toute façon, avec DBASE.Rows et Feuil1.Rows et ni l'un ni l'autre ne fonctionnait...

5 - Qu'entends-tu par "utiliser Feuil1 dans l'instruction Rows et pas dans l'instruction Cells"? Est-ce qu'il y a une modification à mon code que je devrais faire?

6 - Pour le manque de rigueur... Excusez, pardon... Je tâcherai d'indiquer à l'avenir "Ce message s'adresse à un publique de tous âges et a été rédigé par une personne extrêmement débutante et pourrait, par conséquent, choquer les plus experts..." ? P.S.: Je prends pour acquis que tu me fais une critique un peu gratuite alors je me permets d'en rigoler si tu n'y vois pas d'inconvénient.

7 - Encore une fois, je ne sais pas si tu m'accuses de vouloir vous faire perdre votre temps avec ma macro qui serait un "fake" grossier, ou s'il s'agit d'une expression qu'on utilise pour désigner quelque chose dans VBA... Alors je ne peux pas répondre à çà...

Pour ce qui est de vous envoyer le fichier, oui, bien sûr, je peux le faire. Je ne pensais simplement pas que ce serait quelque chose d'assez complexe pour nécessité un fichier joint. Et si je joins le fichier, j'ai bien peur qu'on trouvera à redire sur mon manque de rigueur encore beaucoup plus et que vous aurez de la difficulté à vous y retrouver...

Avant toute chose, je me ferai un plaisir de tester le code que tu m'as envoyé après une bonne nuit de sommeil et je t'en donnerai des nouvelles dès que possible.

Merci,

Bonjour Chantal,

Sans ton fichier ... tout le monde va tâtonner ... car il s'agit d'un bout de macro "hors sol" ...

Le contexte, pour une macro, est super important ... la preuve ...est déjà là ...

Avant de passer par une UserForm .... sais-tu, avec une macro, supprimer des lignes vides directement dans une feuille ???

Tout se fait par étapes ...

Si une photo remplace 1'000 mots ... un fichier en remplace 1'000'000 ...

Bon matin à tous,

Galopin : J'ai testé ton code et ça me donne le message Y1 est Faux et Y2 est Faux... Mais là, je ne vois vraiment pas pourquoi...

James007 : Pour ce qui est de la macro... Je m'avoue encore une fois vaincue d'avance! Je sais comment enregistrer une macro... Mais de là à lui dire de ne supprimer que les lignes vides...

Alors voici donc le fichier en pièce jointe. Je suis preneuse pour les commentaires constructifs

Il y a donc un de ces boutons supprimer pour chacune des situations. C'est pour cela que le bouton doit vérifier que les 2 conditions (Différentes pour chaque bouton) sont remplies avant de supprimer...

Je teste le tout sur le bouton de la situation 1...

Merci d'avance!

24job.xlsm (104.87 Ko)

re bonjour,

vous avez sur le commandbuton8 ceci :

Private Sub CommandButton8_Click()
i = 0
id = UserForm1.TextBox1.Value

    If Cells(i + 1, 1).Value = id And Cells(i + 1, 11).Value = 2 Then

        Feuil1.Rows(i + 1).Delete Shift:=xlUp ' il faut préciser qu'il faut remonter le reste du tableau

    End If
End Sub

If Cells(i + 1, 1).Value = id And Cells(i + 1, 11).Value = 2 Then

en fait ici vous testez la ligne des entêtes du tableau qui se trouve sur la feuille "DBASE"

en effet si i=0 et que vous testez la cellule cells(i+1,1) = cells(0+1,1) = cells(1,1) = cellule à la première ligne et à la première colonne.

donc vous testez si "No. Police" est = à userform.textbox1.value qui lui est égal à ABCD123 !

donc test faux, donc on efface pas !!!

Autre chose, si on utilise une variable "i" par exemple, c'est pour pouvoir la modifier, en en faire autre chose, dans votre cas un seul test est fait... il doit manquer une boucle afin de trouver la ligne qui correspond aux deux conditions et ensuite la supprimer, non ?

@ bientôt

LouReeD

EUREKA!!!!!

LouReeD Merci infiniment!! C'est le bout de compréhension qu'il me manquait!!

J'ai donc testé :

Private Sub CommandButton8_Click()
i = 0
id = UserForm1.TextBox1.Value

Do While Cells(i + 1, 1).Value <> ""

    If Cells(i + 1, 1).Value = id And Cells(i + 1, 11).Value = 2 Then

        Feuil1.Rows(i + 1).Delete Shift:=xlUp ' il faut préciser qu'il faut remonter le reste du tableau

    End If

    i = i + 1

Loop

End Sub

Et ça fonctionne à la perfection!!! Je n'avais pas réalisé que le i restait toujours à 0 parce que je ne lui avais pas indiquer d'en faire autrement!

Merci beaucoup beaucoup beaucoup!! Une épine de moins à mon pied!!

et vous avez beaucoup de pieds ? je veux dire beaucoup d'épines ?

@ bientôt

LouReeD

@ Chantal ...

LouReed a pu t'aider et te donner la solution ... en 12 minutes chrono ...!!!

Un Grand Merci et un Grand Bravo à lui ...

Personnellement, je voudrais que tu retiennes que ce délai ultra rapide a été rendu possible ... par ton fichier ...

J'allais le dire !

D'ailleurs Bond vous avez fait un nouvel adepte des demande de fichier joint... l'aviez vous remarqué ?

Et bien bonne soirée à vous et @chantalc33

33 ? j'ai cru au départ à la gironde... au Québec ?!

@ bientôt

LouReeD

Oui, il parait qu'une image vaut mille mots alors un fichier doit bien en valoir tout autant...

Je vais tâcher de m'en rappeler... promis!

P.S. 33 = mon mois et ma journée de naissance

Rechercher des sujets similaires à "supprimer ligne laisser vide"