View Single Post
 
Old 04-13-2020, 03:06 AM
jpl jpl is offline Windows 7 64bit Office 2010 32bit
Advanced Beginner
 
Join Date: Jan 2016
Location: France
Posts: 33
jpl is on a distinguished road
Default

Merci pour votre réponse.
Je me demandais si ces comportements avaient une justification profonde qui m'échappait, vous me rassurez en les qualifiant de bizarreries.

Autre sujet de perplexité, il s'agit cette fois de la relation entre les objets Selection et Range à l'intérieur d'un tableau Word (objet Table).

Mon document contient un tableau de deux lignes et cinq colonnes.

L'idée est de sélectionner une colonne de tableau, et de comparer les objet Selection et Range qui correspondent à cette colonne.

La macro principale est divisée en cinq sections.
Elle dresse la liste des cellules des objets Selection et Range et affiche leurs "coordonnées" dans la fenêtre immédiate. Elle est testée dans la macro Test.

Si je sélectionne la deuxième colonne, la section 1 me dit que l'objet Selection contient deux cellules (objets Cells), ce qui est tout à fait normal. Leur coordonnées confirment que ce sont bien les cellules de la colonne 2.
La section 2 définit l'objet Plage comme Range de la sélection.
Les sections 3 et 4 parcourent la collection Plage.Cells et indiquent que l'objet Plage s'étend de la première à la dernière cellule de la colonne, y compris toutes les cellules intermédiaires en lisant de gauche à droite et de haut en bas.
Ceci me semble cohérent puisqu'un Range est une zone contiguë dans un document.
La section 5 sélectionne l'objet Plage.
Premier problème : l'objet Plage contient six cellules, mais quand on le sélectionne, la sélection n'en contient que deux au lieu des six que l'on pourrait espérer. Lorsqu'on sélectionne un Range dans un objet Table, il semblerait que la sélection ne soit pas la zone du Range, mais une zone rectangulaire s'appuyant sur les cellules extrêmes du Range.

Si je sélectionne la première colonne, l'objet Selection contient deux cellules, l'objet Plage en contient six, ce qui est conforme au résultat précédent.
Deuxième problème : les sections 3 et 4 indiquent que l'objet Plage contient 6 cellules, mais elles n'en trouvent que 5 à afficher. La section 4 provoque un message d'erreur indiquant que la cellule Plage.Cells(6) n'existe pas. Qu'est devenue ma cellule fantôme ?

Excusez moi pour la longueur du message, ce ne sont pas des sujets très importants, mais cela m'occupe pendant le confinement.

Thank you for your reply.
I was wondering if these behaviors had a deep justification that escaped me, you reassure me by calling them quirks.

Another subject of perplexity, it is this time about the relation between the Selection and Range objects inside a Word table (Table object).

My document contains a table of two rows and five columns.

The idea is to select a column, and compare the Selection and Range objects that correspond to this column.

The main macro is divided into five sections.
It lists the cells of the Selection and Range objects and displays their "coordinates" in the immediate window. It is tested in the Test macro.


If I select the second column, section 1 tells me that the Selection object contains two cells (Cells objects), which is completely normal. Their coordinates confirm that these are the cells in column 2.
Section 2 defines the Plage object as the Selection range.
Sections 3 and 4 run through the Plage.Cells collection and indicate that the Plage object extends from the first to the last cell of the column, including all the intermediate cells by reading from left to right and from top to bottom.
This seems coherent to me since a Range is a contiguous zone in a document.
Section 5 selects the Plage object.
First problem: the Range object contains six cells, but when it is selected, the selection contains only two instead of the six that one might hope for. When you select a Range in a Table object, it would seem that the selection is not the Range area, but a rectangular area based on the extreme cells of the Range.

If I select the first column, the Selection object contains two cells, the Plage object contains six, which is consistent with the previous result.
Second problem: Sections 3 and 4 indicate that the Plage object contains 6 cells, but they only find 5 cells to display. Section 4 generates an error message indicating that the Plage.Cells (6) cell does not exist. What happened to my ghost cell?


Excuse me for the length of the message, these are not very important subjects, but that occupies me during the confinement.


Code:
Sub ComparaisonSelectionRange(NumeroColonne As Integer)
    Dim Plage As Range, Cellule As Cell
    Dim I As Integer, J As Integer
    Debug.Print "Colonne n° " & NumeroColonne
    On Error GoTo SiErreur
    ActiveDocument.Tables(1).Columns(NumeroColonne).Select
    
    1 'On affiche le nombre de cellules de la sélection
      'et leurs coordonnées
    With Selection
      Debug.Print " 1 Sélection"
      Debug.Print "     Nombre de cellules : " & .Cells.Count
      Debug.Print "     Coordonnées des cellules de la sélection : "
      For Each Cellule In .Cells
        CoordonnéesCellule Cellule, I, J
        Debug.Print "      (" & I & "," & J & ")"
      Next
      Debug.Print
    End With
    
    2 'On définit le range de la sélection, et on le sélectionne
    Set Plage = Selection.Range
    Debug.Print " 2 L'objet Plage est défini"
    Debug.Print
    
    3 'On parcourt la collection Plage.Cells
    With Plage
      Debug.Print " 3 Plage"
      Debug.Print "     Nombre de cellules : " & .Cells.Count
      Debug.Print "     Coordonnées des cellules de la plage : "
      For Each Cellule In .Cells
        CoordonnéesCellule Cellule, I, J
        Debug.Print "      (" & I & "," & J & ")"
      Next
      Debug.Print
    End With
    
    4 'On parcourt la collection Plages.Cells par item
    Dim K As Integer
    With Plage
      Debug.Print " 4 Plage"
      Debug.Print "    Nombre de cellules : " & .Cells.Count
      Debug.Print "    Coordonnées des cellules de la plage : "
      For K = 1 To .Cells.Count
        CoordonnéesCellule .Cells.Item(K), I, J
        Debug.Print "      (" & I & "," & J & ")"
      Next K
    End With
    
    5 'On sélectionne l'objet Plage
    Debug.Print
    Plage.Select
    Debug.Print " 5 Plage sélectionnée"
    Debug.Print "     Nombre de cellules de la plage : " & Plage.Cells.Count
    Debug.Print "     Nombre de cellules de la sélection : " & Selection.Cells.Count
    Debug.Print
    
    Set Plage = Nothing
    Set Cellule = Nothing
    Exit Sub
    
    SiErreur:
    MsgBox "K = " & K & ". " & Err.Description
    Resume 5
    
  End Sub
   
   
   
  Sub CoordonnéesCellule(Cellule As Cell, I As Integer, J As Integer)
    'inspirée de macropod
    I = Cellule.RowIndex
    J = Cellule.ColumnIndex
  End Sub
   
   Sub Test()
    'Mettre un point d'arrêt sur la dernière instruction

     ComparaisonSelectionRange 2
     ComparaisonSelectionRange 1
   End Sub
Reply With Quote