De: Laurent Longre Objet: Re: Commande FIND Date : jeudi 31 août 2000 19:17 En très gros, on peut dire que la propriété Item correspond à la fonction de feuille de calcul INDEX. Mais en beaucoup plus chinois (pardon Hai-Li): MaPlage(RowIndex, ColumnIndex) renvoie la référence de la cellule qui se situe à l'intersection de la ligne RowIndex et de la colonne ColumnIndex de MaPlage, de la même manière que =INDEX(MaPlage;NumLigne;NumCol) dans une feuille de calcul. Dans l'exemple que tu mentionnes, Plage(1) renvoie la référence de la première cellule de la plage. Par exemple, mettons que tu as dans la variable Zaza (Range) la référence d'une plage de dimensions inconnues: set Zaza = Selection Si tu veux par exemple sélectionner la première cellule de cette plage, dont tu ne connais pas a priori l'adresse ni les dimensions, tu peux utiliser Item(1): Zaza.Item(1).Select, ou alors plus simplement, Zaza(1).Select Zaza(2) renvoie la deuxième cellule de la plage, en lisant celle-ci ligne par ligne: Range("A1:C3")(1) = Range("A1") Range("A1:C3")(2) = Range("B1") Range("A1:C3")(3) = Range("C1") Range("A1:C3")(4) = Range("A2") ... Range("A1:C3")(9) = Range("C3") Pour sélectionner la dernière cellule de la plage Zaza : Zaza(Zaza.Count).Select Zaza(5, 13), équivalent de Zaza.Item(5,13) renvoie la cellule qui se trouve sur la 5ème ligne, 13ème colonne de la plage Zaza. Si le paramètre "RowIndex" de la propriété Item(RowIndex) est "hors plage", ça marche aussi: Range("B2")(3) = Range("B4") (on descend de 3 lignes vers le bas à partir de B2). Si RowIndex est inférieur à 1, Cellule.Item(N) "remonte" de (N+1) lignes: Range("B2")(0) = Range("B1") Range("C3")(-1) = Range("C1") Même chose pour le deuxième paramètre, ColumnIndex, mais pour le décalage par colonne: Range("B2")(1, 3) = Range("D2") Range("B2")(1, 0) = Range("A2") Range("D3")(1, -2) = Range("A3") Quand la plage est constitué d'une seule cellule, Plage(X, Y) ou Plage.Item(X, Y) est équivalent à Plage.Offset(X - 1, Y - 1). Mais la propriété Item est plus rapide qu'Offset à l'exécution de la macro. Si la plage est constitué de colonnes (issues de la propriété .Columns ou .EntireColumn) ou de lignes (issues de .Rows ou .EntireRow), alors la propriété Item renvoie aussi, respectivement, une colonne ou une ligne, et non pas une cellule unique. Par exemple : Dim Plage As Range set Plage = Range("A1:C3").Columns MsgBox Plage(2).Address(0, 0) ' ou MsgBox Plage.Item(2).Address(0, 0) => affiche "B1:B3" (2ème colonne de la plage) set Plage = Range("A1:C3").Rows MsgBox Plage(3).Address(0, 0) ' ou MsgBox Plage.Item(3).Address(0, 0) => affiche "A3:C3" (3ème ligne de la plage) Là aussi, on peut utiliser des décalages "hors plage", et un paramètre RowIndex inférieur à 1: set Plage = Range("A5:C7").Rows MsgBox Plage(0).Address(0, 0) ' ou MsgBox Plage.Item(0).Address(0, 0) => affiche "A4:C4" (1ère ligne au-dessus de A5:C7) Last but not least, tout le monde parle Item sans le savoir dans ses macros, comme la prose de Mr Jourdain. Il s'agit en effet de la propriété (dans ce cas, je crois que les amerloques disent "accessor") par défaut des objets Plage. Donc en fait, quand on utilise par exemple : Cells(5, 8).Select ... sans le savoir, on utilise la propriété Item, sous sa forme implicite : Cells.Item(5, 8).Select Ce qui veut dire : sélectionner l'Item (5, 8) de l'objet Cells, qui représente la totalité des cellules de la feuille de calcul. Même chose pour les propriétés Rows et Columns. Et pour mieux tout embrouiller, comme la propriété Item renvoie une référence de cellule, donc un objet sur lequel on peut appliquer encore la propriété Item, les Item peuvent s'enchaîner ad libitum, ce qui fait que l'instruction suivante, quoique complètement débile, est parfaitement valide: Cells(3)(4,5)(-2)(8,1)(12)(-5)(0).Select Le premier qui a deviné, *de tête*, quelle cellule est sélectionné par cette instruction a gagné un bisou sur le nez. (Dépêche-toi Catherine !!!!!!!) Laurent Eric RENAUD a écrit : > > D'accord mais quel est l'action qui est effectué avec Plage.Item(1). En > clair ça correspond à quoi Plage(1) > > Laurent Longre a écrit dans le message : > 39AE8103.59D4795C@free.fr... > > > > A la propriété Item. > > > > Plage(1), c'est la même chose que Plage.Item(1) > > > > Laurent > > > > Eric RENAUD a écrit : > > > > > > Dans des exemples trouvés sur les News, après le nom Plage est suivi > d'un > > > chiffre entre parenthèses. Ce nommbre correspond à quoi ? > > > > > > If Plage.Find(Cell, Plage(1), xlValues, xlWhole) Is Nothing Then > > > ----------------------- > > > Cordialement > > > Eric RENAUD