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
209
Réponses
2
Affichages
88

Statistiques des forums

Discussions
312 198
Messages
2 086 107
Membres
103 120
dernier inscrit
83400ren