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

adresse avec et sans matriciel

4 réponses
Avatar
j-pascal
Bonsoir,

Je vais essayer d'être clair (!) :

K3 :

{=ADRESSE(MAX((Import="N° cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))}

(dans ma plage nommée "Import" (qui se trouve sur une autre feuille),
je récupère le numéro de ligne de la première valeur située sous le
titre "N° cde").

Ce qui me donne : $A$16


K4 : =LIGNE(INDIRECT(K3))

(récup. du n° de ligne de K3, soit 16)


K5 = {=MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import))}

(dans ma plage nommée "Col_Import" (toujours sur l'autre feuille), je
récupère le numéro de la ligne contenant la dernière valeur).

Ce qui me donne : 308


K6 : =ADRESSE(K4;1)&":"&ADRESSE(K5;7)

Ce qui me donne : $A$16:$G$308


Conclusion : ça marche, mais c'est lourd.

Question : comment puis-je combiner des formules "simples" et des
formules matricielles pour ne pas passer par autant d'étapes
intermédiaires ?

Question subsidiaire : si en K3, j'effectue une recherche sur une
colonne (plage nommée "Col_Import" (ie), et non plus sur une plage
contenant plusieurs colonnes), comment dois-je modifier la formule ?

Merci pour votre aide,

JP

PS : le but étant de récupérer "$A$16:$G$308" dans une macro pour
sélectionner la dite plage ...

4 réponses

Avatar
isabelle
bonjour Jp,

x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address

isabelle

j-pascal a écrit :
Bonsoir,

Je vais essayer d'être clair (!) :

K3 :

{­RESSE(MAX((Import="N° cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))}

(dans ma plage nommée "Import" (qui se trouve sur une autre feuille),
je récupère le numéro de ligne de la première valeur située sous le
titre "N° cde").

Ce qui me donne : $A$16


K4 : =LIGNE(INDIRECT(K3))

(récup. du n° de ligne de K3, soit 16)


K5 = {=MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import))}

(dans ma plage nommée "Col_Import" (toujours sur l'autre feuille), je
récupère le numéro de la ligne contenant la dernière valeur).

Ce qui me donne : 308


K6 : ­RESSE(K4;1)&":"&ADRESSE(K5;7)

Ce qui me donne : $A$16:$G$308


Conclusion : ça marche, mais c'est lourd.

Question : comment puis-je combiner des formules "simples" et des
formules matricielles pour ne pas passer par autant d'étapes
intermédiaires ?

Question subsidiaire : si en K3, j'effectue une recherche sur une
colonne (plage nommée "Col_Import" (ie), et non plus sur une plage
contenant plusieurs colonnes), comment dois-je modifier la formule ?

Merci pour votre aide,

JP

PS : le but étant de récupérer "$A$16:$G$308" dans une macro pour
sélectionner la dite plage ...




Avatar
j-pascal
Bonjour Isabelle,

Merci pour cette proposition. Je la garde sous le coude, mais j'étais
surtout curieux de savoir si on pouvait compiler la formule sans passer
par VBA.

JP

bonjour Jp,

x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address

isabelle

j-pascal a écrit :
Bonsoir,

Je vais essayer d'être clair (!) :

K3 :

{­RESSE(MAX((Import="N° cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))}

(dans ma plage nommée "Import" (qui se trouve sur une autre feuille), je
récupère le numéro de ligne de la première valeur située sous le titre "N°
cde").

Ce qui me donne : $A$16


K4 : =LIGNE(INDIRECT(K3))

(récup. du n° de ligne de K3, soit 16)


K5 = {=MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import))}

(dans ma plage nommée "Col_Import" (toujours sur l'autre feuille), je
récupère le numéro de la ligne contenant la dernière valeur).

Ce qui me donne : 308


K6 : ­RESSE(K4;1)&":"&ADRESSE(K5;7)

Ce qui me donne : $A$16:$G$308


Conclusion : ça marche, mais c'est lourd.

Question : comment puis-je combiner des formules "simples" et des formules
matricielles pour ne pas passer par autant d'étapes intermédiaires ?

Question subsidiaire : si en K3, j'effectue une recherche sur une colonne
(plage nommée "Col_Import" (ie), et non plus sur une plage contenant
plusieurs colonnes), comment dois-je modifier la formule ?

Merci pour votre aide,

JP

PS : le but étant de récupérer "$A$16:$G$308" dans une macro pour
sélectionner la dite plage ...




Avatar
isabelle
bonjour Jp,

voilà,

­RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)

à valider en matriciel

isabelle

j-pascal a écrit :
Bonjour Isabelle,

Merci pour cette proposition. Je la garde sous le coude, mais j'étais
surtout curieux de savoir si on pouvait compiler la formule sans
passer par VBA.

JP

bonjour Jp,

x = Range("Import").Find("N° cde", Range("Import").Item(1),
xlFormulas, xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address

isabelle

j-pascal a écrit :
Bonsoir,

Je vais essayer d'être clair (!) :

K3 :

{­RESSE(MAX((Import="N° cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))}

(dans ma plage nommée "Import" (qui se trouve sur une autre
feuille), je récupère le numéro de ligne de la première valeur
située sous le titre "N° cde").

Ce qui me donne : $A$16


K4 : =LIGNE(INDIRECT(K3))

(récup. du n° de ligne de K3, soit 16)


K5 = {=MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import))}

(dans ma plage nommée "Col_Import" (toujours sur l'autre feuille),
je récupère le numéro de la ligne contenant la dernière valeur).

Ce qui me donne : 308


K6 : ­RESSE(K4;1)&":"&ADRESSE(K5;7)

Ce qui me donne : $A$16:$G$308


Conclusion : ça marche, mais c'est lourd.

Question : comment puis-je combiner des formules "simples" et des
formules matricielles pour ne pas passer par autant d'étapes
intermédiaires ?

Question subsidiaire : si en K3, j'effectue une recherche sur une
colonne (plage nommée "Col_Import" (ie), et non plus sur une plage
contenant plusieurs colonnes), comment dois-je modifier la formule ?

Merci pour votre aide,

JP

PS : le but étant de récupérer "$A$16:$G$308" dans une macro pour
sélectionner la dite plage ...








Avatar
j-pascal
Bonjour Isabelle,

Finalement je viens d'essayer ta proposition en matricielle et elle ne
me renvoit pas le résultat escompté :

J'ai dû oublier qqch ;-(

La formule suivante fonctionne :

{­RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)}

(Elle me renvoit dans le cas présent : $A$16:$G$308)

L'équivalent en vba :

x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row

MsgBox Range(Cells(x, 1), Cells(y, 7)).Address

(Me renvoit : $A$1:$G$16

Je ne me souviens plus comment on peut "traduire" une formule en
passant pas le "debug.print" de la fenêtre "exécution" !

@+ ?

Merci

JP



bonjour Jp,

voilà,

­RESSE(LIGNE(INDIRECT(ADRESSE(MAX((Import="N°
cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))));1)&":"&ADRESSE(MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import));7)

à valider en matriciel

isabelle

j-pascal a écrit :
Bonjour Isabelle,

Merci pour cette proposition. Je la garde sous le coude, mais j'étais
surtout curieux de savoir si on pouvait compiler la formule sans passer par
VBA.

JP

bonjour Jp,

x = Range("Import").Find("N° cde", Range("Import").Item(1), xlFormulas,
xlWhole, xlByRows, xlNext, False, False).Row + 1
y = Range("Col_Import").SpecialCells(xlCellTypeBlanks).Row
MsgBox Range(Cells(x, 1), Cells(y, 7)).Address

isabelle

j-pascal a écrit :
Bonsoir,

Je vais essayer d'être clair (!) :

K3 :

{­RESSE(MAX((Import="N° cde")*LIGNE(Import)+1);MAX((Import="N°
cde")*COLONNE(Import)))}

(dans ma plage nommée "Import" (qui se trouve sur une autre feuille), je
récupère le numéro de ligne de la première valeur située sous le titre
"N° cde").

Ce qui me donne : $A$16


K4 : =LIGNE(INDIRECT(K3))

(récup. du n° de ligne de K3, soit 16)


K5 = {=MAX(NON(ESTVIDE(Col_Import))*LIGNE(Col_Import))}

(dans ma plage nommée "Col_Import" (toujours sur l'autre feuille), je
récupère le numéro de la ligne contenant la dernière valeur).

Ce qui me donne : 308


K6 : ­RESSE(K4;1)&":"&ADRESSE(K5;7)

Ce qui me donne : $A$16:$G$308


Conclusion : ça marche, mais c'est lourd.

Question : comment puis-je combiner des formules "simples" et des
formules matricielles pour ne pas passer par autant d'étapes
intermédiaires ?

Question subsidiaire : si en K3, j'effectue une recherche sur une colonne
(plage nommée "Col_Import" (ie), et non plus sur une plage contenant
plusieurs colonnes), comment dois-je modifier la formule ?

Merci pour votre aide,

JP

PS : le but étant de récupérer "$A$16:$G$308" dans une macro pour
sélectionner la dite plage ...