Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1475 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Supprimer des lignes sous Excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Supprimer des lignes sous Excel

n°1845664
kador10
Posté le 31-01-2009 à 21:48:37  profilanswer
 

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
mood
Publicité
Posté le 31-01-2009 à 21:48:37  profilanswer
 

n°1845842
seniorpapo​u
Posté le 01-02-2009 à 17:46:24  profilanswer
 

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.


Message édité par seniorpapou le 01-02-2009 à 17:48:47
n°1845846
Modération
Posté le 01-02-2009 à 17:49:47  answer
 

Titre modifié : les titres tout en majuscules sont interdits. Merci de lire les règles de la section Programmation.

n°1845914
kador10
Posté le 01-02-2009 à 22:27:08  profilanswer
 

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

n°1845919
kador10
Posté le 01-02-2009 à 22:41:38  profilanswer
 

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.  

n°1846018
vonm
Posté le 02-02-2009 à 11:41:59  profilanswer
 

Salut,
 
un truc comme ca devrait marcher :
 

Code :
  1. Sub test()
  2. Const LIGNE_DEBUT As Long = 1
  3. Const LIGNE_FIN As Long = 6
  4. Const COLONNE_DEBUT As Long = 1
  5. Const COLONNE_FIN As Long = 3
  6. Dim supprime_ligne As Boolean
  7. Dim ligne As Long
  8. Dim colonne As Long
  9. Dim nb_suppr As Long
  10. nb_suppr = 0
  11. 'on boucle sur les lignes
  12. For ligne = LIGNE_DEBUT To LIGNE_FIN
  13.     'par defaut cette ligne n'est pas supprimable
  14.     supprime_ligne = False
  15.     'on boucle sur les colonnes
  16.     For colonne = COLONNE_DEBUT To COLONNE_FIN
  17.    
  18.         ' on selectionne la cellule pour visualiser
  19.         ' a virer si beaucoup de donnees a traiter
  20.         Cells(ligne, colonne).Select
  21.         'on teste si la cellule est vide
  22.         If Cells(ligne, colonne).Value = "" Then
  23.             supprime_ligne = True
  24.         End If
  25.     Next colonne
  26.     ' si la ligne est supprimable, on le fait
  27.     If supprime_ligne Then
  28.         Rows(ligne & ":" & ligne).Select
  29.         Selection.Delete Shift:=xlUp
  30.         nb_suppr = nb_suppr + 1
  31.         'bidouille pour rester sur la meme ligne
  32.         ligne = ligne - 1
  33.         If (ligne + nb_suppr) >= LIGNE_FIN Then Exit For
  34.     End If
  35. Next ligne
  36. End Sub


 
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.


Message édité par vonm le 02-02-2009 à 11:45:15
n°1846228
SuppotDeSa​Tante
Aka dje69r
Posté le 02-02-2009 à 20:19:51  profilanswer
 

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


Message édité par SuppotDeSaTante le 02-02-2009 à 20:20:12

---------------
Soyez malin, louez entre voisins !
n°1846266
vonm
Posté le 02-02-2009 à 22:21:24  profilanswer
 

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.

n°1846351
kiki29
Posté le 03-02-2009 à 09:37:41  profilanswer
 

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

n°1846356
vonm
Posté le 03-02-2009 à 09:41:52  profilanswer
 

kiki29 a écrit :

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


 
exact !
 
la solution est effectivement plus elegante.
 
v.

mood
Publicité
Posté le 03-02-2009 à 09:41:52  profilanswer
 

n°1846373
SuppotDeSa​Tante
Aka dje69r
Posté le 03-02-2009 à 10:16:10  profilanswer
 

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.
 
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.


 
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


---------------
Soyez malin, louez entre voisins !
n°1846377
vonm
Posté le 03-02-2009 à 10:25:21  profilanswer
 

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.


Message édité par vonm le 03-02-2009 à 10:25:59
n°1846853
seniorpapo​u
Posté le 03-02-2009 à 21:17:13  profilanswer
 

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


Message édité par seniorpapou le 03-02-2009 à 21:20:15

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Supprimer des lignes sous Excel

 

Sujets relatifs
[macro excel] encadrer certaines cellulesConcatenation de 2 fichiers excel.
[MySQL] Requete pour récupérer les lignes de fin de moisCherche menu sur deux lignes
[VBA Excel] Procédure redondante dans UserformUne sorte de comparaison d'un fichier excel et une table access.
selection entre deux textes (dans word a partir d'excel)Alterner couleur de lignes d'un tableau
aide excel annuaireSupprimer les lignes redondandes dans un tableau excel ?????
Plus de sujets relatifs à : Supprimer des lignes sous Excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR