OVH Cloud OVH Cloud

Adresse absolue à partir d'une adresse relative.

4 réponses
Avatar
philomele
J'ai besoin d'une routine me permettant d'obtenir la plage de cellules
"Plage2" définie comme suit :
"Plage2" est située par rapport à une cellule "Cell2" comme "Plage1"
l'est par rapport à "Cell1".
Les données sont "Cell2" et l'adresse relative de "Plage1"
relativement à "Cell1". Il me faudrait l'adresse absolue de "Plage2".

Je préfererais un solution plus direct que la manipulation de
l'adresse relative en tant que chaîne pour en extraire les valeurs à
introduire dans la méthode Offset.

Merci par avance de vos solutions ou suggestions.

ThF.

4 réponses

Avatar
AV
Si j'ai compris :

Sub zz_Relatif()
rw1 = [Cell1].Row: rw2 = [plage1].Row
col1 = [Cell1].Column: col2 = [plage1].Column
lng = [plage1].Count - 1
If rw1 < rw2 Then x = -rw2 - rw1 Else x = -(rw1 - rw2)
If col1 < col2 Then y = col2 - col1 Else y = -(col1 - col2)
On Error Resume Next
MsgBox Range(Cells([Cell2].Row + x, [Cell2].Column + y), _
Cells([Cell2].Row + x + lng, [Cell2].Column + y)).Address
End Sub

AV

"Th. Flauss" a écrit dans le message news:

J'ai besoin d'une routine me permettant d'obtenir la plage de cellules
"Plage2" définie comme suit :
"Plage2" est située par rapport à une cellule "Cell2" comme "Plage1"
l'est par rapport à "Cell1".
Les données sont "Cell2" et l'adresse relative de "Plage1"
relativement à "Cell1". Il me faudrait l'adresse absolue de "Plage2".

Je préfererais un solution plus direct que la manipulation de
l'adresse relative en tant que chaîne pour en extraire les valeurs à
introduire dans la méthode Offset.

Merci par avance de vos solutions ou suggestions.

ThF.


Avatar
philomele
"AV" wrote in message news:<#...
Si j'ai compris :

Sub zz_Relatif()
rw1 = [Cell1].Row: rw2 = [plage1].Row
col1 = [Cell1].Column: col2 = [plage1].Column
lng = [plage1].Count - 1
If rw1 < rw2 Then x = -rw2 - rw1 Else x = -(rw1 - rw2)
If col1 < col2 Then y = col2 - col1 Else y = -(col1 - col2)
On Error Resume Next
MsgBox Range(Cells([Cell2].Row + x, [Cell2].Column + y), _
Cells([Cell2].Row + x + lng, [Cell2].Column + y)).Address
End Sub

AV


Ce n'est pas exactement la solution que je recherche : vous supposez
connue l'adresse absolue de "Plage1".

En fait, les seules données sont les adresses absolues de "Cell1",
"Cell2" & l'adresse relative de "Plage1" obtenue au moyen de

Plage1.Address(ReferenceStyle:=xlR1C1, RowAbsolute:úlse,
ColumnAbsolute:úlse, RelativeTo:Îll1)

Le problème est d'otenir l'adresse absolue de "Plage2" placée
relativement à "Cell2" comme "Plage1" est placée relativement à
"Cell1".

Autrement dit encore, "Plage2" est telle que

Plage1.Address(ReferenceStyle:=xlR1C1, RowAbsolute:úlse,
ColumnAbsolute:úlse, RelativeTo:Îll1) Plage2.Address(ReferenceStyle:=xlR1C1, RowAbsolute:úlse,
ColumnAbsolute:úlse, RelativeTo:Îll2)

J'ajoute que je préfère une solution sans extraction de sous-chaînes
dans l'adresse relative.

Merci par avance de votre persévérance.

Avatar
AV
Ce n'est pas exactement la solution que je recherche : vous supposez
connue l'adresse absolue de "Plage1".


** Pas du tout !
Les variables rw1;rw2;col1;col2 donnent le décalage par l'intermédiaire des
calculs dans les 2 "If...." qui suivent

Le problème est d'otenir l'adresse absolue de "Plage2" placée
relativement à "Cell2" comme "Plage1" est placée relativement à
"Cell1".
** C'est le résultat de la macro proposée !


J'ajoute que je préfère une solution sans extraction de sous-chaînes
dans l'adresse relative.
** Il n'y a pas d'extraction de sous-chaînes dans la soluce proposée


La seule interprétation (à défaut de précisions) : j'ai supposé les plages
Plage1 et Plage2 sur x lignes et une seule colonne

AV

Avatar
philomele
"AV" wrote in message news:...
** Pas du tout !
Les variables rw1;rw2;col1;col2 donnent le décalage par l'intermédiaire des
calculs dans les 2 "If...." qui suivent



On se comprend mal : écrire rw2 = [plage1].Row c'est bien récupérer la
référence de la ligne en valeur absolue ou relativement à la cellule
[A1]. Idem pour col2.
Ce sont deux éléments qui ne font pas partie des données du problème.
Sinon, il suffirait d'utiliser
Cells(rw2,col2).Resize([Plage1].Rows,
[Plage1].Columns]).Offset([Cell2].Row - [Cell1].Row, [Cell2].Column -
[Cell1].Column).Address pour obtenir l'adresse absolue de "Plage2".

Le problème reste entier.

ThF.