Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

merinos-BernardEtang

XLDnaute Accro
Pour ecrire mes macros, je dois lire le contenu de cellules (et les commentaires joints)

pour ce faire je peux soit employer CELLS soit range.

je ne parviens pas à comprendre la diffence entre ces objets?
La seule chose que je vois est que cells

x=1
y=45
cells(x,y).value = "je suis la cellule A45"


mais il semble que l'on peut faire quelque chose comme

range("A4:E66").cells(2,3).value = "perdu"

C'est là que je suis un peu perdu....
Qui peut m'expliquer?
 
Re : range = Cells?

bonjour

en effet c'est possible

dans ce cas cells(n,m) est relatif par rapport au range qui le precede
la cellule ainsi désignée est sur la n ieme ligne du range et la m ieme colonne du range

par contre je ne sais vraiment pas a quoi peut servir ce genre de denomination !!!
 
Re : range = Cells?

Bj à tous,


range("A1") -> adressage d'une cellule par les ref texte de la cellule

range("A1:B27") -> adressage sur une plage de cellule

cells(1,1) -> adressage par une cellule à la fois

cells(1,1).offset(0,1) -> la cellule sur la même ligne que A1 et une colonne à coté

en gros de ce que je comprends de range et cell

range c'est un "paquet" de cellule (plage en excel)
cells c'est une cellule à la fois

je n'ai pas mis toutes les syntaxes !!! il y en a trop ;-)
 
Re : range = Cells?

Salut à tous
Range = plage
petite parenthèse :
x=1
y=45
cells(x,y).value = "je suis la cellule A45"

Est faux : Cells(1,45) = "Je suis dans la cellule AS1"
Cells : référence d'une cellule d'une plage : c'est une propriété de Range, et de ce qui s'y rattache (application ou worksheet)

Le "problème" de distinction, vient du fait qu'Excel à des valeurs par défaut. Et quand tu écris Cells(2,4), ça revient à écrire Activesheet.Cells(2,4) : D2 de la feuille active.

range("C3:G14").cells(2,3) : 2me ligne 3me colonne de la plage définie par ce qui précéde soit "E4" de la feuille active
Que l'on peut écrire aussi :
range("C3:G14").cells(8) (8me cellule de la plage (C3, D3, E3, F3, G3, C4, D4, E4)

Pour faire simple, personnellement j'emploie :
- Range quand la colonne est fixe et j'utilise les lettres pour la désigner
- cells quand elle évolue et j'use des numéros de colonne

Range("B" & x) peut aussi être remplacé par Cells(x,"B"), mais ....
Cells(2, "C").Select : sélectionne la cellule "C2"
Range("C3:G14").Cells(2, "C").Select : sélectionne la cellule "E4"

C'est sûrement rigolo à faire, mais ingérable en dépannage alors que
Range("C3:G14").Cells(2, 3).Select : sélectionne la cellule "E4"
de même Range("BZ" & 1) est plus lisible que cells(1,78)

Pour moi, la lisibilité d'un code est essentielle. Même si quand on le crée, ça a peu d'importance, quand on revient dessus après des mois, et des milliers de lignes de code, pour dépanner ou faire évoluer la macro, on voit toute la différence. Et je ne parle pas de macro qui ont été crées par des tiers.

A+
 
Re : range = Cells?

Bonjour,

Je m'excuse de déterrer un sujet si vieux, mais je préfère faire cela que de recréer un sujet sur le même problème...

On me demande d'optimiser un code écrit il y a quelques années et j'ai du mal à comprendre certaines lignes.
D'après ce que vous dites, on utilise range("X").Cells("Y") si X est une plage de cellules ?

Dans le code que l'on me demande d'optimiser, j'ai cette ligne :
Code:
Dim i as Integer
Dim Nom as Variant
Nom = ThisWorkbook.Worksheets("Feuil1").Range("B6").Cells(i, 2).Value
Est-ce-que cela veut dire que le code va chercher la valeur de la cellule située à droite (1 correspondant à la colonne de B6, donc 2 nous mène à droite ?) et à i lignes en dessous de la cellule B6 ?

Si je remplace par :
Code:
Nom = ThisWorkbook.Worksheets("Feuil1").Cells(i, 7).Value
Est-ce-que cela aura le même effet ? Si oui, le code est un peu tiré par les cheveux...

Merci d'avance !
 
Re : range = Cells?

Bonjour Chalafraiz , bonjour à tous,
Dans ton cas il faut savoir que chaque cellule d'une feuille est considérée comme la cellule(ligne 1, colonne 1) d'un tableau.
Ici la ligne 1 est en fait la premiére ligne du tableau qui commence en B6 (soit ligne 6 de la feuille)
Ta ligne
VB:
ThisWorkbook.Worksheets("Feuil1").Range("B6").Cells(1, 2)
Renvoi la cellule ligne 1 colonne 2 du tableau commençant en B6 (soit C6)

Cordialement
 
Re : range = Cells?

Efgé : merci pour ta réponse rapide.

Cela revient donc au même d'écrire .Range("B6").Cells(1, 2) et .Cells(6, 3).

Je comprends l'utilité si jamais les deux composantes de Cells(n,m) sont variables, mais dans mon cas ou j'itère juste sur la colonne C, le code suivant sera sûrement plus clair :
Code:
Nom = ThisWorkbook.Worksheets("Feuil1").Cells(i, 7).Value
 
Re : range = Cells?

Bonjour à tous,

Nom = ThisWorkbook.Worksheets("Feuil1").Range("B6").Cells(i, 2).Value
Si je remplace par :
Nom = ThisWorkbook.Worksheets("Feuil1").Cells(i, 7).Value
Est-ce-que cela aura le même effet ?

heu .... non
pour i=1
1)-Range("B6").Cells(i, 2).Value correspond à la cellule C6
2)-Cells(i, 7).Value correspond à la cellule G1

