XL 2019 VBA - Arrêter une macro synthèse si les lignes générées se répètent X nombre de fois

CiolBel

XLDnaute Nouveau
Situation de départ: Un classeur contient une feuille synthèse et 200 onglets que l'utilisateur remplit les uns à la suite des autres.
La macro suivante va chercher le contenu d'une centaine de cellules dans les 200 onglets du classeur pour les reporter dans la feuille synthèse, une ligne par onglet. Si un onglet n'a pas encore été utilisé, elle affiche le signe "-" dans chaque colonne de la colonne D à la colonne DV mais continue jusqu'à épuisement de la liste d'onglets.

Peut-on faire en sorte que si un nombre arbitraire des dernières lignes générées (par exemple 20) ne contient que le signe "-" de la colonne D à la colonne DV (soit de Iw, 4 à Iw, 126) lors de l'alimentation, la macro se termine car cela signifie que le reste des onglets n'est pas encore utilisé et que leur traitement est inutile?

Code:
Sub Synthèse()
Dim Sh As Worksheet
Range("B2:L1000").ClearContents
Iw = 2  ' Index écriture
For Each Sh In ActiveWorkbook.Sheets
    If Sh.Name = "Synthèse" Then GoTo EndConsolidation
    Cells(Iw, 1).Select
With Selection
    .Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & Sh.Name & "'" & "!" & "A1", TextToDisplay:="Aller vers"
End With
    Cells(Iw, 2) = Sh.Name
    If Sh.Range("D8") = "" Then
    Cells(Iw, 3) = "-"
    Else
    Cells(Iw, 3) = Sh.Range("D8")
    End If
   'Ici le reste du traitement du tableau (Iw, 4 jusqu'à Iw, 125)
    If Sh.Range("C134") = "" Then
    Cells(Iw, 126) = "-"
    Else
    Cells(Iw, 126) = Sh.Range("C134")
    End If

  
    Iw = Iw + 1
EndConsolidation:
Next Sh

End Sub
 
Dernière édition:

FlamXYZ

XLDnaute Nouveau
Salut CiolBel

tu peux pourrais créer un compteur à partir d'une variable qui comptera le nombre de fois que la conditions n'est pas respectée.


...
Cells(Iw, 2) = Sh.Name
If Sh.Range("D8") = "" Then
Cells(Iw, 3) = "-"

compteur=compteur +1
if compteur = (le seuil défini) then exit sub
Else
Cells(Iw, 3) = Sh.Range("D8")
End If
'Ici le reste du traitement du tableau (Iw, 4 jusqu'à Iw, 125)
If Sh.Range("C134") = "" Then
Cells(Iw, 126) = "-"
Else
Cells(Iw, 126) = Sh.Range("C134")
End If

....
 
Haut Bas