Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Réf [A1]

24 réponses
Avatar
Michel MTO
Bonjour à toutes et à tous,

Je me demandait si on peut mettre en VBA :
[E & i] où i représente une variable, pour référence une cellule.

Je sais qu'on peut le faire comme ceci :
Range("E" & i)

Merci pour vos réponses

Michel MTO

4 réponses

1 2 3
Avatar
Daniel.C
J'ai dit "laxiste" car, je ne me rappelle plus dans quelle commande, si
tu entres Range("A1"), c'est considéré comme un objet "range" et non
pris pour sa valeur par défaut. D'où message d'erreur. C'était, à mon
sesn, ce que FS voulait dire :
"Mais ils prennent de mauvaises habitudes et il arrive un jour où ça
coince.."
Daniel

Mais c'est aussi laxiste ! Si j'ai bien compris, il faut mettre :
range("f10:f50009").Value = [2*row(1:50000)+1]



Supposons que tu n'as pas l'habitude d'utiliser la propriété
de l'objet associé à l'action que tu veux exécuter, pour le néophyte,
pour cette ligne de code Doit-il utiliser
Set Rg = Feuil1.Range("A1:G10").Cells OU .Value OU RIEN ?

Dans les 2 boucles, si je ne suis pas habitué à considérer la propriété
d'un objet comme étant ce qui est retourné par cet objet, comment puis-je
arriver à savoir et à comprendre si je dois utiliser .Rows et .Cells dans
les 2 boucles précédentes ?
C'est l'essence même de l'action du code.
For Each R In Rg.Rows
For Each E In R.Cells

La ligne de code suivante :
E = E + 1
Je n'ai pas déclaré la variable E comme objet Range
je n'ai pas non plus utilisé .Value associé à l'objet E
Si tu exécutes le code, les cellules demeurent vides.
Si tu débutes en programmation, tu cherches en tabarnac
ce qui se passe. Non ? Et pourtant, aucun message d'erreur, la procédure
tourne tout à fait correctement !

L'absence du .value à un objet dûment déclaré comme "Range"
n'est pas en soi du laxisme puisqu'Excel est conçu comme ça
et le permet (valeur par défaut) ... mais apprendre à programmer en
utilisant un langage approximatif comme dans l'exemple précédent
rend la tâche plutôt ardue. C'est là qu'entre en jeu la notion de laxisme.

a) Déclaration des variables non obligatoires
b ) Typage des variables non obligatoires
c ) utilisation ou non des "propriétés" associées à l'objet en relation
avec le résultat escompté... (pourquoi les cellules demeurent vides
à l'exécution du code proposé? )
d ) l'introduction de syntaxe comme celle-ci [A1]

Je crois que c'est là où voulait en venir Frédéric dans son propos.

Si tu sais ce que tu fais, tu peux à l'occasion te permettre des raccourcis,
mais mentionner la "propriété" de l'objet améliore la lecture, la
compréhension du code et facilite l'assimilation de ce dernier.


Avatar
Daniel.C
> For Each e In R.Cells
e = e + 1
Msgbox TypeName(e)
Next

Le message retourne "Integer" on est loin
d'un objet "Range" et ça vous donne une petite
idée pourquoi les cellules demeurent vides !
;-))



Si tu exécutes le code ligne à ligne, tu vois dans la fenêtre des
variables locales, que e est défini comme Variant/Object/Range
A la ligne suivante e est défini comme Variant/Double (XL2007). Ce qui
est également normal (à l'"Integer" près).
Daniel
Avatar
MichDenis
Désolé, je viens de me rendre compte qu'il manquait un bout de mon message :

La procédure complète proposée allait comme suit :

'------------------------------------
Sub Ok()
Dim Rg As Range, R As Range
Set Rg = Feuil1.Range("A1:G10").Cells
'si tu veux boucler sur chaque cellule de chaque ligne
'de la plage de cellules
For Each R In Rg.Rows
For Each e In R.Cells
e.Value = e + 1
Msgbox TypeName(e)
Next
Next
End Sub
'------------------------------------

Supposons que tu n'as pas l'habitude d'utiliser les propriétés
de l'objet associées à l'action que tu écris cette ligne de code,
Set Rg = Feuil1.Range("A1:G10").Cells OU .Value OU RIEN ?
pour le néophyte, pour cette ligne de code,
doit-il utiliser .Cells , .Value OU Rien(sans propriété) ?
Si la propriété par défaut d'un objet "Range" est "Value" pourquoi
dans ce cas c'est .Cells? Pourquoi Excel comprend ".cells" si on
n'utilise pas de propriété ?

Dans les 2 boucles, si je ne suis pas habitué à considérer la propriété
d'un objet comme étant ce qui est retourné par cet objet, comment puis-je arriver
à savoir et à comprendre si je dois utiliser .Rows et .Cells dans les 2 boucles
précédentes ? C'est l'essence même de l'action du code.

.Rows Retourne la collection des lignes de la plage de cellules Rg
For Each R In Rg.Rows
.Cells Retourne la collection des cellules de chacune des lignes de la plage
For Each E In R.Cells

La ligne de code suivante :
E = E + 1
Je n'ai pas déclaré la variable E comme objet Range
je n'ai pas non plus utilisé .Value associé à l'objet E
Si tu exécutes le code, les cellules demeurent vides.
Si tu débutes en programmation, tu cherches en tabarnac
ce qui se passe. Non ? Et pourtant, aucun message d'erreur, la procédure tourne tout à
fait correctement !

L'absence du .value à un objet dûment déclaré comme "Range"
n'est pas en soi du laxisme puisqu'Excel est conçu comme ça
et le permet (valeur par défaut) ... mais apprendre à programmer en
utilisant un langage approximatif comme dans l'exemple précédent
rend la tâche plutôt ardue. C'est là qu'entre en jeu la notion de laxisme.

a) Déclaration des variables non obligatoires
b ) Typage des variables non obligatoires
c ) utilisation ou non des "propriétés" associées à l'objet en relation
avec le résultat escompté... (pourquoi les cellules demeurent vides
à l'exécution du code proposé? )
d ) l'introduction de syntaxe comme celle-ci [A1]

Je crois que c'est là où voulait en venir Frédéric dans son propos.

Si tu sais ce que tu fais, tu peux à l'occasion te permettre des raccourcis,
mais mentionner la "propriété" de l'objet améliore la lecture, la
compréhension du code et facilite l'assimilation de ce dernier.
Avatar
MichDenis
| Set Rg = Feuil1.Range("A1:G10").Cells OU .Value OU RIEN ?
| pour le néophyte, pour cette ligne de code,
| doit-il utiliser .Cells , .Value OU Rien(sans propriété) ?

Pour ceux qui ne sauraient pas, l'objet Range a une
propriété par défaut qui est Value mais elle a aussi
une collection par défaut qui est cells

Par exemple, si on écrit :
For each C in Range("A1:A5")

Il est sous entendu que on veut dire :
For each C in Range("A1:A5").Cells

Cells est la collection par défaut d'un objet Range.

Lorsque l'on écrit :
Set Rg = Feuil1.Range("A1:G10")
Excel que l'on veut définir un objet Range "Rg"
et il nous retourne la collection par défaut Cells
1 2 3