Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 ?

Salut,
tu définies la propriété d'une range qui n'existe pas..
suis pas certain de ce que tu veux faire, mais je pense que tu dois vouloir définir une range (occurence) avec un nombre de ligne et de colonne... donc vois plutot du coté de Resize..
 
Re : Quelle erreur de compilation ?

En effet, occurrence est une range.
Je veux comparer des valeurs dans les colonnes FGHI.
cellule me sert à désigner la ligne de référence, et occurrence est sensée "descendre" le long de mon tableau pour trouver les lignes identiques à la ligne de cellule.

Quand le souci actuel sera résolu, je comparerai occurrence (qui descend le long des colonnes FGHI) à cellule (qui est mon point de référence).

Tu dis qu'elle n'est pas définie. N'est-ce pas ce que je fais justement en indiquant qu'elle est égale à cellule+1 ?
Et au début j'ai précisé que c'est une Range.
Qu'est-ce qui manque ?

Merci vgendron de ton aide.
 
Re : Quelle erreur de compilation ?

Re

je pense que tu mélanges les ranges, avec leur propriétés etc etc
pour définir une range, il faut deux cellules: celle en haut à gauche et celle en bas à droite
chaque cellule est définie par un numéro de Ligne et un numéro de colonne
donc occurence= range (cells(i,j),cells(k,l))
une range ca peut aussi etre une cellule de départ (exemple A4) avec un nombre de lignes et de colonnes
d'ou le resize..
sans certitude, je crois que la syntaxe est occurence=range("A4").resize(xlignes,xcolonnes)

Dans ton cas occurence, c'est quoi. une cellule ou plusieurs cellules?

