Microsoft 365 Boucle sur plage filtrée - Ne fonctionne pas

chris6999

XLDnaute Impliqué
Bonjour

J'ai un problème avec une macro qui a pour but de passer uniquement sur les lignes filtrées afin de mettre à jour les données de certaines colonnes.
Cela ne fonctionne pas le code passe non seulement sur les lignes filtrées mais continue sur les lignes hors filtre jusqu'à la fin de ma plage (ici ligne 1000)


Mon code est le suivant
'passe sur les lignes filtrées pour modification du stade Export réalisé

Application.EnableEvents = False
Dim MaFeuille As Worksheet
Set MaFeuille = Sheets("Liste")
Columns("Af:AG").EntireColumn.Hidden = True

'PLAGE définie A8:AG5000 mais uniquement cellules visibles après filtre
Dim MaPlage As Range
' A changer -----------------------
Set MaPlage = Range("A8:AG5000").SpecialCells(xlCellTypeVisible).Rows
'je compare les cellules de la colonne D
Dim Ligne As Range
For Each Ligne In MaPlage.Rows
'positionne export réalisé colonne 31 AD si A non vide
'positionne date colonne 32 AE si A non vide
'positionne USER colonne 33 AF si A non vide

If Ligne.Cells(1) <> "" Then
Ligne.Cells(30) = "Export réalisé"
Ligne.Cells(32) = Date
Ligne.Cells(33) = Application.UserName
End If
Next

Application.EnableEvents = True

Je ne vois pas trop où se situe le pb mais je comprends bien qu'il y a un truc qui cloche.

Quelqu'un aurait-il une idée de ce que je pourrais modifier pour arriver à mes fins?

Merci d'avance pour votre aide
Bonne fin de soirée
 

Pièces jointes

  • FICHIER TEST BOUCLE SUR ZONE FILTREE.xlsm
    28.2 KB · Affichages: 10

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

C'est normal si vous sélectionnez la plage AG8:AG5000. SpécialsCells renverra les lignes vides mais visible sous le tableau jusqu'à la ligne 5000.

Correction : Set MaPlage = Range("A8").CurrentRegion.SpecialCells(xlCellTypeVisible).Rows

CurrentRegion renverra les lignes du tableau seulement.

Autre sujet: vous êtes certains de vos 'Ligne.Cells(30)', 'Ligne.Cells(32)' ,'Ligne.Cells(33) ?
Qui pour excel veut dire la 30ième, 32ième, 33ième cellule de ligne

Comme votre sélection s'arrête à la colonne AE (AF:AG sont cachées) les lignes renvoyées par specialcells s'arrêtent à la colonne AE. La 33ième cellule se trouvera donc sur la colonne B de la ligne suivante!

VB:
Sub BOUCLE()

'passe sur les lignes filtrées pour modification du stade Export réalisé

Application.EnableEvents = False
    Dim MaFeuille As Worksheet
    Set MaFeuille = Sheets("Liste")
    Columns("Af:AG").EntireColumn.Hidden = True
 
    'PLAGE définie A8:AG5000 mais uniquement cellules visibles après filtre
    Dim MaPlage As Range
    ' A changer -----------------------
    Set MaPlage = Range("A8").CurrentRegion.SpecialCells(xlCellTypeVisible).Rows
    'je compare les cellules de la colonne D
    Dim Ligne As Range
    For Each Ligne In MaPlage.Rows
     'positionne export réalisé colonne 31 AD si A non vide
     'positionne date colonne 32 AE si A non vide
     'positionne USER colonne 33 AF si A non vide
 
        If Ligne.Cells(1) <> "" Then
        Ligne.Cells(30) = "Export réalisé"
        Ligne.Cells(32) = Date
        Ligne.Cells(33) = Application.UserName
   End If
    Next
 
    Application.EnableEvents = True
 
End Sub

[Edition] pour vous montrer le fonctionnement de Cells( n) sans numéro de colonne, testez le code suivant sur une feuille vierge
VB:
Sub test()
    Dim plage As Range, incr As Long
    Set plage = ActiveSheet.Range("A1:B1")
    For incr = 1 To 10
        plage.Cells(incr) = incr
    Next
End Sub

Cordialement
 
Dernière édition:

chris6999

XLDnaute Impliqué
Bonjour,

C'est normal si vous sélectionnez la plage AG8:AG5000. SpécialsCells renverra les lignes vides mais visible sous le tableau jusqu'à la ligne 5000.

Correction : Set MaPlage = Range("A8").CurrentRegion.SpecialCells(xlCellTypeVisible).Rows

CurrentRegion renverra les lignes du tableau seulement.

Autre sujet: vous êtes certains de vos 'Ligne.Cells(30)', 'Ligne.Cells(32)' ,'Ligne.Cells(33) ?
Qui pour excel veut dire la 30ième, 32ième, 33ième cellule de ligne

Comme votre sélection s'arrête à la colonne AE (AF:AG sont cachées) les lignes renvoyées par specialcells s'arrêtent à la colonne AE. La 33ième cellule se trouvera donc sur la colonne B de la ligne suivante!

VB:
Sub BOUCLE()

'passe sur les lignes filtrées pour modification du stade Export réalisé

Application.EnableEvents = False
    Dim MaFeuille As Worksheet
    Set MaFeuille = Sheets("Liste")
    Columns("Af:AG").EntireColumn.Hidden = True

    'PLAGE définie A8:AG5000 mais uniquement cellules visibles après filtre
    Dim MaPlage As Range
    ' A changer -----------------------
    Set MaPlage = Range("A8").CurrentRegion.SpecialCells(xlCellTypeVisible).Rows
    'je compare les cellules de la colonne D
    Dim Ligne As Range
    For Each Ligne In MaPlage.Rows
     'positionne export réalisé colonne 31 AD si A non vide
     'positionne date colonne 32 AE si A non vide
     'positionne USER colonne 33 AF si A non vide

        If Ligne.Cells(1) <> "" Then
        Ligne.Cells(30) = "Export réalisé"
        Ligne.Cells(32) = Date
        Ligne.Cells(33) = Application.UserName
   End If
    Next

    Application.EnableEvents = True

End Sub

[Edition] pour vous montrer le fonctionnement de Cells( n) sans numéro de colonne, testez le code suivant sur une feuille vierge
VB:
Sub test()
    Dim plage As Range, incr As Long
    Set plage = ActiveSheet.Range("A1:B1")
    For incr = 1 To 10
        plage.Cells(incr) = incr
    Next
End Sub

Cordialement

Bonsoir ROBLOCHON
Effectivement il y a beaucoup d'anomalies que je n'avais pas vu.
J'y regarde de plus près et je reviens vers vous après avoir testé.

Merci encore et très bonne soirée
 

chris6999

XLDnaute Impliqué
Bonjour

J'ai testé le code dans mon projet réel et cela fonctionne nickel.
Effectivement Columns("Af:AG").EntireColumn.Hidden = True n'avait pas raison d'être et générait les anomalies que tu avais bien identifiées.

Je te remercie beaucoup pour ton aide.

Je garde précieusement tes propositions qui me serviront de modèle à l'avenir.

Très bonne journée
 

Discussions similaires

Réponses
2
Affichages
147
Réponses
6
Affichages
130

Statistiques des forums

Discussions
312 176
Messages
2 085 967
Membres
103 070
dernier inscrit
jujulop