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

XL 2021 Affecter la valeur "ok" en colonne "F" uniquement sur les lignes visibles

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous,
Je vous souhaite une beau dimanche

J'ai besoin d'Affecter la valeur "ok" en colonne "F" uniquement sur les lignes visibles.

Le contexte
Vous le verrez dans le classeur test joint
1 - j'ai 27 lignes avec en col "A" plusieurs affectations : "A Rappeler - Vendu - voir"
2 - je filtre en sélectionnant en "A3" l'affectation que je souhaite traiter,
3 - Je voudrais en col "F", Affecter la valeur "ok" uniquement aux lignes visibles.
J'ai ce petit code
VB:
Sub lignVisibles()
'select lignes visibles à partir de ligne 5
Range("A5:E" & Range("A65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Select
ActiveCell.Name = "MaCell" 'nomme la cellule
' formules col J
    ActiveCell.Offset(0, 5) = "ok"
    ActiveCell.Offset(0, 5).Select: Selection.Copy
    Range(ActiveCell.Offset(1, 0), ActiveCell.Offset(100, 0)).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
[MaCell].Select
End Sub
Qui ne fonctionne pas bien car il me met des "ok" sur 100 lignes à partir de la1ère ligne visible.
Je n'arrive pas à coder pour qu'il les mette uniquement aux lignes visibles.
Pourriez-vous m'aider ?
Comme d'habitude, je joins le petit classeur test.
Un grand merci à toutes et à tous
Je continue mes recherches...
 

Pièces jointes

  • filtre.xlsm
    26.5 KB · Affichages: 7
Solution
Bonjour @Usine à gaz ,

Tout le code est dans le module "feuilFiltre" :
VB:
Option Explicit

Sub filtrage()
Dim mazone As Range, der As Long
   With Sheets("Filtre critères mult")
      .Select
      If .Range("a3") = "" Then annule: Exit Sub
      If .FilterMode Then .ShowAllData
      der = .Cells(.Rows.Count, "a").End(xlUp).Row
      Set mazone = .Range("a4:s" & der)
      mazone.AutoFilter Field:=1, Criteria1:=.Range("a3")
      .Range("a2").Select
   End With
End Sub

Sub annule()
   With Sheets("Filtre critères mult")
      .Select
      If .AutoFilterMode Then .Cells.AutoFilter
      .Range("a3").ClearContents
      .Range("a2").Select
   End With
End Sub

Sub lignVisibles()
Dim Macell As Range
   With Sheets("Filtre...

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Usine à gaz ,

Tout le code est dans le module "feuilFiltre" :
VB:
Option Explicit

Sub filtrage()
Dim mazone As Range, der As Long
   With Sheets("Filtre critères mult")
      .Select
      If .Range("a3") = "" Then annule: Exit Sub
      If .FilterMode Then .ShowAllData
      der = .Cells(.Rows.Count, "a").End(xlUp).Row
      Set mazone = .Range("a4:s" & der)
      mazone.AutoFilter Field:=1, Criteria1:=.Range("a3")
      .Range("a2").Select
   End With
End Sub

Sub annule()
   With Sheets("Filtre critères mult")
      .Select
      If .AutoFilterMode Then .Cells.AutoFilter
      .Range("a3").ClearContents
      .Range("a2").Select
   End With
End Sub

Sub lignVisibles()
Dim Macell As Range
   With Sheets("Filtre critères mult")
      .Select
      Set Macell = ActiveCell
      On Error Resume Next
      .Range("a5:a" & .Cells(Rows.Count, "a").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Offset(, 5) = "ok"
      On Error GoTo 0
      Macell.Select
   End With
End Sub
 

Pièces jointes

  • Usine à gaz- filtre & ok- v1.xlsm
    57.3 KB · Affichages: 5

job75

XLDnaute Barbatruc
Bonjour Lionel, mapomme,

Pourquoi utiliser 3 boutons ? Un seul suffit :
VB:
Sub filtrage()
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
With Range("A4:F" & Range("A" & Rows.Count).End(xlUp).Row)
    .Columns(6) = ""
    If [A3] = "" Then Exit Sub
    .AutoFilter Field:=1, Criteria1:=[A3]
    Intersect(.Columns(6), .SpecialCells(xlCellTypeVisible)) = "ok"
    .Cells(1, 6) = ""
End With
End Sub
A+
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Salut, je n'avais pas cliqué sur répondre, c'est un peu tard mais c'est fait ....
J'ai modifié le code du classeur fourni ainsi ( A3 = A3 ) :
VB:
Sub filtrage()
If [A3] <> "" Then
    Rows("4:4").Select
    Selection.AutoFilter Field:=1, Criteria1:=Range("A3")
    [A3] = [A3] ' Pour forcer le calcul
End If
[a2].Select
End Sub
Puis j'ai nommé TbDates = les données de la colonne "B"
et j'ai mis la formule ci dessous dans les cellules en colonne "F" ( sur les données ) :
Code:
=SI(OU($A$3="";NB(TbDates)=SOUS.TOTAL(102;TbDates));"";"Ok")
 

Discussions similaires

Réponses
2
Affichages
307
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…