Limitation d'incrémentation

AngryWatterson

XLDnaute Nouveau
Bonjour,

J'utilise un tableau recensant des évènements datés, et quand plusieurs évènements similaires ont eu lieu, une macro aligne les dates de tous ces évènements sur la ligne du premier évènement.

Voici cette macro:
Code:
Sub AlignementDates()
Dim Plage As Range, Te(), Le&, Ce&, Ts(), Ls&, Cs&
Te = Feuil1.Range(Feuil1.[A50000].End(xlUp), Feuil1.[AK4]).Value
ReDim Ts(1 To UBound(Te, 1), 1 To 20)
Ls = 1
For Le = 1 To UBound(Te) ' Pour chaque ligne d'entrée
  For Ce = 9 To 12 ' De H à K: si l'un change cette ligne devient la nouvelle ligne de sortie et on repart à 0 pour la colonne de sortie (à W en fait)
     If Te(Le, Ce) <> Te(Ls, Ce) Then Ls = Le: Cs = 0: Exit For
      Next Ce
   For Ce = 28 To UBound(Te, 2) ' Pour chaque X à AA: s'il n'est pas vide on l'empile à la colonne suivante de la ligne de sortie
     
     If Not IsEmpty(Te(Le, Ce)) Then Cs = Cs + 1: Ts(Ls, Cs) = Te(Le, Ce)
        If Cs > 5 Then Exit For
      Next Ce
   Next Le
Feuil1.[AB4].Resize(UBound(Ts, 1), 11).Value = Ts
End Sub

Merci encore à Dranreb, qui l'a développée et m'a ainsi ôté une grosse épine du pied.
Malheureusement, ledit pied a évolué, et j'ai atteint une limite de la macro.
Quand un trop grand nombre d'évènements similaires se suit, la macro plante.
La ligne où se produit l'erreur est celle-ci:

If Not IsEmpty(Te(Le, Ce)) Then Cs = Cs + 1: Ts(Ls, Cs) = Te(Le, Ce)

La partie soulignée est en jaune dans VBA.

Je souhaite poser une limite à l'incrémentation, pour que s'il y a plus de 10 évènements similaires consécutifs, tout ce groupe d'évènements soit ignoré.

Je suppose qu'il faut placer une condition de type "If Cs > 5 Then Exit For", mais je n'ai pas trouvé où, Pourriez-vous m'aider ?

Egalement, pourrait-on m'expliquer la syntaxe de cette ligne, spécialement le ":" ?
If X then Y je comprends, mais If X then Y:Z je suis perdu.

Merci à vous.
 

Dranreb

XLDnaute Barbatruc
Re : Limitation d'incrémentation

Bonjour.
Mettez plutot :
VB:
If Not IsEmpty(Te(Le, Ce)) And Cs < UBound(Ts, 2) Then Cs = Cs + 1: Ts(Ls, Cs) = Te(Le, Ce)
P.S. Le ":" est simplement un séparateur d'instructions indépendantes, mises sur la même ligne. Si on veut les écrire sur des lignes séparées, il faut déjà aller à la ligne juste après le Then, et terminer par un End If. Je trouve souvent ça plus lourd.
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
191
Réponses
2
Affichages
77

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 814
dernier inscrit
JLGalley