Quelle erreur de compilation ?

  • Initiateur de la discussion Initiateur de la discussion AngryWatterson
  • 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 !

A

AngryWatterson

Guest
Bonjour,

Voici mon code:

Code:
Sub Alignement_dates()
Dim cellule, date_suivante, report_suivant, maplage, occurrence As Range
Dim DernLigne, DernCol As Variant
    DernLigne = Range("A" & Rows.Count).End(xlUp).Row
    DernCol = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
Set maplage = Range("V4:V" & DernLigne)

For Each cellule In maplage
     If Range("F" & cellule.Row).Value = Range("F" & cellule.Row).Offset(1, 0).Value _
    And Range("G" & cellule.Row).Value = Range("G" & cellule.Row).Offset(1, 0).Value _
    And Range("H" & cellule.Row).Value = Range("H" & cellule.Row).Offset(1, 0).Value _
    And Range("I" & cellule.Row).Value = Range("I" & cellule.Row).Offset(1, 0).Value _
    Then
    [I]occurrence.Row = cellule.Row + 1[/I] '[U]c'est ici qu'est mentionnée l'erreur de compilation.[/U]
    occurrence.Columns = cellule.Columns + 1
        Do While _
        Range("F" & occurrence.Row).Value = Range("F" & cellule.Row).Value _
        And Range("G" & occurrence.Row).Value = Range("G" & cellule.Row).Value _
        And Range("H" & occurrence.Row).Value = Range("H" & cellule.Row).Value _
        And Range("I" & occurrence.Row).Value = Range("I" & cellule.Row).Value      'Fin du critère Do While
        
        cellule.Offset(0, 1).Value = Range("b" & cellule.Row + 1).Value
        Loop
    End If
Next
End Sub

La ligne en erreur me sert à définir la variable "occurrence" comme juste en-dessous de la variable "cellule".

Je ne comprends pas pourquoi il y a cette erreur de compilation, occurrence est définie comme une Range, et la propriété Row lui est appropriée (il me semble).

Voyez-vous quelle erreur je commets ?

Merci de votre aide.
 
Re : Quelle erreur de compilation ?

Bonjour.

Essayez comme ça :
VB:
Sub AlignementDates()
Dim Plage As Range, Te(), Le&, Ce&, Ts(), Ls&, Cs&
Te = Feuil1.Range(Feuil1.[A50000].End(xlUp), Feuil1.[AA4]).Value
ReDim Ts(1 To UBound(Te, 1), 1 To 4)
Ls = 1
For Le = 1 To UBound(Te) ' Pour chaque ligne d'entrée
   For Ce = 8 To 11 ' 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 = 24 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)
      Next Ce
   Next Le
Feuil1.[X4].Resize(UBound(Ts, 1), 4).Value = Ts
End Sub
 
Dernière édition:
Re : Quelle erreur de compilation ?

Bonjour,
Merci pour les commentaires, je comprends mieux le fonctionnement de la macro.
Malheureusement, j'ai à nouveau ajouté des colonnes (placées en L,M,N)...
Je pense devoir modifier :
ligne 3: Feuil1.[AA4] ==> AD4
ligne 7 : For Ce = 8 To 11 : ça reste identique, puisque c'est avant les nouvelles colonnes
ligne 11: For Ce = 24 ==> 27
ligne 16: Feuil1.[X4] ==> AA4

Mes ces modifications sont insuffisantes, ou erronnées, car lors du lancement de la macro il y a une erreur 9 : "L'indice n'appartient pas à la sélection". Je pense qu'il doit falloir modifier la définition de Ts, mais j'ignore dans quelle mesure.
A la ligne 11 cette partie est surlignée en jaune : ": Ts(Ls, Cs) = Te(Le, Ce)"

J'ai déplacé les 3 colonnes que j'ai ajoutées et les ai mises au bout du tableau pour retrouver la disposition originale que j'avais indiqué dans mon exemple, mais le message d'erreur est toujours présent.
 
Re : Quelle erreur de compilation ?

Bonjour.

S'il peut y avoir plus de 4 valeurs à mettre à la queue leu leu il faut en prévoir le maximum possible dans ReDim Ts(1 To UBound(Te, 1), 1 To CMax). Mais prolonger alors aussi la lecture de Te au delà de AD4 pour qu'elles soient récupérées par la suite si on relance le traitement déjà fait en partie afin qu'il ne change rien.
 
Re : Quelle erreur de compilation ?

J'ai mis CMax à la place de 4 là où vous l'indiquez et étendu Te jusqu'à AK, la limite des valeurs à aligner, mais mais malheureusement l'erreur 9 "L'indice n'appartient pas à la sélection" apparaît maintenant sur celle ligne (la 4ème) , et CMAX = "Vide".
 
Re : Quelle erreur de compilation ?

Moi j'avais mis CMax comme ça, à la place de la valeur maxi à prévoir, mais puisque vous l'avez mis en toute lettre, gardez le mais déclarez en tête :
Const CMax = ?
Non, non, non ! pas un point d'interrogation non plus: la valeur maxi à prévoir !
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
411
Réponses
4
Affichages
729
Réponses
4
Affichages
754
Réponses
2
Affichages
768
Retour