Essaie avec ce 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
     Set occurrence = Cells(cellule.Row, cellule.Column + 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

L'ennui c'est que je n'ai pas ton fichier en exemple, donc j'ignore si ca correspond à ce que tu souhaites
il faudrait que tu puisses le poster à titre d'exemple, sans données confidentielles
 
Re : Quelle erreur de compilation ?

Bonjour.
occurrence est définie comme une Range, et la propriété Row lui est appropriée
En tant que propriété en lecture seule, oui.

Pour changer en x sa Row vous devez la redéfinir:
VB:
Set Occurence = Intersect(Occurence.Worksheet.Rows(x), Occurence.EntireColumn)
 
Dernière édition:
Re : Quelle erreur de compilation ?

Occurrence c'est une seule cellule. J'ai dû me tromper en l’appelant "Range".

Voici en PJ un extrait de mon fichier à traiter.
Le but est que les groupes de dates, de la ligne 6 à 13, par exemple, soient alignés, toutes les dates correspondant à "Essentiel m54nh Principale Secteur" alignées à l"horizontale sur la ligne 6 dans ce cas.

Merci de vos explications, conseils et de votre temps!
 
Dernière modification par un modérateur:
Re : Quelle erreur de compilation ?

Bonjour.
Occurrence c'est une seule cellule. J'ai dû me tromper en l’appelant "Range".
C'est le type de donnée convenable pour un objet représentant une seule cellule.
Mais vous ne pouvez modifier son Row dans l'espoir de déplacer la cellule car c'est une propriété en lecture seule.
Pour déplacer une cellule la procédure normale c'est par exemple Range("V7").Cut Destination:=Range("W6")
Mais pourquoi voulez vous déplacer les cellules plutôt que de déplacer leurs valeurs ?
 
Re : Quelle erreur de compilation ?

Pour être plus clair, d'abord je vérifie s'il y a 2 lignes identiques sur les colonnes FGHI.

Quand c'est le cas, il peut y avoir plusieurs lignes identiques sur FGHI. je veux que toutes les dates associées à des lignes FGHI identiques soient alignées horizontalement.

J'ai choisi comme ligne où seront indiquées toutes les dates correspondant à une même ligne FGHI la 1ère occurrence de cette ligne.

Donc, j'ai ma variable "cellule" qui indique la position de la ligne où seront copiées toutes les dates, et il me faut une autre variable, qui continue de descendre le long de la colonne V, pour récupérer toutes les dates qui correspondent à la même ligne FGHI que la ligne de référence (donc "cellule"). Cette 2ème variable, je l'appelle "occurrence".

mon souci, c'est quand j'essaie de définir "occurrence", qui doit comparer les lignes suivantes à la ligne de "cellule".
"occurrence" est définie au début comme "la cellule juste en-dessous de "cellule". C'est là que le bât blesse. j'y arrive pas.

Une fois ce problème résolu, je reprends les comparaisons, et à chaque fois que la ligne d'"occurrence" est identique à "cellule" sur les colonnes FGHI, la date associée à "occurrence" est reportée au bout de la ligne de "cellule".

Je suis pas sûr d'avoir été assez clair...
 
Re : Quelle erreur de compilation ?

Comme ça ?
VB:
Sub AlignementDates()
Dim Te(), Le&, Ce&, Ts(), Ls&, Cs&
Te = Feuil1.UsedRange.Value
ReDim Ts(1 To UBound(Te, 1), 1 To 100)
Ls = 1
For Le = 1 To UBound(Te)
   For Ce = 6 To 9
      If Te(Le, Ce) <> Te(Ls, Ce) Then Ls = Le: Cs = 0: Exit For
      Next Ce
   For Ce = 22 To UBound(Te, 2)
      If Not IsEmpty(Te(Le, Ce)) Then Cs = Cs + 1: Ts(Ls, Cs) = Te(Le, Ce)
      Next Ce
   Next Le
With Feuil1.Cells(1, 22).Resize(UBound(Ts, 1), 100)
   .Value2 = Ts: .NumberFormat = "m/d/yyyy h:mm": End With
End Sub
 
Re : Quelle erreur de compilation ?

C'est ça! C'est parfait!
Mon problème est résolu. Merci !
Mais ma curiosité est éveillée: voudriez-vous m'expliquer la structure de votre macro, ou dois-je chercher et réfléchir tout seul comme un grand ?

Autre question, comment puis-je indiquer que ce fil est résolu, autrement que par un message ?
 
Dernière modification par un modérateur:
Re : Quelle erreur de compilation ?

L'un n'empêche pas l'autre. Ni de joindre l'efficace au performant en travaillant le moins possible directement avec les cellules. Ceci est possible grâce aux tableaux de Variant, la propriété Value d'un Range de plusieurs cellules contiguës en étant un justement. Mettez des commentaires derrière ce que vous aurez compris et demandez moi pour des détails précis que vous n'arriveriez vraiment pas à comprendre.
 
Re : Quelle erreur de compilation ?

Un de mes collègues a vu votre macro et a pu m'expliquer les principes des tableaux de variantes et la fonction Ubound, je vais me débrouiller pour le reste. Merci pour tout!
 
Re : Quelle erreur de compilation ?

Bonjour.

S'agit-il de la bonne feuille ? La macro AlignementDates semble faite pour traiter des groupes de dates sur 4 colonnes, je ne vois rien de tel à partir de la colonne 6 ni au delà…
 
Re : Quelle erreur de compilation ?

Il s'agit du modèle modifié, j'ai ajouté les colonnes A et F au tableau initial.
Dans ce tableau, il faut comparer les colonnes H,I,J,K, et quand elles sont identiques sur 2 lignes, reprendre l'information de la colonne X et la mettre à droite de la ligne identique la plus haute.
Par exemple, ici, les lignes 11,12,13 affichent GAUCHE | 35 | PRINCIPALE | 1 BERCY, il faudrait donc que les valeurs de la colonne X sur les lignes 12 et 13 soient déplacées au bout de la ligne 11.
 
- 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
730
Réponses
4
Affichages
754
Réponses
2
Affichages
769
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…