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 toute la ligne si "F" et "G" vides [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut supprimer toute la ligne si "F" et "G" vides
    Bonjour
    J’ai le code suivant qui me permettre de supprimer toute ligne si les cellules F et G sont nulles a la fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SubligneFetGvide()
    derniereLigne = ActiveSheet.UsedRange.Rows.Count
    Application.ScreenUpdating = False
    For r = derniereLigne To 1 Step -1
    If (Range ("F" & r)) = 0 And (Range ("G" & r)) = 0 ThenRows(r).Delete
    Next r
    End Sub
    Mon tableau (A : H) contient 20000 lignes alors le code commence de 1 aux 40000 lignes et après le code mon tableau devient de 1 au 43600.

    J’ajoute 125 lignes mon tableau maintenant contient 43725 lignes (43600+25) si je lance le code il va commencer de 1 au 43725 et ça prendre du temps. C’est-à-dire le code toujours commence de la première ligne.

    Comment modifier ce code pour commencer de 43600 au 43725 c'est-à-dire la dernière ligne de l’ancienne exécution et ainsi de suite.
    Merci

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Si tu veux faire cela, tu dois mettre un marqueur, comme par exemple un nom défini pour la plage, à redéfinir dans le code de suppression de lignes.

    Tu peux aussi accélérer la suppression des lignes en utilisant une variable tableau. L'inconvénient c'est que comme les lignes sont réécrites et pas supprimées, les formats éventuels sont conservés. Si ce n'est pas gênant, cela peut être une solution intéressante
    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
    29
    30
    31
    32
    33
    34
    35
    36
    Sub SubligneFetGvide()
    Dim oSh As Excel.Worksheet
    Dim v As Variant, i As Long, Index As Long, j As Integer
    Dim DerLig As Long, DerCol As Integer
     
    Set oSh = ActiveSheet
    DerLig = oSh.UsedRange.Rows(oSh.UsedRange.Rows.Count).Row
    DerCol = oSh.UsedRange.Columns(oSh.UsedRange.Columns.Count).Column
     
    If DerCol < 7 Then DerCol = 7 'au cas où toute la colonne G est vide ainsi que les colonnes suivantes
     
    v = oSh.Range(oSh.Cells(1, 1), oSh.Cells(DerLig, DerCol)).Value
     
    'tasser les lignes à conserver
    Index = 1
    For i = 1 To DerLig
        If (v(i, 6) <> 0) Or (v(i, 7) <> 0) Then
            For j = 1 To DerCol
                v(Index, j) = v(i, j)
            Next j
            Index = Index + 1
        End If
    Next i
     
    'vider les lignes restantes
    For i = Index To DerLig
        For j = 1 To DerCol
            v(i, j) = Empty
        Next j
    Next i
     
     
    oSh.Range(oSh.Cells(1, 1), oSh.Cells(DerLig, DerCol)).Value = v
     
    Set oSh = Nothing
    End Sub
    Cordialement,

    PGZ

  3. #3
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut
    merci mon ami merci beaucoup
    je pense que ton code est le plus rapide.

  4. #4
    Expert éminent 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
    Par défaut
    Essaies d'utiliser un filtre automatique, c'est plus rapide que les boucles (je suppose que la ligne 1 est celle des titres)
    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
    Sub LigneFetGvide()
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With Sheets("Feuil1")
        'On enlève l'éventuel filtre auto
        .AutoFilterMode = False
        LastLig = .UsedRange.Rows.Count
        'on filtre notre plage sur colonne F avec critères 0 ou vide
        .Range("A1:H" & LastLig).AutoFilter Field:=6, Criteria1:=0, Criteria2:="=", Operator:=xlOr
        'Et sur colonne G avec critères 0 ou vide
        .Range("A1:H" & LastLig).AutoFilter Field:=7, Criteria1:=0, Criteria2:="=", Operator:=xlOr
        'Si au moins une ligne visible suite au filtre, on supprime les lignes visibles
        If .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then _
           .Range("A2:A" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        'On enlève filtre auto
        .AutoFilterMode = False
    End With
    End Sub

  5. #5
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut bonjour
    salut mon ami .
    j'utilise jusqu’à maintenant ton code (LigneFetGvide) et merci infiniment.
    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
    Sub LigneFetGvide()
    Dim LastLig As Long
     
    Application.ScreenUpdating = False
    With Sheets("Feuil1")
        'On enlève l'éventuel filtre auto
        .AutoFilterMode = False
        LastLig = .UsedRange.Rows.Count
        'on filtre notre plage sur colonne F avec critères 0 ou vide
        .Range("A1:H" & LastLig).AutoFilter Field:=6, Criteria1:=0, Criteria2:="=", Operator:=xlOr
        'Et sur colonne G avec critères 0 ou vide
        .Range("A1:H" & LastLig).AutoFilter Field:=7, Criteria1:=0, Criteria2:="=", Operator:=xlOr
        'Si au moins une ligne visible suite au filtre, on supprime les lignes visibles
        If .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then _
           .Range("A2:A" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        'On enlève filtre auto
        .AutoFilterMode = False
    End With
    End Sub

    j'ai essayé de remplacer ma plage par un tableau alors le code bloquer dans
    cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    SVP aider moi

  6. #6
    Expert éminent 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
    Par défaut
    Bonsoir
    j'ai essayé de remplacer ma plage par un tableau alors le code bloquer dans
    Je n'ai pas compris ce que ça veut dire.

  7. #7
    Membre éclairé
    Homme Profil pro
    comptable principal
    Inscrit en
    Octobre 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Autre

    Informations professionnelles :
    Activité : comptable principal
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 434
    Par défaut bonjour
    Moi j’ai remplacé ma plage exemple A1:H10 par un tableau nommé tableau1
    J’ai utilisé les étapes suivantes :
    1* j’ai sélectionné toute la plage A1:H10
    2* j’ai utilisé raccourci (Ctl+L) ou bien ongle insertion icône tableaux "office 2010"
    Finalement ma plage A1:H10 change les couleurs des cellules est devenu un tableau nommé tableau1

  8. #8
    Expert éminent 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
    Par défaut
    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
    Sub LigneFetGvide()
     
    Application.ScreenUpdating = False
    With Sheets("Feuil1").ListObjects("Tableau1").Range
        .AutoFilter
        'on filtre notre plage sur colonne F avec critères 0 ou vide
        .AutoFilter Field:=6, Criteria1:=0, Criteria2:="=", Operator:=xlOr
        'Et sur colonne G avec critères 0 ou vide
        .AutoFilter Field:=7, Criteria1:=0, Criteria2:="=", Operator:=xlOr
        'On supprime les lignes visibles
        .Offset(1, 0).EntireRow.Delete
        'On enlève filtre auto
        .AutoFilter
    End With
    End Sub

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

Discussions similaires

  1. Supprime toutes les lignes d'une table fichier
    Par Loko dans le forum WinDev
    Réponses: 38
    Dernier message: 10/12/2007, 16h21
  2. Supprimer toutes les lignes en dessous d'une cellule
    Par liop49 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 22/08/2007, 13h50
  3. supprimer toutes les lignes d'un flexgrid sauf la ligne de titre
    Par cari dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 11/08/2006, 10h39
  4. [VB 2005] Supprimer toutes les lignes d'un DataGridView
    Par Bob Langlade dans le forum Windows Forms
    Réponses: 4
    Dernier message: 25/01/2006, 16h03
  5. Supprimer toutes les lignes et colonnes d'un tableau
    Par pekka77 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 01/12/2005, 11h26

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