Limitation d'incrémentation

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 !

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.
 
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:
- 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
3
Affichages
197
Retour