pour avoir l'équivalent de 1) il faudrait écrire:
Cells(i + 5, 3).Value

A+
 
Re : range = Cells?

Bonjour à tous

Je vois bien le i dans le code mais pas la boucle ? 😉
On peut aussi écrire pour y voir plus clair
Code:
Sub Test()
Dim i as Long
With Sheets("Feuil1")
For i=1 To 5 ' juste pour l'exemple
Msgbox Cells(i,"C").Address
Next i
End With
End Sub

PS: Il serait quand même plus judicieux d'ouvrir ton propre fil de discussion.
(Juste au cas ou l'initiateur du fil n'apprécie pas qu'on vienne poser sa question dans sa question 😉 )
 
Re : range = Cells?

Bonjour

La notion de range est certainement la plus utile et la moins intuitive de VBA. La page sur le sujet d'excelabo
Ce lien n'existe plus
est et de loin la plus lue de tout le site !

En fait les notions de
range("l'adresse d'une cellule ou d'une plage de cellule")
comme
range("A1") ou range ("B12:E34")
tout comme les références par le N° de ligne et le N° de colonne pour une seule cellule
=cells(n°ligne, N° de colonne)
=cells(2,3)
sont assez faciles à comprendre.
On peut utiliser une variable dans ces écritures :
cells(i,3)
ou bien
range("R" & i & ":T" & j)
quand on doit faire référence à une seule cellule avec des variables c'est évidemment plus facile d'utiliser cells que range.

Ce qui est moins évident c'est d'une part l'écriture d'une plage avec cells et les range de range.
Range(Cells(1, 1), Cells(5, 10)) correspond à range("A1:E10")

Quant aux range de range j'ai essayé d'expliquer cela ici
Ce lien n'existe plus
mais je ne commencerai pas à découvrir l'écriture des plages de cellules en VBA avec cet oiseau là 🙂
 
Re : range = Cells?

Paf, Efgé : Oui excusez-moi, je me suis rendue compte après que j'avais mélangé lignes et colonnes... L'exemple de Staple1600 sera donc plus judicieux (Paf, j'ai peur que le (i+5) ne saute 5 lignes à chaque itération :/).

Staple1600, d'habitude il est demandé de vérifier par une recherche si le sujet n'existe pas déjà, donc c'est vrai que j'ai préféré continuer cette discussion plutôt que d'en créer une autre, mais je me rends compte que l'auteur (Mérinos) n'a peut être pas envie d'être spammé pour ce sujet... Désolée !

Misange : merci pour tes liens, je vais aller étudier ça de près 🙄
 
Re : range = Cells?

Bonsoir à tous

Je ne faisais qu'émettre une opinion 😉 vu l’ancienneté du fil et parce que au fond ta vraie question c'est l'optimisation d'un code VBA dont le peu que l'on a vu ne permets pas d'optimiser grand chose 😉
D’où ma suggestion d'ouvrir ton propre fil en y mettant cette fois tout le code à optimiser ou plutôt pour commencer
la procédure qu'on te demande d'optimiser.
NB: Tu as eu raison des faire des recherches avant
(C'est une qualité rare chez les nouveaux* membres 😉)

Pour finir, Merinos n'est pas revenu ici depuis le 06/12/2011, moindre est donc le mal.😉

PS: * En regardant ton profil, tu n'es pas vraiment un perdreau de l'année 😛 (niveau XLD s'entend) 😉
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
13
Affichages
652
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…