IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Range : les différentes écritures [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Par défaut Range : les différentes écritures
    Bonjour,

    Pour sélectionner les cellules A1 à D4, il me semble qu'il y a (au moins) ces 3 méthodes :



    Quelles sont les différences entre ces écritures ? Y en at-il d'autres ?

    D'avance, merci

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, voir dans la FAQ, par exemple ici ou .

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour siril

    Citation Envoyé par siril Voir le message

    Quelles sont les différences entre ces écritures ? Y en a-t-il d'autres ?

    Ca faisait longtemps que je voulais faire cette recherche. Mais personne ne posait la question. Merci à toi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub tt()
     
    Dim r As String
    r = "A1:D4"
    Range(r).Select
     
    Range("A1:D4").Select
     
    Range(Cells(1, 1).Address & ":" & Cells(4, 4).Address).Select
     
    Range("A1", "D4").Select
     
    Range(Cells(1, 1), Cells(4, 4)).Select
     
    Range("A1").Resize(4, 4).Select
     
    Range("E1").Offset(, -4).Resize(4, 4).Select
     
    Application.Goto ActiveWorkbook.Sheets("Feuil1").Range("A1", "D4")
     
    Application.Union(Range("A1", "B4"), Range("C1", "D4")).Select
     
    Cells.ClearContents
     
    Range("A1", "D4").Value = "test"
    ActiveSheet.Range("a1", ActiveSheet.Range("D1").End(xlDown)).Select
     
    ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
     
    End Sub

  4. #4
    Invité
    Invité(e)
    Par défaut
    Salut,

    Sans utiliser de Parent pour le Range (Ex : Application), ni de propriété intermédiaire entre Range et Select (Ex: .Offset), il n'y a pas tant de méthode que ça.

    Il y a aussi l'écriture avec le nom complet d'un Range à l'intérieur d'un Range en utilisant l'écriture accès collection:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub Test()
        Set Rng = Range("[Classeur1]Feuil1!A1:A4")
        'Set Rng = [[Classeur1]Feuil2!A1:A4]
        Debug.Print Rng.Address(External:=True)
        Application.Goto Rng
    End Sub
    Pour le select, on peut utiliser Application.Goto utilisé par Docmarti. Mais je n'ai jamais vraiment utilisé cette écriture pour le Range (elle est dangereuse) surtout aussi que ça ne marche pas si le Parent du Range n'est pas correctement renseigné dans le cas où il y aurait plusieurs feuilles.



    -------------------------------

    EDIT (et léger hors-sujet en même temps ):

    Ça confirme que le Range est compliquer à comprendre et que finalement, écrire Range(...) en dehors d'une feuille de calcul (Feuil1 par exemple) ne signifie pas systématiquement ActiveSheet.Range(...) comme cela est écrit sur MDSN.
    Lorsqu’elle est utilisée sans qualificateur d’objet, cette propriété est un raccourci pour ActiveSheet.Range (elle renvoie une plage à partir de la feuille active ; si cette dernière n’est pas une feuille de calcul, la propriété échoue).
    Puisqu'en activant une feuille de graphique dans le même classeur, Range("[Classeur1]Feuil1!A1:A4"), Range("Feuil1!A1:A4") ou [[Classeur1]Feuil1!A1:A4],[Feuil1!A1:A4] fonctionnent dans un module standard même si cela échoue tout de même lorsque le classeur actif est différent de celui spécifié à l'intérieur du Range.

    C'est d'ailleurs confirmé par le fait que ActiveSheet.Range("Feuil1!A1:A4") échoue dans le cas où la feuille active est par exemple un graphique (ce qui parait normal) ce qui n'est pas le cas sans qualificateur d'objet.


    ... et vu que les appels passent par les classes Global et _Global qui sont non documentées, ça n'aidera pas à comprendre ce que fait réellement le Range.
    Dernière modification par Invité ; 21/07/2014 à 17h43.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Par défaut
    Merci à tous pour vos réponses

    @kiki29, j'ai pris le temps de lire. Une dizaine de fois chacun des liens. Pour moi qui me me remets au VBA, cela ne m'aide pas beaucoup... voir m'embrouille ^_^'

    @Docmarti, de rien ! par contre, je ne te remercie pas de me montrer encore d'autre méthodes ! :p

    @Nouveau2, je pense comprendre ce que tu as écris, mais il me semble que ça ne répond pas directement à la question (est ce que ces différentes écritures changent quelques choses, sur le fond ou sur la forme ?).

  6. #6
    Invité
    Invité(e)
    Par défaut
    La 2ème partie est un hors-sujet.
    Ça ne répond pas à la question.

    La 1ère partie est une méthode peu utilisé mais qui est une solution comme une autre pour indiquer que le range fait référence à une feuille bien précise en spécifiant le nom de la feuille à l'intérieur même de la propriété Range.
    Mais c'est vrai que ça ne répond pas vraiment non plus à la question C'est la même écriture que la 1ère ligne de code donné dans ton 1er poste.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Par défaut
    Citation Envoyé par siril Voir le message
    Pour sélectionner les cellules A1 à D4, il me semble qu'il y a (au moins) ces 3 méthodes :


    Quelles sont les différences entre ces écritures ? Y en at-il d'autres ?

    D'avance, merci
    Pour être plus précis sur ma question :
    Est ce que sur le fond, l'une ou l'autre de ces écritures peut changer le résultat d'une action / opération / valeur... ?
    Est ce que sur la forme, l'approche prend un sens différent ? Est ce que l'une de ces méthodes est plus élégante ?

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Est ce que sur le fond, l'une ou l'autre de ces écritures peut changer le résultat d'une action / opération / valeur... ?
    Absolument pas, puisque ça fait référence au même Range et le compilateur sait très bien interpréter !
    Est ce que sur la forme, l'approche prend un sens différent ? Est ce que l'une de ces méthodes est plus élégante ?
    La propriété Range peut recevoir soit un String ou alors d'autres Range (Cellules qui borne la plage) dans ce cas, ça permet un accès plus facile avec des Integer ou des Long !
    L'écriture entre crochets utilise en fait la fonction "Evaluate" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox Evaluate("A1").Value
    équivaut à ceci :
    Hervé.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Par défaut
    Merci Hervé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/08/2005, 12h42
  2. Récupérer les différentes températures de mon PC
    Par bronco dans le forum Assembleur
    Réponses: 2
    Dernier message: 29/07/2005, 09h35
  3. Réponses: 3
    Dernier message: 24/05/2005, 12h35
  4. [Débutant] Les opcodes sur les différents processeurs
    Par loverdose dans le forum Assembleur
    Réponses: 11
    Dernier message: 03/02/2005, 13h32
  5. faire un group by sur les différents niveau de code
    Par speed034 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/10/2004, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo