Supprimer ligne si 2 lignes vides d'affilé [Résolu]

Signaler
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014
-
Everlast03
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014
-
Bonjour,

Je suis stagiaire dans une entreprise et débutant en VB. Lors de mon projet je dois automatiser le remplissage d'un procès verbal.
Pour ce faire j'ai plusieurs macro à créer.
Je voudrais savoir comment je dois faire pour que :
[list]
Lorsque 2 lignes d'affilé sont vides, en supprimer une.
/list

Merci d'avance.

15 réponses

Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

t'a pas de données dans ta première colonne, tu veux tester sur la 2éme colonne:
Sub supprimer_2lignesvides()
Dim ligne, colonne, compteur As Integer
'test effectué sur la 1ére colonne
colonne = 2
ligne = 1
'trouve le numéro de la dernière ligne non vide pour limiter la boucle
compteur = Columns("B:B").Find("*", Cells(ligne, colonne), , , xlByRows, xlPrevious).Row
For ligne = 1 To compteur
'si les 2 lignes sont vides on efface une ligne
If IsEmpty(Cells(ligne, colonne)) True And IsEmpty(Cells(ligne + 1, colonne)) True Then
Rows(ligne & ":" & ligne).Delete Shift:=xlUp
End If
Next
End Sub
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

très facile F est la 6éme colonne, donc deux modif à faire
colonne = 6
et compteur = Columns("F:F").Find
Maintenant tu dois voir la logique de ce bout de code est l'adapter
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

Voici la boucle qui répond à tes attentes, pour info le contrôle se fait sur la 1ére ligne
Sub supprimer_2lignesvides()
Dim ligne, colonne, compteur As Integer
'test effectué sur la 1ére colonne
colonne = 1
ligne = 1
'trouve le numéro de la dernière ligne non vide pour limiter la boucle
compteur = Columns("A:A").Find("*", Cells(ligne, colonne), , , xlByRows, xlPrevious).Row
For ligne = 1 To compteur
'si les 2 lignes sont vides on efface une ligne
If IsEmpty(Cells(ligne, colonne)) True And IsEmpty(Cells(ligne + 1, colonne)) True Then
Rows(ligne & ":" & ligne).Delete Shift:=xlUp
End If
Next
End Sub
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

Merci pour ta réponse si rapide, cependant quand je veux lancer ma macro il me dit qu'il y à un problème avec la ligne suivante (erreur 91) :

compteur = Columns("A:A").Find("*", Cells(ligne, colonne), , , xlByRows, xlPrevious).Row

Peux-tu m'en dire plus ?

Merci d'avance !
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

chez moi ca marche, tu n'a pas oublié une variable par hasard, essaye cette ligne à la place
compteur = Columns("A:A").Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

Moi toujours pas...
J'ai ça à l'écran :
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

le compteur sert juste à trouver la dernière ligne, fais un test met compteur=10000 par exemple et regarde si ca marche, si tu est sur excel 2003 ru met 65536, mais ce qui est dommage c'est la perte de temps tu va parcourir autant de ligne alors que si ca se trouve tu dépassera jamais les 10000 lignes
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

Quand je mets 10000 ça marche mais le test est beaucoup trop long ...
Je peux faire quoi pour que ça soit plus rapide ?

Cordialement
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

pour aller plus vite il faut trouver le bon nombre de lignes à parcourir tu peux rajouter
application.srceenupdating=false au début de la procédure et application.screenupdating=true à la fin cela désactive le raffraichissement de l'écran excel et permet de gagner du temps
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

Le test sur la 2ème colonne fonctionne effectivement, je pense que ça devrait aller comme ca !
Merci beaucoup !
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

De rien peut tu juste mettre réponse accepté, pour que le sujet soit clos
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

Pourrais tu me dire comment faire le test sur la colonne B ? J'ai toujours un problème ...
Voici mon code :
Sub supprimer_2lignesvides()
Sheets("Rotor").Select
Dim ligne, colonne, compteur As Integer


'test effectué sur la 4ème colonne
colonne = 4
ligne = 1
'trouve le numéro de la dernière ligne non vide pour limiter la boucle
compteur = Columns("D:D").Find("*", Cells(ligne, colonne), , , xlByRows, xlPrevious).Row
For ligne = 1 To compteur
'si les 2 lignes sont vides on efface une ligne
If IsEmpty(Cells(ligne, colonne)) True And IsEmpty(Cells(ligne + 1, colonne)) True Then
Rows(ligne & ":" & ligne).Delete Shift:=xlUp
End If
Next
End Sub
Messages postés
116
Date d'inscription
jeudi 14 décembre 2006
Statut
Membre
Dernière intervention
29 août 2013

Dans ce code tu test sur ta colonne D, remplace
colonne = 2
et compteur = Columns("B:B").Find
et le test sera sur la 2éme colonne
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

En fait j'me suis trompé! J'veux faire un test sur F...
Messages postés
29
Date d'inscription
mardi 27 avril 2010
Statut
Membre
Dernière intervention
8 décembre 2014

J'avais bien compris oui ...
Mais je j'ai du me tromper ...
Compter jusque 6 c'est bien plus dur que ce que je croyais
Merci beaucoup ...