Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Supprimer une ligne d'un tableau nommée

taratata

XLDnaute Junior
Bonjour,

j'ai tableau nommé BaseNeutre sur lequel j'arrive à supprimer toutes les ligne vides
par contre je cherche à supprimer toutes les lignes ayant dans une colonne (ex: Col16) la valeur 0

j'ai test ceci sans succès

VB:
Dim Rng1 As Range
        On Error Resume Next
        Set Rng1 = Range("BaseNeutre[[QtDisp]]").SpecialCells(xlCellTypeAllFormatConditions).Delete
        On Error GoTo 0
            If Not Rng1 Is Nothing Then
              Rng1.Delete Shift:=xlUp
            End If

ou ceci

VB:
Application.ScreenUpdating = 0: Application.DisplayAlerts = 0                                                  'à supprimer si pas nécessaire
    Application.Calculation = xlCalculationManual                                                                 'plus rapide si de nombreuses formules
    On Error Resume Next                                                                                          'pas de correspondance
        With [BaseNeutre]
         .AutoFilter Field:=16, Criteria1:="0.00": .SpecialCells(xlCellTypeAllFormatConditions).Delete: .AutoFilter
         .AutoFilter Field:=16, Criteria1:=0#: .SpecialCells(xlCellTypeAllFormatConditions).Delete: .AutoFilter
        End With
        

        Application.Calculation = xlCalculationAutomatic

une idée sîl vous plaît
 

job75

XLDnaute Barbatruc
Bonjour taratata, bienvenue sur XLD,

Grâce au tri cette macro est très rapide :
VB:
Sub SupprimeZeros()
Application.ScreenUpdating = False                                                  'à supprimer si pas nécessaire
Application.Calculation = xlCalculationManual                                                                 'plus rapide si de nombreuses formules
On Error Resume Next                                                                                          'pas de correspondance
With [BaseNeutre]
    .Columns(16).EntireColumn.Insert 'colonne auxiliaire
    .Columns(16) = "=1/(RC[1]=0)"
    .Columns(16) = .Columns(16).Value 'supprime les formules
    .Sort .Columns(16), xlDescending, Header:=xlYes 'tri pour accélérer
    Intersect(.Columns(16).SpecialCells(xlCellTypeConstants, 1).EntireRow, .Cells).Delete xlUp
    .Columns(16).EntireColumn.Delete
End With
Application.Calculation = xlCalculationAutomatic
End Sub
A+
 

job75

XLDnaute Barbatruc
comment passer une variable à la place du nom fixe d'une table dans --> With [BaseNeutre] ?
De nombreuses solutions sont possibles, par exemple :
VB:
With [A1].CurrentRegion
ou bien :
VB:
With ActiveSheet.UsedRange
ou encore :
VB:
With Application.InputBox("Sélectionnez la plage de cellules à étudier :", Type:=8)
    Application.ScreenUpdating = False
 

taratata

XLDnaute Junior
merci pour votre aide.

je pense que c'est dû à la feuille contenant 3 tableaux structurés. Je me suis aperçu que je devais obligatoirement avoir le même nombre de colonne.
ceci ne fonctionne pas --> .Columns(16).EntireColumn.Delete
par contre ça - oui --> .Columns(16).ClearContents
 

taratata

XLDnaute Junior
- en fait je prépare une gestion de stock du DIY e-liquide (VP PG Nicotine & Arôme). ces du pure DIY. Puis un suivis de la vape avec quelques stats... Une fois fini, le fichier sera e ligne gratuitement sur ma chaine youtube.

voici le code

VB:
Sub Suppression_Ligne_Zero_BN_NIC()
            
    Application.ScreenUpdating = False                                                  ' à supprimer si pas nécessaire
    Application.Calculation = xlCalculationManual                                       ' plus rapide si de nombreuses formules
    On Error Resume Next                                                                ' pas de correspondance
    
    With [BaseNeutre]
        .Columns(17).EntireColumn.Insert                                                ' colonne auxiliaire
        .Columns(17) = "=1/(RC[-1]=0)"                                                  ' RC[-1] : 1 Colonne avant (la colonne cible à traiter) --> "Q"
                                                                                        ' Valeur de retour --> True - False
        .Columns(17) = .Columns(17).Value                                               ' supprime les formules
        .Sort .Columns(17), xlDescending, Header:=xlYes                                 ' tri pour accélérer
        Intersect(.Columns(17).SpecialCells(xlCellTypeConstants, 1).EntireRow, .Cells).Delete xlUp
        .Columns(17).ClearContents                                                      ' Supprimer data dans les cellules de la colonne
    End With
        
    With [Nicotine]
        .Columns(18).EntireColumn.Insert                                                ' colonne auxiliaire
        .Columns(18) = "=1/(RC[-2]=0)"                                                  ' RC[-1] : 1 Colonne avant (la colonne cible à traiter) --> "Q"
                                                                                        ' Valeur de retour --> True - False
        .Columns(18) = .Columns(18).Value                                               ' supprime les formules
        .Sort .Columns(18), xlDescending, Header:=xlYes                                 ' tri pour accélérer
        Intersect(.Columns(18).SpecialCells(xlCellTypeConstants, 1).EntireRow, .Cells).Delete xlUp
        .Columns(18).ClearContents                                                      ' Supprimer data dans les cellules de la colonne
    End With
    Application.Calculation = xlCalculationAutomatic

End Sub

je suis pour le partage de compétence, d'échange.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…