Excel macro cells et range

Fermé
-
Messages postés
16547
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
19 janvier 2022
-
Bonjour,
Il est des fois où on peut indifféremment écrire Cells ou Range pour désigner un cellule ou son contenu... et il est des fois où ce n'est pas vrai. Je ne connais pa les nuances.
Si quelqu'un peut m"éclairer. .. Merci

6 réponses

Messages postés
17829
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
24 janvier 2022
4 909
Range peut faire référence à une seule cellule ou plusieurs cellules tandis que Cells ne fait référence qu'à une seule cellule

Exemple pour sélectionner la cellule B5

tu peux écrire:

Range.("B5").Select
'ou
Cells(5, 2).Select 'ce qui correspond à la cellule de la 5éme ligne et 2éme colonne

'ou encore plus simplement
[B5].select

Messages postés
16547
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
19 janvier 2022
3 260
Salut Mike
[B5].select

les crochets entourant B5 sont l'abréviation de la fonction évaluate et devrait être réservée pour utiliser VBA avec des fonctions excel style macro-complémentaires où worksheetfunction ne fonctionne pas et avec des formules matricielles mais avec les crochets, VBA considère qu'il s'agit d'une formule matricielle

par exemple la fonction nb.jours ouvres(A1;B1)
donnera en vba
lavar=[workday(A1,B1)]

mais tu es obligé d'utiliser evaluate (prise de tête) si un des paramêtres est une variable
nbre = 50
dep = CLng(Range("A1"))
lavar= Evaluate("workday(" & dep & "," & nbre & ")")

donc, ce crochet est mis plutôt par le syndrome du poil dans la main: je l'utilise donc souvent...

mais je n'ai jamais résolu des matricielles avec evaluate...
source
http://xcell05.free.fr/pages/prog/accvba.htm#Evaluate
Messages postés
16547
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
19 janvier 2022
3 260
Bonjour,
tu écris:
et il est des fois où ce n'est pas vrai

Je ne crois pas mais si tu as rencontré le cas, dis le ca interressera tt le monde...

généralement, on utilise cells dans des boucles car il est plus élégant que Range

for i=1 to 100
    for j=3 to 10
        tavar=cells(i,j)
        tavar= range(j & ":" & i)

mais les 2 écritures fonctionnent

pour désigner un cellule ou son contenu.
range ou cells désignent toujours une adresse et la propriété value est la propriété par défaut
Il y a des des procédures où on est pratiquement obligé de préciser que l'on travaille sur le contenu et uniquement sur le contenu. on écrit alors range("A1").value

pour te rendre compte écris quelque chose dans A1 puis cette macro
sub test()
mavar=range("A1")
marvar =range("A1").value
end sub

et met un espion sur ma var (débogage-ajouter un espion)
et lance la macro en pas à pas (F8)

Messages postés
16547
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
19 janvier 2022
3 260
Re
sur post 2 lire:
tavar=range(j & i)
au lieu de
tavar= range(j & ":" & i) !!!

excusez moi
Bonjour et merci à vous deux,
Je ne pige pas tout, (j"ai commencé à mettre mon nez dans l'informatique à 55 balais, et ça fait longtemps), mais je grapille dans vos courriers des enseignements intéressants.
Toutefois,
Quelle différence de signification entre Range(j & ":" & i) et Range(j & i) ?
Que signifie CLng(Range(A1))?
Merci.
Messages postés
17829
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
24 janvier 2022
4 909
Re,

Emporté par l'élan, il en est de même pour moi

Range.("B5").Select

il convient de supprimer le point après Range
Range("B5").Select

Pour répondre à la pertinente remarque de Michel_m concernant la référence de cellule entre crochet, c’était pour compléter la demande qu’il était possible de rencontrer Range, Cells mais également des raccourcis. Et pour ma part avec l’âge je deviens de plus en plus fainéant et use de ces fonctions.
Par contre comme Michel_m l’a souligné, concernant cette fin de phrase
et il est des fois où ce n'est pas vrai

Pour ma part je serai curieux de savoir, en informatique c’est vrai ou faux mais des fois ou peut être je ne vois pas
Messages postés
16547
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
19 janvier 2022
3 260
Bonjour,
Quelle différence de signification entre Range(j & ":" & i) et Range(j & i) ?
Range(j & ":" & i) était une erreur de ma part

Que signifie CLng(Range(A1))?
On transforme la date en nombre (un peu comme dans format nombre tu demandais "standard"

j"ai commencé à mettre mon nez dans l'informatique à 55 balais, et ça fait longtemps
je ne suis pas tout jeune non plus et je crois que c'est la m^me chose pour Mike !...

Excel entretient les vieilles neurones ;-)