Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

macros commandes: absolue et relative ?

629 views
Skip to first unread message

Monique Brahier

unread,
Jun 26, 2000, 3:00:00 AM6/26/00
to
Bonjour

Je désire comprendre au moyen d'un exemple concret l'utilisation de la
fonction relative et absolue dans la création d'une macro commande au moyen
d'Excel 2000.

Merci de m'aider....

Catherine

unread,
Jun 26, 2000, 3:00:00 AM6/26/00
to
Enregistre simplement cela :
Une première macro que tu appelles RefAbsolue.
Tu enregistres un simple déplacement dans la feuille qui descend avec la
flèche du clavier d'une cellule vers le bas (disons que tu étais en A2 et
que tu descends en A3).

Puis une seconde que tu appelles RefRelative.
Tu vas enregistrer exactement la même chose, mais APRES avoir cliqué sur la
petite icône Référence relative.

Tu verras facilement à l'exécution la différence entre les deux :
La première te renverra toujours dans la cellule A3 (si tu étais descendu
sur la cellule A3 pendant l'enregistrement).
La seconde te descendre d'une cellule par rapport à l'endroit où tu es au
moment où tu exécutes la macro.

Et le code est bien sûr différent aussi :
Range("A3").Select 'en absolu
ActiveCell.Offset(1,0).Range("A1").Select 'en relatif
Que tu peux d'ailleurs facilement remplacer par
ActiveCell.Offset(1,0).Select
Et si tu veux savoir ce que vient faire le Range("A1") qui ne sert
apparemment à rien, exécute ça :
ActiveCell.Offset(1,0).Range("A1:B2").Select
---
Gros bisous, Kenavo (et Miaou).
Catherine (et Sainte Zaza)

Monique Brahier <mon...@cfi.ch> a écrit dans le message :
uq3mV223$GA.270@cppssbbsa04...

Monique

unread,
Jun 26, 2000, 3:00:00 AM6/26/00
to
Merci pour ton explication, maintenant je saisi parfaitement la différence.
Reste à trouver une utilisation concrète...
A bientôt et gros bisous
Monique

Catherine a écrit dans le message ...

Sabatier

unread,
Jun 26, 2000, 3:00:00 AM6/26/00
to
très belle explication, catherine et un grand merci (exceptionnellement
pas à laurent qui, lui, ne travaille pas au taupe niveau de VBA)
mais je me (te) (vous) pose une question : je crois me souvenir que les
macros Excel 4 permettaient de mélanger réf aboslues et réf relatives ;
je n'y suis jamais parvenu en VBA, clique que clique sur l'icône de la
barre d'outils de l'enregistement
serait-ce une nouvelle fois une erreur de mes sens abusés (en d'autres
termes, je suis c...ou quoi)?
merci à celui qui me donnera une réponse, même si elle se limite à un
mot
cordialement
jps (du gouleyant beaujolais)

Catherine

unread,
Jun 26, 2000, 3:00:00 AM6/26/00
to
si si tu peux très bien mélanger en cours d'enregistrement : il te
suffit d'activer/désactiver l'icône Références relatives quand tu veux
changer de mode. Tu as dû t'emmêler les clics... ou alors tu as essayé
avec des déplacements qui ne sont pas affectés par le mode
d'enregistrement.
Je pense par exemple à CurrentRegion (Ctrl *) qui est correctement
enregistré (en relatif) même quand tu n'as pas actvé les références
relatives. Et il y a d'autres exemples possibles.
Essaie avec juste une flèche bas, une fois en absolu, puis Icône pour
passer en relatif, re-flèche bas etc...

--
Gros bisous, Kenavo (et Miaou).
Catherine (et Sainte Zaza)

Sabatier <jps...@club-internet.fr> a écrit dans le message :
39578B60...@club-internet.fr...

Sabatier

unread,
Jun 26, 2000, 3:00:00 AM6/26/00
to
non ce que je veux dire c'est que si tu commences par une sélection de
cellules relatives puis par la sélection d'une cellule absolue puis à
nouveau par des cellules relatives, ton offset se fera par rapport à ta
cellule absolue et non pas par rapport à ta première sélection de
cellules relatives
et je trouve cela bien ennuyeux j'ai besoin de repartir sur des cellules
relatives par rapport aux relatives précédentes avec des absolues
entrelardées
(comme tu connais maintenant les grattons, ce nouveau problème de
couenne ne devrait pas gripper la rotation circonvolutrice de ton
neurone)

Catherine

unread,
Jun 26, 2000, 3:00:00 AM6/26/00
to
tu pourrais récupérer un numéro de ligne-colonne, dans ta sélection
relative.
Et la traiter comme de l'absolu avec Cells(li, col).... pour t'accrocher
dessus pour le prochain Offset.
tu parlais d'acrobatie ???

--
Gros bisous, Kenavo (et Miaou).
Catherine (et Sainte Zaza)

Sabatier <jps...@club-internet.fr> a écrit dans le message :

3957B6D7...@club-internet.fr...

Christian Herbé

unread,
Jun 26, 2000, 3:00:00 AM6/26/00
to Sabatier
Sabatier a écrit:
>
> dernière minute après nouveau test DANS UNE MEME FEUILLE : ça ne marche
> pas
> sélection relative de A1:A4 copy
> sélection absolue de B1 paste
> sélection relative de A5:A8 copy
> sélection absolue de C1 paste

Ca me donne bien un joyeux mélange de relatif et absolu ?

> ce que je veux, c'est :
> me positionner en A9 et lancer la macro pour obtenir
> en B1 le paste de A9:A12
> et en C1 le paste de A13:A16

Ben oui mais lequel doit être relatif ?

> ce n'est sûrement pas à toi christian que je vais dire "do you see what
> I mean" mais je ne connais pas le patois lorrain

Moi non plus si ça peut te rassurer (et guère mieux l'Anglais!), juste
quelques expressions ou mots !
Tiens, un au hasard qui surprend les non-Lorrains et leur surprise...
Surprend les Lorrains convaincus qu'ils sont que le mot est issu du
Français usuel:
"cornet" au lieu de sachet ex:
<< un cornet de bonbons >>
Allez, encore un qui m'amuse:
lorsqu'un chien voit un chat, il a le poil qui se dresse sur le dos;
mais il n'y a pas de verbe français pour décrire cela. En patois, on dit
(à propos du chien):
il "heurse" !
Je pense que ça vient de << hirsute >>?

Christian Herbé

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to

Sabatier a écrit :


>
> non ce que je veux dire c'est que si tu commences par une sélection de
> cellules relatives puis par la sélection d'une cellule absolue puis à
> nouveau par des cellules relatives, ton offset se fera par rapport à ta
> cellule absolue et non pas par rapport à ta première sélection de
> cellules relatives

J'ai été moi aussi déstabilisé en passant du langage XL4 à VBA à propos
des références; ce à quoi tu fais allusion me semble être d'avantage une
"mauvaise habitude" acquise par l'obligation de se placer sur une
cellule pour la traiter(XL4). En VBA, j'utilise beaucoup les variables
en guise de références comme l'explique Catherine dans son dernier
message.


> et je trouve cela bien ennuyeux j'ai besoin de repartir sur des cellules
> relatives par rapport aux relatives précédentes avec des absolues
> entrelardées

Peux-tu donner un exemple ?


--
____________________________________________
/
Christian Herbé /
Centre INRA de Nancy /
UMR ENGREF-INRA Ressources Forêt-Bois /
F-54280 CHAMPENOUX ||
phone: 03.83.39.40.59 \
Fax: 03.83.39.40.69 \
mailto:he...@nancy.inra.fr \
___________________________________________\

Sabatier

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to
christian
merci de ta contribution, toujours pleine de sagesse comme d'hab (pour
parler comme ton fiston que tu salues pour moi au passage)
en fait je crois que CC avait raison en disant que je mélangeais les
clics avec l'icône dont il n'est pas toujours facile de voir si elle est
"allumée" ou non
j'ai refait des tests suite à son post et on peut bien alterner
références absolues et relatives, ces dernières restant relatives par
rapport aux autres relatives...si j'ai bien vu

dernière minute après nouveau test DANS UNE MEME FEUILLE : ça ne marche
pas
essaie christian cela et donne moi ton sentiment

sélection relative de A1:A4 copy
sélection absolue de B1 paste
sélection relative de A5:A8 copy
sélection absolue de C1 paste

ce que je veux, c'est :


me positionner en A9 et lancer la macro pour obtenir
en B1 le paste de A9:A12
et en C1 le paste de A13:A16

ce n'est sûrement pas à toi christian que je vais dire "do you see what


I mean" mais je ne connais pas le patois lorrain

à signaler que si je paste (asciute ou pas asciute) dans la feuille 2,
j'obtiens bien ce que je souhaite

à + et merci pour toute réponse

cordialement
jps (du gouleyant beaujolais)

Jacky @*10-1

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
En Génèral pour bien differencier les deux dans les formules de calcul
sur la propriète formulaLocal je mélange du $A$1 pour de l'absolu et du
L(+y)C(-x) pour du relatif
A plus
Jacky

Sabatier a écrit dans le message <39578B60...@club-internet.fr>...


>très belle explication, catherine et un grand merci (exceptionnellement
>pas à laurent qui, lui, ne travaille pas au taupe niveau de VBA)
>mais je me (te) (vous) pose une question : je crois me souvenir que les
>macros Excel 4 permettaient de mélanger réf aboslues et réf relatives ;
>je n'y suis jamais parvenu en VBA, clique que clique sur l'icône de la
>barre d'outils de l'enregistement
>serait-ce une nouvelle fois une erreur de mes sens abusés (en d'autres
>termes, je suis c...ou quoi)?
>merci à celui qui me donnera une réponse, même si elle se limite à un
>mot

>cordialement
>jps (du gouleyant beaujolais)
>

Nathalie Mehu

unread,
Jun 29, 2000, 3:00:00 AM6/29/00
to
la macro relative va rechercher une certaine donneé dans la feuille de calcul
la macro absolue ira toujours rechercher une valeur dans une position donne par
exemple B4
Nathalie

Monique Brahier a écrit:

Nicolas

unread,
Jun 29, 2000, 3:00:00 AM6/29/00
to
Jean-Paul,
le Cahors n'étant pas le Beaujolais, j'ai finalement fini par finir par
comprendre ça qu'est-ce que tu voulais ! Bel effort, n'est-il pas ?

Toujours est-il qu'il me semble que le problème vient de ce que la macro
perd la notion de "cellule de départ". Je tente de m'expliquer :
tu cliques sur A1 : Range("A1").Select
tu copies A1:A4 : ActiveCell.Range("A1:A4").Copy
tu passes en références absolues
tu cliques sur B1 : Range("B1").Select
tu colles : ActiveSheet.Paste
tu repasses en références relatives et je pense que là est le problème : il
ne connait plus la cellule de départ, et il faut donc recliquer sur la
première cellule AVANT de repasser en références relatives :
Range("A1").Select
tu copies A5:A8 : ActiveCell.Range("A5:A8").Copy
tu passes en références absolues
tu cliques sur C1 : Range("C1").Select
tu colles : ActiveSheet.Paste

C'est pourtant simple, non ? ;-))

Il me semble que le code simplifié (et allégé) pourrait donner qqch de ce
genre :
ActiveCell.Range("A1:A4").Copy
With ActiveSheet
.Paste Destination:=.Range("B1")
End With
ActiveCell.Range("A5:A8").Copy
With ActiveSheet
.Paste Destination:=.Range("C1")
End With
Application.CutCopyMode = False

Et voilà la démonstration que ne raconte pas QUE des conneries : j'en fais
aussi !

Jean-Paul, dis-moi : alors, heuuuuuuuuureuuuuuuuuuuuux ?

PS : message perso aux dineurs : vous allez me manquer ;-)

Nicolas. (Relativement absolu, absolument relatif)

Sabatier <jps...@club-internet.fr> a écrit dans le message :
3958D203...@club-internet.fr...

0 new messages