Supprimer des lignes sous Excel - VB/VBA/VBS - Programmation
Marsh Posté le 01-02-2009 à 17:46:24
Bonsoir,
tu peux t'inspirer de cela:
http://forum.hardware.fr/hfr/Progr [...] 4715_1.htm
Cordialement
edit: précision, modifie le titre de ton post et mets le en minuscules... tu vas te faire "disputer" par un modérateur.
Marsh Posté le 01-02-2009 à 17:49:47
Titre modifié : les titres tout en majuscules sont interdits. Merci de lire les règles de la section Programmation.
Marsh Posté le 01-02-2009 à 22:27:08
Désolé pour le titre, je suis nouveau je ne savais pas.
Par contre le programme que tu m'as conseillé n'est pas tout fait ce que je veux.
j'aimerais supprimer toute la ligne qui contient une cellule vide.
Merci encore pour votre aide
Marsh Posté le 01-02-2009 à 22:41:38
J
Je me suis peut etre mal expliqué, voici une explication qui sera peut etre plus clair :
'ai une liste de données dans la première feuille excel et j'aimerais créer une macro qui a chaque fois qu'il voit apparaître une cellule vide dans une matrice , il supprimer la ligne entiere. Je suis débutant et je n'y arrive pas.
Marsh Posté le 02-02-2009 à 11:41:59
Salut,
un truc comme ca devrait marcher :
Code :
|
Tu regles les constantes du debut et c'est tout.
Dans ton cas, si tu veux aller jusqu'a la colonne P, COLONNE_FIN doit valoir 16.
Ca n'est surement pas tres propre, mais ca fonctionne.
v.
Marsh Posté le 02-02-2009 à 20:19:51
Bonsoir
J'ajouterais juste en debut de code un
Application.ScreenUpdating = False
puis a la fin du code un
Application.ScreenUpdating = True
Ca masquera ce que fait excel, et donc ca gagne du temps a l'execution.
De plus, la ligne 27 ne sert a rien, sinon perdre du temps a l'execution.
Pareil pour les lignes 36-37, un
Rows(ligne & ":" & ligne).Delete Shift:=xlUp
Apres le dernier If ne sert pas a grand chose (vu que le If precedent ne fait que valider un test sur le contenu de la cellule), mais c'est pas le souci, ca fonctionne.
Cordialement
Marsh Posté le 02-02-2009 à 22:21:24
ben comme je l'ai ecrit dans le commentaire le select de la cellule sert essentiellement a visualiser ou on en est.
par contre je ne saisis pas ton commentaire sur le dernier if.
Il me semble interessant car il evite de tourner en permanence sur les lignes vides en fin de tableau.
v.
Marsh Posté le 03-02-2009 à 09:37:41
Salut, encore une remarque
For ligne = LIGNE_DEBUT To LIGNE_FIN
faire plutot For ligne = LIGNE_FIN To LIGNE_DEBUT Step -1
ce qui evitera qqch d'ignoble ( voire interdit par certains compilateurs ) en programmation : la gestion de variable de boucle
Marsh Posté le 03-02-2009 à 09:41:52
kiki29 a écrit : Salut, encore une remarque |
exact !
la solution est effectivement plus elegante.
v.
Marsh Posté le 03-02-2009 à 10:16:10
vonm a écrit : ben comme je l'ai ecrit dans le commentaire le select de la cellule sert essentiellement a visualiser ou on en est. |
Tout simplement car tu definis une variable a true, seulement si la cellule est vide. Ensuite tu testes cette variable, et si elle est true tu fais ta suite du prog. Ca ne sert a rien de tester si elle est true, puisque tu le definis comme tel plus haut, et surtout tu ne fais rien si c'est le cas inverse. Il faut donc mettre le dernier If en lieu et place de celui qui teste si la cellule est vide.
'on teste si la cellule est vide
If Cells(ligne, colonne).Value = "" Then
Rows(ligne & ":" & ligne).Select
Selection.Delete Shift:=xlUp
nb_suppr = nb_suppr + 1
'bidouille pour rester sur la meme ligne
ligne = ligne - 1
If (ligne + nb_suppr) >= LIGNE_FIN Then Exit For
End If
Next colonne
Je ne critiquais pas le moins du monde hein
Cordialement
Marsh Posté le 03-02-2009 à 10:25:21
T'inquiete pas, si j'avais peur de la critique je ne mettrais pas de code en ligne !!!
Par contre, je ne suis pas d'accord avec ta remarque car il s'agit de ce que j'ai fait naturellement au debut.
Mais si on regarde bien le code qui est inclu dans la boucle sur les colonnes, je vais supprimer la ligne mais je ne vais pas recommencer a la premiere colonne.
Je continue ou j'en suis et donc si j'etais sur une des dernieres colonnes, il y a une chance que je rate une cellule vide.
d'ou l'interet de mon booleen.
J'ai bon ?
v.
Marsh Posté le 03-02-2009 à 21:17:13
Bonsoir,
pour éviter le if ....:
Sub ev()
Dim i As Double
limite = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
Application.ScreenUpdating = False
For i = limite To 1 Step -1
j = 1
While Not (IsEmpty(Cells(i, j))) And j < 17
j = j + 1
Wend
If j < 17 Then
Cells(i, j).EntireRow.Select
Selection.Delete Shift:=xlUp
End If
Next i
Application.ScreenUpdating = True
End Sub
j=1 colonne début A
j=17 colonne fin P +1
_______________________________________________________________________________________
ou encore:
_______________________________________________________________________________________
Sub w()
Application.ScreenUpdating = False
limite = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
Do
Range(Cells(1, 1), Cells(limite, 16)).Select
With Selection
Set c = .Find(What:="", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
If c Is Nothing Then Exit Sub
c.EntireRow.Select
Selection.Delete Shift:=xlUp
End With
limite = limite - 1
Loop Until limite = 0
Application.ScreenUpdating = true
End Sub
Bonne nuit
Marsh Posté le 31-01-2009 à 21:48:37
Bonsoir à tous,
Voila mon problème, J'aimerais supprimer toutes les lignes d'un tableau contenant une ou plusieurs cellules vides de la colonne A à la colonne P.
Comment faire?
Merci d'avance pour votre aide?
Message édité par Elmoricq le 01-02-2009 à 17:49:24