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

Boucle sur plusieurs feuilles

  • Initiateur de la discussion Initiateur de la discussion Dolichotis
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Dolichotis

XLDnaute Occasionnel
Bonjour,

je suis encore sur mon projet qui commence doucement à tourner. Il y a, entre autres, une procédure que je n'arrive pas à faire tourner sur plusieurs feuilles. Sans boucle, elle fonctionne parfaitement.

Code:
For Each ws In wbOutil
        If ws.Name <> "composants" Then
            Call DeleteEmptyRows
        End If
Next

Code:
Sub DeleteEmptyRows()
    ' désactiver le rafraîchissement de l'écran pour accélérer le traitement
    Application.ScreenUpdating = False
    ' désactiver les alertes pour empêcher l'affichage des messages…
    Application.DisplayAlerts = False

    Do
        If IsEmpty(ActiveCell) Then
            ActiveCell.EntireRow.Delete
        End If
        ActiveCell.Offset(-1, 0).Select
    Loop Until ActiveCell.Row = 6
    Exit Sub

Cette procédure DeleteEmptyRows est censée supprimer les lignes vides dans une feuille Excel. Mais dans la boucle, elle déconne : elle ne s'arrête pas à la ligne 6 ! Elle s'exécute sur la première feuille mais ne s'arrête pas à la ligne 6 et génère une erreur à la ligne :
Code:
ActiveCell.Offset(-1, 0).Select
(Et du coup, ne fait pas les autres feuilles)

erreur d'exécution 1004
Erreur définie par l'application ou par l'objet


Est-ce que c'est ma boucle qui ne convient pas ?

Merci de vos réponses !
 
Re : Boucle sur plusieurs feuilles

Bonjour Dolichotis,

Je pense qu'il manque :

Code:
For Each ws In wbOutil
        If ws.Name <> "composants" Then
[COLOR="Red"]ws.activate[/COLOR]            
Call DeleteEmptyRows
        End If
Next

et

Code:
Sub DeleteEmptyRows()
    ' désactiver le rafraîchissement de l'écran pour accélérer le traitement
    Application.ScreenUpdating = False
    ' désactiver les alertes pour empêcher l'affichage des messages…
    Application.DisplayAlerts = False
[COLOR="red"]activesheet.range("A65536").select 'Vérifie que tu es bien tout en bas des lignes à supprimer[/COLOR]    
Do
        If IsEmpty(ActiveCell) Then
            ActiveCell.EntireRow.Delete
        End If
        ActiveCell.Offset(-1, 0).Select
    Loop Until ActiveCell.Row = 6
    Exit Sub
 
Re : Boucle sur plusieurs feuilles

Bonjour tototiti !

Merci pour ta proposition, je viens de l'essayer maintenant, ça ne marche pas. J'ai même l'impression que ça a bugué...

La procédure marche très bien toute seule mais dès que je la mets dans une boucle, ça ne marche plus...

Mes feuilles de classeur finissent vers la ligne 650, est-ce nécessaire d'aller jusqu'à la dernière ligne ?


Merci pour vos solutions !
 
Re : Boucle sur plusieurs feuilles

Re

Finalement ça marche mais ça a planté pendant un bon moment avant d'afficher les résultats. (j'ai utilisé le gestionnaire de taches)

Je vais tester avec la dernière ligne remplie de la feuille(au lieu de la dernière ligne de la feuille), ça plantera peut-être moins...
 
Re : Boucle sur plusieurs feuilles

Code:
For Each ws In wbOutil
        If ws.Name <> "composants" Then
[COLOR="Red"]ws.activate[/COLOR]            
Call DeleteEmptyRows
        End If
Next

et

Code:
Sub DeleteEmptyRows()
    ' désactiver le rafraîchissement de l'écran pour accélérer le traitement
    Application.ScreenUpdating = False
    ' désactiver les alertes pour empêcher l'affichage des messages…
    Application.DisplayAlerts = False
[COLOR="red"]activesheet.range([COLOR="SeaGreen"]"C" & ligFin[/COLOR]).select 'Vérifie que tu es bien tout en bas des lignes à supprimer[/COLOR]    
Do
        If IsEmpty(ActiveCell) Then
            ActiveCell.EntireRow.Delete
        End If
        ActiveCell.Offset(-1, 0).Select
    Loop Until ActiveCell.Row = 6
    Exit Sub

Voilà, avec cette modification en vert, ça ne plante pas et ça prend beaucoup moins de temps !

Merci pour ton aide !
 
Re : Boucle sur plusieurs feuilles

Bonsoir Dolichotis, tototiti

une autre solution, pour traiter toutes les colonnes A, code à placer dans un module standard :

Code:
Option Explicit
Sub test()
Dim ws As Worksheet
For Each ws In Worksheets
    If ws.Name <> "composants" Then
        Call DeleteEmptyRows(ws.Name)
    End If
Next ws
End Sub


Sub DeleteEmptyRows(nomfeuille As String)
Dim i As Integer
'pour traiter colonne A
For i = Sheets(nomfeuille).Range("A65536").End(xlUp).Row To 6 Step -1
    If IsEmpty(Cells(i, 1).Value) Then Rows(i).Delete
Next i
End Sub

a tester et à adapter dans ton projet, sachant que nous n'avons pas à notre disposition tout ton code.

bonne fin d'après midi
@+

Edition : attention, traite également les lignes 6, à remplacer par 7 le cas échéant.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
762
  • Question Question
Microsoft 365 Programme trop lent
Réponses
12
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…