Re : Boucle for each uniquement dans les celulles visibles
Manuellement, c'est Menu édition -> Atteindre -> Cellules visibles après avoir sélectionné toutes les cellules.
Pa macro, je crois que c'est un des rares cas où la sélection est indispensable
Re : Boucle for each uniquement dans les celulles visibles
Bonjour altefqhatre ,Epaf
chez moi pas besoin de selection (excel 2003), le code ci-dessous fonctionne, attention au moins une cellule doit être visible sinon message d'erreur, pour y remédier faire précéder le code d'un "On Error Resume Next"
Code:
On Error Resume Next
Dim c As Range
For Each c In Range("A1:A10").SpecialCells(xlCellTypeVisible)
MsgBox c.Address
Next c
Re : Boucle for each uniquement dans les celulles visibles
Désolé, j'ai (encore) mal lu je pensais à une sélection destinée à copier uniquement les cellules visibles..., auquel cas la sélection est nécessaire...
Sinon, bien sûr, l'ami Pierrot a raison
A+
Re : Boucle for each uniquement dans les celulles visibles
Re,
tu parlais dans ton 1er post d'une boucle "for each", dans l'exemple que tu donnes maintenant il s'agit d'une boucle "for"... De plus, à priori sur des sous totaux... Le plus simple pour bien comprendre ton problème, serait que tu postes une toute petite partie de ton fichier, sans données confidentielles, avec code utilisé et résultat attendu...
Re : Boucle for each uniquement dans les celulles visibles
Autant pour moi...
Code:
Dim Ligne as Long
For Ligne = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
if Cells(Ligne,"A").Value = "Total Test1" or Cells(Ligne,"A").Value = "Total Test 2" Then
Cells(Ligne, "B").Value = "OK"
End if
Next Ligne
Ce dernier s'exécute donc sur une feuille dans laquelle est affichée le niveau d'arborescence "2" des sous-totaux
Re : Boucle for each uniquement dans les celulles visibles
Avec ton code, tu peux vérifier si la ligne est visible
Code:
Dim Ligne As Long
For Ligne = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If (Not Rows(Ligne).Hidden) And (Cells(Ligne, "A").Value = "Total Test1" Or _
Cells(Ligne, "A").Value = "Total Test 2") Then _
Cells(Ligne, "B").Value = "OK"
Next Ligne
Teste ça tel quel.
Avec le code de Pierrot, (pisk je l'ai pas vu...)
Code:
Dim c As Range
For Each c In Range("A1:A" & ActiveSheet.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible)
if c.Value = "Total Test1" or c.Value = "Total Test 2" Then _
c.offset(0,1) = "OK"
Next c