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 :

Tactiques pour adresser les cellules en VBA [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut Tactiques pour adresser les cellules en VBA
    Bonjour

    Je voudrais connaitre vos diverses tactiques pour adresser des cellules en vba autrement que par les numéros de lignes et colonnes.

    J'utilise habituellement des constantes, soit deux par cellule avec l'objet Cells(117, 4), soit une seule en texte pour l'objet Range ("D115"). C'est nettement mieux que de laisser les chiffres se balader partout dans le code, mais je voudrais savoir comment améliorer la chose.

    Je pourrais nommer les objets Range que j'adresse en code, mais j'hésite encore à le faire.

    Comment faites-vous?

    Désolé si cette question est un classique, mais la recherche sur google est assez difficile.

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par mumen Voir le message
    Je pourrais nommer les objets Range que j'adresse en code, mais j'hésite encore à le faire.
    C'est la solution que j'allais proposer.

    Soit l'adresse est très volatile (n° de ligne dans une liste) et j'utilise une variable.
    Soit l'adresse n'a quasiment aucune chance de changer et je mets le numéro en dur dans le code.
    Soit l'adresse a une probabilité non négligeable de changer et je nomme la cellule/plage.

    Reste une autre méthode utilisée pour des cas particulier : lancer une recherche (Find, Match ou autre).
    Par exemple pour une liste avec des colonnes pouvant être à des positions différentes mais pouvant être retrouvé par une chaine de caractère en entête.

    Pour ce qui est de l'utilisation Range/Cells, j'utilise systématiquement Cells pour une cellule unique et Range uniquement pour une plage de plusieurs cellules.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Et ... pour tout ce qui est données structurées, utiliser des tableaux que vous pouvez manipuler en tant qu'objet. Voir le tutorile de Pierre Fauconnier sur le site, https://fauconnier.developpez.com/tu...ux-structures/
    Vous pouvez utiliser les listcolumns, le databoday range, ....

  4. #4
    Membre expérimenté
    Avatar de mumen
    Homme Profil pro
    Développement à façon multisecteur.
    Inscrit en
    Mars 2004
    Messages
    566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Développement à façon multisecteur.

    Informations forums :
    Inscription : Mars 2004
    Messages : 566
    Points : 1 381
    Points
    1 381
    Par défaut
    Merci à vous deux, j'ai ma réponse et plus.

    La feuille avec code que je prends en charge, écrite par un non développeur et donc assez désordonnée, contient une bonne centaine de variables de cellules et autant de contrôles. Il est plus facile de gérer les contrôles, puisqu'ils sont obligatoirement nommés (j'ai du coder pour donner une unité à ce nommage selon un liste que gère le concepteur initial). Pour les cellules, en effet il ne reste que le nommage, c'est ce qui me semblait, mais je voulais un avis réfléchi d'un meilleur niveau que le mien. Je l'ai, merci Menhir !

    Comme je suis développeur assez rare sous Excel, même si c'est depuis des décennies (j'ai connu Multiplan et j'ai bossé un peu sur Lotus123 à sa sortie!), je ne maitrise pas encore à fond la technique du nommage de cellule jusque dans les méandres du code VBA, mais cela va changer, que ce soit pour ce dév ou pour les suivants.

    La réponse de vinc_bilb ne me servira pas pour ce problème spécifique, puisque je n'ai ici qu'un seul énorme enregistrement interagissant sur deux onglets et générateur de consolidation dans une feuille centrale. Néanmoins, je découvre littéralement cette structuration dont j'avais vu passer les boutons, sans encore prendre le temps de regarder. C'est chose faite, puisque j'ai lu l'excellent tutoriel proposé, ce qui là aussi va changer mes habitudes puisque je vais adopter cette incontournable technique, donc merci aussi !

    Citation Envoyé par Menhir
    Pour ce qui est de l'utilisation Range/Cells, j'utilise systématiquement Cells pour une cellule unique et Range uniquement pour une plage de plusieurs cellules.
    Je suis parfaitement d'accord (comme avec le reste d'ailleurs) et c'est une des raisons qui m'a freiné dans l'emploi du nommage qui impose l'objet range dans tous les cas... Une autre raison est la lenteur probablement induite par l'indirection du nommage/range par rapport à l'accès direct à la cellule, qui sera sans doute sensible dans les cas limites. Mais dans les cas limites, on peut peaufiner, optimiser en "dur", etc.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 939
    Points : 28 936
    Points
    28 936
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    une des raisons qui m'a freiné dans l'emploi du nommage qui impose l'objet range dans tous les cas
    Même si ce n'est pas le sujet de cette discussion, je voudrais nuancer cette affirmation.
    Le gestionnaire des noms permet de nommer une cellule ou plage de cellules mais également une constante et une formule.

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

Discussions similaires

  1. Manipuler les adresse des cellules en VBA
    Par DjallelE dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/04/2018, 17h43
  2. [XL-2000] Comment faire pour distinguer les cellules qui commencent par
    Par Avinetor dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/06/2009, 14h36
  3. Réponses: 2
    Dernier message: 20/02/2008, 18h08

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