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

XL 2016 modifier fichier suivis de stock

phddesi

XLDnaute Junior
bonsoir

j'appel à votre âme charitable car j'ai un fichier que je souhaite modifier en VBA.
j'ai mis des explications directement dans le fichier.
je vous remercie d'avance pour le temps que vous me consacrerez.
 

Pièces jointes

  • suivis stock.xlsm
    26.5 KB · Affichages: 31
Solution
C'est bien signalé par le message,
malheureusement Microsoft préfère se "planter" plutôt que de renvoyer un count = 0
Remplacer la sub :
VB:
Sub Filtre_Designation()
Dim I       As Integer
Dim Crit()  As String
Dim Elem
On Error Resume Next
    N = [Stock[Code Fabricant]].SpecialCells(xlCellTypeVisible).Count
    If Err = 0 Then
        ReDim Crit(1 To N)
        For Each Elem In [Stock[Code Fabricant]].SpecialCells(xlCellTypeVisible).Cells
            I = I + 1:  Crit(I) = CStr(Elem)
        Next
        [Designation].ListObject.Range.AutoFilter Field:=1, Criteria1:=Crit, Operator:=xlFilterValues
        [Designation].Parent.Activate
    End If
End Sub
Ceci dit, cliquer pour afficher ce qui n'existe pas, ça se discute ...

phddesi

XLDnaute Junior
je vous ai mis le tableau pour mieux expliquer.
mais merci pour votre test
 

Pièces jointes

  • phddesi-2.xlsm
    11.4 KB · Affichages: 4

fanch55

XLDnaute Barbatruc
je vous ai mis le tableau pour mieux expliquer.
mais merci pour votre test
Je pense que vous voulez parler de la colonne E et non D,
On ne peut pas le faire par formule .
On ne peut pas faire de sauf avec plus de 2 valeurs à exclure

Pourquoi ne pas se servir manuellement des filtres natifs d'excel :

ou


Si toutefois vous voulez une solution par code :



VB:
Sub Filtrer_E()
    Filtre_Colonne [Designation], "Consommation", "A+*"
End Sub
Sub UnFiltrer_E()
    Filtre_Colonne [Designation], "Consommation"
End Sub

Sub Filtre_Colonne(Target As Range, Colonne, ParamArray Criteres() As Variant)
Dim List_Criteres   As Variant
Dim ID              As Variant
 
    If Target.ListObject Is Nothing Then
        If Not Target.Parent.AutoFilter Is Nothing Then Target.AutoFilter
        Set ID = Target.Rows(1).Find(Colonne)
    Else
        If Target.ListObject.AutoFilter.FilterMode Then Target.ListObject.AutoFilter.ShowAllData
        Set ID = Target.Rows(0).Find(Colonne)
    End If
  
    If Not ID Is Nothing Then ID = ID.Column - Target.Column + 1 Else ID = False

    If ID And UBound(Criteres) >= 0 Then
        List_Criteres = Criteres
        Target.AutoFilter Field:=ID, Operator:=xlFilterValues, Criteria1:=List_Criteres
    End If
 
    Set ID = Nothing
End Sub
 

phddesi

XLDnaute Junior
merci pour tout ces explications.
bon week-end à vous
 

fanch55

XLDnaute Barbatruc
C'est bien signalé par le message,
malheureusement Microsoft préfère se "planter" plutôt que de renvoyer un count = 0
Remplacer la sub :
VB:
Sub Filtre_Designation()
Dim I       As Integer
Dim Crit()  As String
Dim Elem
On Error Resume Next
    N = [Stock[Code Fabricant]].SpecialCells(xlCellTypeVisible).Count
    If Err = 0 Then
        ReDim Crit(1 To N)
        For Each Elem In [Stock[Code Fabricant]].SpecialCells(xlCellTypeVisible).Cells
            I = I + 1:  Crit(I) = CStr(Elem)
        Next
        [Designation].ListObject.Range.AutoFilter Field:=1, Criteria1:=Crit, Operator:=xlFilterValues
        [Designation].Parent.Activate
    End If
End Sub
Ceci dit, cliquer pour afficher ce qui n'existe pas, ça se discute ...
 

phddesi

XLDnaute Junior
Bonjour

une dernière chose et je pense pouvoir faire le reste seul.

car vous m'avez déjà beaucoup aidé.

j'ai écris ce que je veux dans la feuille excel.

merci d'avance
 

Pièces jointes

  • test.xlsm
    15 KB · Affichages: 3
Dernière édition:

Discussions similaires

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