IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Supprimer des lignes contenant des cellules #N/A [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingé
    Inscrit en
    Juillet 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingé
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Supprimer des lignes contenant des cellules #N/A
    Bonjour,

    Je viens ici après avoir parcouru le fofo dans tous les sens et testé pleins de choses différentes pour arriver au résultat voulu..sans succès
    D'avance merci pour votre aide !!

    Donc pour faire simple j'ai un tableau comme ci dessous:


    L'idée est d'analyser les colonnes A et B (ou alors une plage de cellules A2:B6500) et de supprimer les lignes ou il y a soit "" soit #N/A.

    Voici ce que j'ai optenu au mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub Supprimer_lignes()
     
    Dim i As Double
    limite = Range("A1").CurrentRegion.Rows.Count
     
    Application.ScreenUpdating = False
     
    For i = limite To 1 Step -1 'compte par la fin du tableau
     
        j = 1 'colonne début A
     
            Range("A2:B6500").Select
            ActiveCell(i - 1, j).Select
                Do While ActiveCell.Value = ""
                Selection.EntireRow.Delete
                Loop
     
            Cells(i, j + 1).Select
                Do While Selection.Value = xlErrNA
                Selection.EntireRow.Delete
                Loop
     
    Next i
     
    Application.ScreenUpdating = True
    MsgBox "Import effectué"
     
    End Sub


    A savoir que cette macro liste bien mes colonnes "A" et "B" en commençant par le bas.Seulement il y a une erreur 13 quand le cas doit traiter un #N/A.

    Si je remplace le #N/A par un chiffre pour faire tourner le code,je n'arrive pas à arrêter la boucle quand ça arrive en A1 (ce n'est pas bloquant mais du coup je ne vois pas à quoi sert mon limite = Range("A1")...)


    J'ai essayé tout un tas de solution ou écriture sans succès merci de m'aider

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonsoir
    En utilisant le filtrage automatique
    Lance MaMacro (en adaptnt au préalable le nom de ta feuille)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Sub MaMacro()
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil3")                                                                          'Adapte au nom de ta feuille
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        .Range("A1:B" & LastLig).AutoFilter field:=1, Criteria1:=""
        SupLig .Range("A1:A" & LastLig)
        .AutoFilterMode = False
        .Range("A1:B" & LastLig).AutoFilter field:=2, Criteria1:="#N/A"
        SupLig .Range("A1:A" & LastLig)
        .AutoFilterMode = False
    End With
    End Sub
     
    Private Sub SupLig(Plg As Range)
     
    If Plg.SpecialCells(xlCellTypeVisible).Count > 1 Then Intersect(Plg, Plg.Offset(1, 0)).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingé
    Inscrit en
    Juillet 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingé
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Tout d'abord merci de ta réponse ça fonctionne

    Petite question de compréhension du code, j'ai fait des commentaires pour voir si je comprends bien la macro (ça ne fait pas longtemps que je fais du VBA).
    Par contre je ne comprends pas vraiment le code de la "private sub", sa fonction est la suppression de ligne mais que veux dire tout e début de ligne?

    merci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub ma_macro()
     
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
     
    With Worksheets("Feuil2") 'Adapte au nom de ta feuille
        .AutoFilterMode = False
     
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row            'déclaration de LastLig soit la dernière cellule remplie de la colonne A
        .Range("A2:B" & LastLig).AutoFilter field:=1, Criteria1:="" 'Définition de la plage d'analyse pour la recherche ou il n'y a cellule vide
        SupLig .Range("A2:A" & LastLig)                             'Suppression des lignes où la cellule de la colonne A est vide
        .AutoFilterMode = False
        .Range("A2:B" & LastLig).AutoFilter field:=2, Criteria1:="#N/A" 'Définition de la plage d'analyse pour la recherche ou il n'y a des NA
        SupLig .Range("A2:A" & LastLig)                             'Suppression des lignes où la cellule de la colonne B est NA
        .AutoFilterMode = False
    End With
    End Sub
     
     
    Private Sub SupLig(Plg As Range)
     
    If Plg.SpecialCells(xlCellTypeVisible).Count > 1 Then Intersect(Plg, Plg.Offset(1, 0)).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End Sub

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    J'ai supposé que la ligne 2 est celle des titres.
    On fait un filtre automatique sur la colonne A (cellules vides)
    On supprime les lignes visibles à partir de la ligne 3
    On fait un filtre automatique sur la colonne B (cellules contenant #N/A)
    On supprime les lignes visibles à partir de la ligne 3

    Explication de la macro du supression des lignes SupLig(Plg as range):
    Si le nombre de cellules visibles de la colonne A est supérieur à 1, alors ona au moins une ligne visible issue du filtre. On supprime donc toutes les lignes visibles à l'exception de la ligne 2 (ligne des titres)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingé
    Inscrit en
    Juillet 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingé
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2011
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Merci pour l'explication

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/06/2015, 10h21
  2. Réponses: 9
    Dernier message: 06/02/2009, 15h53
  3. Réponses: 8
    Dernier message: 29/04/2008, 13h58
  4. JTable contenant des JComboBox contenant des Images
    Par lex13 dans le forum Composants
    Réponses: 4
    Dernier message: 31/07/2007, 15h57
  5. Traitement des lignes [suppression des lignes vides]
    Par turbo_chess dans le forum Linux
    Réponses: 4
    Dernier message: 22/03/2007, 09h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo