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
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
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
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.