[Excel VBA] différents types d'objets 'range'

Fermé
Zorglub - 22 sept. 2010 à 12:12
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 - 22 sept. 2010 à 12:31
Bonjour,

Je cherche désespérément à comprendre les subtiles nuances des objets regroupés sous le type 'range'.
En effet, l'aide et l'explorateur d'objets prétendent dans de nombreux cas qu'une collection contient des objets 'range', mais souvent de nombreuses opérations sont interdites sur ces objets.

ex: ActiveSheet.columns(1) est censé renvoyer un objet range, mais de nombreuses propriétés/méthodes des objets range vont produire une erreur

Autre exemple, plus frappant:
Si on essaye de typer des variables as 'Range', de nombreuses opérations sont interdites:

Sub testtypes()

    Dim CellA As Range
    Dim CellB As Range
    
    For Each CellA In Range("A1:C3")
            
            CellB = CellA ' <- provoque une erreur !!
    
    Next

End Sub


Comment se fait-il qu'un objet de type range ne puisse pas être copié dans un autre ?

D'expérience, il semble que les range de 'sous-type' colonne ou cellule seule soient différents des ranges classiques, mais je ne parviens pas à manipuler ces objets en les typant. Quand ils ne sont pas typés, ou variant, je reste bloqué par des erreurs m'indiquant (plus ou moins clairement) que mon objet range ne me permet pas d'utiliser telle ou telle propriété (genre .value !) ou telle opération (genre copie dans une autre variable)

Quelqu'un comprend-t-il ses nuances de types ?
A voir également:

2 réponses

Bon,

J'ai résolu le problème d'affectation des objets:
Il faut utiliser l'instruction 'Set' pour affecter à un objet la référence d'un autre.
Set CellB = CellA


Bon, mais il reste des trucs louches sur les types rangée / colonne...
1
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
22 sept. 2010 à 12:31
Bonjour,

Un objet doit être instancié pour qu'il existe.

Dans ton exemple CellB est bien déclaré comme un objet Range mais il n'est pas créé.

Il faut faire un Set pour créer l'objet:
Set plage = Range("A1:G10")


;o)
0