1 votes

Comment puis-je créer une formule qui ajuste une plage de cellules en fonction de sa position relative par rapport à une cellule de référence ?

Première fois que je pose une question ici. Dans la cellule J4 d'un onglet Excel, j'ai la chaîne "C6:O43." Cette chaîne est censée faire référence à une plage de cellules sur un autre onglet. Je prévois d'utiliser cette chaîne comme plage de collage dans une macro VBA. La cellule J4 est la cellule en haut à gauche dans une plage de cellules qui fait 8 lignes de hauteur et 34 colonnes de largeur. Dans les autres cellules, je souhaite créer une formule qui ajuste "C6:O43" en déplaçant les lettres de colonne de multiples de 16 et les numéros de ligne de multiples de 44, en fonction de la position relative de chaque cellule par rapport à la cellule de référence, J4.

Par exemple, les trois premières lignes et colonnes de cet ensemble devraient ressembler à ceci:

C6:O43

S6:AE43

AI6:AU43

C50:O87

S50:AE87

AI50:AU87

C94:O131

S94:AE131

AI94:AU131

Jusqu'à présent, j'ai réussi à isoler chaque partie d'une plage. Ainsi, par exemple, j'ai déjà écrit des formules qui peuvent diviser "C6:O43" en C, 6, O et 43. Et je sais comment déterminer la position d'une cellule par rapport à J4.

=COLONNE()-COLONNE($J$4)
=LIGNE()-LIGNE($J$4)

À part cela, je suis un peu perdu et toute aide serait grandement appréciée. Merci!

3voto

Scott Craner Points 20779

Utiliser ADDRESS et un peu de mathématiques:

=ADDRESS((LIGNE($A1)-1)*44+6,(COLONNE(A$1)-1)*16+3,4)&":"&ADDRESS((LIGNE($A1)-1)*44+43,(COLONNE(A$1)-1)*16+15,4)

Maintenant, lorsque vous le faites glisser horizontalement et verticalement, les fonctions LIGNE() et COLONNE() itéreront et les calculs renverront les bonnes valeurs à ADDRESS.

enter image description here

1voto

databyte Points 708

Si vous voulez utiliser la sortie de ces fonctions de feuille de calcul en VBA pour adresser des plages, alors je suggère que vous vouliez peut-être également effectuer les calculs en VBA.

Cells(range,ligne) peut être utilisé pour exprimer une seule cellule.

Utilisez Range(.Cells(1, 1), .Cells(5, 3)) pour construire une plage.

Les nombres fournis pour les paramètres ligne et colonne peuvent être des variables facilement incrémentées.

a = a + 16
b = b + 34

combiné avec cells(a,b)

1voto

P.b Points 231

Une solution non dynamique en utilisant une formule pourrait être :

={"C","S","AI"}&{6;50;94}&{":O",":AE",":AU"}&{43;87;131}

Et en utilisant Office 365, vous pouvez utiliser cette solution dynamique:

=LET(INCREMENT,
     LAMBDA(
            RowsCreate,
            RowStartNo,
            RowIncr,
            ColumnsCreate,
            ColumnStartNo,
            ColumnIncr,
     LET(i,INT((SEQUENCE(,ColumnsCreate,ColumnStartNo,ColumnIncr)-{27;1;0})/{676;26;1}),
         BYCOL(IF(i>0,CHAR(MOD(i-1,26)+65),""),
        LAMBDA(b,
               CONCAT(b)))
         &SEQUENCE(RowsCreate,,RowStartNo,RowIncr))),
INCREMENT(3,6,44,3,3,16)&":"&INCREMENT(3,43,44,3,15,16))

Pour cette solution, j'ai créé un LAMBDA appelé INCREMENT, qui a des arguments que vous devez déclarer :

  • RowsCreate - le nombre de lignes que votre résultat devrait avoir.
  • RowStartNo - le numéro de début de la première ligne de votre résultat.
  • RowIncr - le nombre de lignes à incrémenter par ligne.

Et la même logique, mais pour les colonnes au lieu des lignes pour ColumnsCreate, ColumnStartNo, ColumnIncr

enter image description here

0voto

Paul Points 31

Comme l'ont dit d'autres, si vous allez utiliser ces références en VBA, alors autant faire les calculs là-bas aussi.

Par exemple, pour déterminer la plage référencée dans J4, mais sur une feuille différente :

set rng = sheets(2).range(sheets(1).range("J4").text)

Pour déterminer la plage déplacée par des multiples de 16 et 44 :

set rng=rng.offset(n*44,m*16)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X