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

Cellule non vide...

28 réponses
Avatar
Noégor
Bonjour,
Sur une plage allant de A1 à J1, je souhaiterais stocker en X1 le contenu de
la première cellule non vide, puis en Y1 celui de la seconde cellule et Z1
celui de la troisième.
Comment faire sans utliser le VBA,
Merci.

Noégor

8 réponses

1 2 3
Avatar
garnote
Il me semble qu'il faut modifier quelque chose dans ta formule si
la première colonne de plg est différente de 1. Non ?

Serge



a écrit dans le message de news:
..ou encore pour plg (à définir en réf absolue)

=SI(NBVAL(plg)<COLONNE(A1);"";INDEX(plg;PETITE.VALEUR(SI
(plg<>"";COLONNE(plg));COLONNE(A1))))

en matricielle

--
lSteph

On 19 mar, 17:09, "garnote" wrote:
Oui je comprends mais je cherche à généraliser pour un plage
qui ne débute pas forcément à la première colonne tout en
ayant le résultat dans une plage quelconque sans avoir
à modifier manuellement certaines constantes de la formule.

A+
Serge

a écrit dans le message de news:

> > Tentative de généralisation..

tu peux l'entrer en matricielle de X1 à...

=SI(NBVAL($A$1:$J$1)<COLONNE()-23;"";INDEX($A$1:$J$1;PETITE.VALEUR(SI
($A$1:$J$1<>"";COLONNE($A$1:$J$1));COLONNE()-23)))

@+

--
lSteph

On 19 mar, 16:28, "garnote" wrote:



> Salut,

> ;-) regarde un peu plus haut.

> Où ça ?
> Et que dois-je y voir ?

> Serge

> a écrit dans le message de news:
> Salut Serge,

> ;-) regarde un peu plus haut.

> On 19 mar, 16:07, "garnote" wrote:

> > Tentative de généralisation :- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
gmlsteph
Oui, je m'en rends bien compte....
de même que l'exemple part d'une plage horizontale mais n'a pas l'air
de fonctionner sur une plage verticale.

@+

--
lSteph

On 19 mar, 18:01, "garnote" wrote:
Il me semble qu'il faut modifier quelque chose dans ta formule si
la première colonne de plg est différente de 1. Non ?

Serge

a écrit dans le message de news: 4f198daa-20dc-44e
..ou encore pour plg (à définir en réf absolue)

=SI(NBVAL(plg)<COLONNE(A1);"";INDEX(plg;PETITE.VALEUR(SI
(plg<>"";COLONNE(plg));COLONNE(A1))))

en matricielle

--
lSteph

On 19 mar, 17:09, "garnote" wrote:



> Oui je comprends mais je cherche à généraliser pour un plage
> qui ne débute pas forcément à la première colonne tout en
> ayant le résultat dans une plage quelconque sans avoir
> à modifier manuellement certaines constantes de la formule.

> A+
> Serge

> a écrit dans le message de news: b523f48a-03be-4

> > > Tentative de généralisation..

> tu peux l'entrer en matricielle de X1 à...

> =SI(NBVAL($A$1:$J$1)<COLONNE()-23;"";INDEX($A$1:$J$1;PETITE.VALEUR(SI
> ($A$1:$J$1<>"";COLONNE($A$1:$J$1));COLONNE()-23)))

> @+

> --
> lSteph

> On 19 mar, 16:28, "garnote" wrote:

> > Salut,

> > ;-) regarde un peu plus haut.

> > Où ça ?
> > Et que dois-je y voir ?

> > Serge

> > a écrit dans le message de news: db57df41-e2d9
> > Salut Serge,

> > ;-) regarde un peu plus haut.

> > On 19 mar, 16:07, "garnote" wrote:

> > > Tentative de généralisation :- Masquer le texte des messages pr écédents -

> > - Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
gmlsteph
Bonjour,

toujours en matricielle:

=SI(NBVAL(plg)<COLONNE($1:$1);"";INDEX(plg;PETITE.VALEUR(SI
(plg<>"";COLONNE(plg)-(CELLULE("col";plg)-1);"");COLONNE($1:$1))))


--
'lSteph

On 19 mar, 18:31, wrote:
Oui, je m'en rends bien compte....
de même que l'exemple part d'une plage horizontale mais n'a pas l'air
de fonctionner sur une plage verticale.

@+

--
lSteph

On 19 mar, 18:01, "garnote" wrote:



> Il me semble qu'il faut modifier quelque chose dans ta formule si
> la première colonne de plg est différente de 1. Non ?

> Serge

> a écrit dans le message de news: 4f198daa-20dc-4
> ..ou encore pour plg (à définir en réf absolue)

> =SI(NBVAL(plg)<COLONNE(A1);"";INDEX(plg;PETITE.VALEUR(SI
> (plg<>"";COLONNE(plg));COLONNE(A1))))

> en matricielle

> --
> lSteph

> On 19 mar, 17:09, "garnote" wrote:

> > Oui je comprends mais je cherche à généraliser pour un plage
> > qui ne débute pas forcément à la première colonne tout en
> > ayant le résultat dans une plage quelconque sans avoir
> > à modifier manuellement certaines constantes de la formule.

> > A+
> > Serge

> > a écrit dans le message de news: b523f48a-03be

> > > > Tentative de généralisation..

> > tu peux l'entrer en matricielle de X1 à...

> > =SI(NBVAL($A$1:$J$1)<COLONNE()-23;"";INDEX($A$1:$J$1;PETITE.VALEUR( SI
> > ($A$1:$J$1<>"";COLONNE($A$1:$J$1));COLONNE()-23)))

> > @+

> > --
> > lSteph

> > On 19 mar, 16:28, "garnote" wrote:

> > > Salut,

> > > ;-) regarde un peu plus haut.

> > > Où ça ?
> > > Et que dois-je y voir ?

> > > Serge

> > > a écrit dans le message de news: db57df41-e2
> > > Salut Serge,

> > > ;-) regarde un peu plus haut.

> > > On 19 mar, 16:07, "garnote" wrote:

> > > > Tentative de généralisation :- Masquer le texte des messages précédents -

> > > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

> > - Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
garnote
Ave,

=SI(NBVAL(plg)<COLONNE($1:$1);"";INDEX(plg;PETITE.VALEUR(SI(plg<>"";COLONNE(plg)-(CELLULE("col";plg)-1);"");COLONNE($1:$1))))


Oui ça me semble correct mais on ne peut pas la coller dans une seule cellule et la recopier vers la droite.
Il faut, comme dans ma tentative de généralisation, sélectionner une plage horizontale avant de la valider.
Dans mes formules, j'ai remplacé COLONNE(1:n) par ta trouvaille COLONNE($1:$1).
Je me retrouve avec ceci :

Pour obtenir sur une ligne les n premières cellules non vides d'une plage horizontale quelconque de cellules contiguës,
sélectionnez une plage horizontale de n cellules contiguës et collez cette formule dans la barre de formules.
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(plage;1))+1;9^9);COLONNE($1:$1)))
(Ctrl+Maj+Entrée)
Si on veut le résultat sur une colonne :
=TRANSPOSE(INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(plage;1))+1;9^9);COLONNE($1:$1))))
(Ctrl+Maj+Entrée)

Si la plage d'origine est sur une colonne, remplacez COLONNE par LIGNE dans les deux formules précédentes.


Serge



a écrit dans le message de news:
Bonjour,

toujours en matricielle:

=SI(NBVAL(plg)<COLONNE($1:$1);"";INDEX(plg;PETITE.VALEUR(SI
(plg<>"";COLONNE(plg)-(CELLULE("col";plg)-1);"");COLONNE($1:$1))))


--
'lSteph

On 19 mar, 18:31, wrote:
Oui, je m'en rends bien compte....
de même que l'exemple part d'une plage horizontale mais n'a pas l'air
de fonctionner sur une plage verticale.

@+

--
lSteph

On 19 mar, 18:01, "garnote" wrote:



> Il me semble qu'il faut modifier quelque chose dans ta formule si
> la première colonne de plg est différente de 1. Non ?

> Serge

> a écrit dans le message de news:
>
> ..ou encore pour plg (à définir en réf absolue)

> =SI(NBVAL(plg)<COLONNE(A1);"";INDEX(plg;PETITE.VALEUR(SI
> (plg<>"";COLONNE(plg));COLONNE(A1))))

> en matricielle

> --
> lSteph

> On 19 mar, 17:09, "garnote" wrote:

> > Oui je comprends mais je cherche à généraliser pour un plage
> > qui ne débute pas forcément à la première colonne tout en
> > ayant le résultat dans une plage quelconque sans avoir
> > à modifier manuellement certaines constantes de la formule.

> > A+
> > Serge

> > a écrit dans le message de news:
> >

> > > > Tentative de généralisation..

> > tu peux l'entrer en matricielle de X1 à...

> > =SI(NBVAL($A$1:$J$1)<COLONNE()-23;"";INDEX($A$1:$J$1;PETITE.VALEUR(SI
> > ($A$1:$J$1<>"";COLONNE($A$1:$J$1));COLONNE()-23)))

> > @+

> > --
> > lSteph

> > On 19 mar, 16:28, "garnote" wrote:

> > > Salut,

> > > ;-) regarde un peu plus haut.

> > > Où ça ?
> > > Et que dois-je y voir ?

> > > Serge

> > > a écrit dans le message de news:
> > >
> > > Salut Serge,

> > > ;-) regarde un peu plus haut.

> > > On 19 mar, 16:07, "garnote" wrote:

> > > > Tentative de généralisation :- Masquer le texte des messages précédents -

> > > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

> > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
gmlsteph
Salut Serge,

oui c'est bien cela en matricielle dans la matrice, c'est tout ce que
j'ai trouvé pour l'instant, mais je suis déjà content de cette piste
pour pouvoir généraliser.

Ce faisant c'est intéressant dans la perspective de boucler
"fonctionellement" un ensemble de cellule sans faire appel à VBA et
dans le contexte obtenir une liste sans vides ne serait pas forcément
la seule possibilité.

Je note au passage tes autres suggestions.

@+

--
lSteph

On 20 mar, 17:51, "garnote" wrote:
Ave,

=SI(NBVAL(plg)<COLONNE($1:$1);"";INDEX(plg;PETITE.VALEUR(SI(plg<>"";COL ONNE­(plg)-(CELLULE("col";plg)-1);"");COLONNE($1:$1))))

Oui ça me semble correct mais on ne peut pas la coller dans une seule c ellule et la recopier vers la droite.
Il faut, comme dans ma tentative de généralisation, sélectionner un e plage horizontale avant de la valider.
Dans mes formules, j'ai remplacé COLONNE(1:n) par ta trouvaille COLONNE ($1:$1).
Je me retrouve avec ceci :

Pour obtenir sur une ligne les n premières cellules non vides d'une pla ge horizontale quelconque de cellules contiguës,
sélectionnez une plage horizontale de n cellules contiguës et collez cette formule dans la barre de formules.
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(pl age;­1))+1;9^9);COLONNE($1:$1)))
(Ctrl+Maj+Entrée)
Si on veut le résultat sur une colonne :
=TRANSPOSE(INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONN E(IN­DEX(plage;1))+1;9^9);COLONNE($1:$1))))
(Ctrl+Maj+Entrée)

Si la plage d'origine est sur une colonne, remplacez COLONNE par LIGNE da ns les deux formules précédentes.

Serge

a écrit dans le message de news: 3b2545f6-2fad-4c7f
Bonjour,

toujours en matricielle:

=SI(NBVAL(plg)<COLONNE($1:$1);"";INDEX(plg;PETITE.VALEUR(SI
(plg<>"";COLONNE(plg)-(CELLULE("col";plg)-1);"");COLONNE($1:$1))))

--
'lSteph

On 19 mar, 18:31, wrote:



> Oui, je m'en rends bien compte....
> de même que l'exemple part d'une plage horizontale mais n'a pas l'air
> de fonctionner sur une plage verticale.

> @+

> --
> lSteph

> On 19 mar, 18:01, "garnote" wrote:

> > Il me semble qu'il faut modifier quelque chose dans ta formule si
> > la première colonne de plg est différente de 1. Non ?

> > Serge

> > a écrit dans le message de news:
> >
> > ..ou encore pour plg (à définir en réf absolue)

> > =SI(NBVAL(plg)<COLONNE(A1);"";INDEX(plg;PETITE.VALEUR(SI
> > (plg<>"";COLONNE(plg));COLONNE(A1))))

> > en matricielle

> > --
> > lSteph

> > On 19 mar, 17:09, "garnote" wrote:

> > > Oui je comprends mais je cherche à généraliser pour un plage
> > > qui ne débute pas forcément à la première colonne tout en
> > > ayant le résultat dans une plage quelconque sans avoir
> > > à modifier manuellement certaines constantes de la formule.

> > > A+
> > > Serge

> > > a écrit dans le message de news:
> > > .

> > > > > Tentative de généralisation..

> > > tu peux l'entrer en matricielle de X1 à...

> > > =SI(NBVAL($A$1:$J$1)<COLONNE()-23;"";INDEX($A$1:$J$1;PETITE.VALEU R(SI
> > > ($A$1:$J$1<>"";COLONNE($A$1:$J$1));COLONNE()-23)))

> > > @+

> > > --
> > > lSteph

> > > On 19 mar, 16:28, "garnote" wrote:

> > > > Salut,

> > > > ;-) regarde un peu plus haut.

> > > > Où ça ?
> > > > Et que dois-je y voir ?

> > > > Serge

> > > > a écrit dans le message de news:
> > > > ..
> > > > Salut Serge,

> > > > ;-) regarde un peu plus haut.

> > > > On 19 mar, 16:07, "garnote" wrote:

> > > > > Tentative de généralisation :- Masquer le texte des message s précédents -

> > > > - Afficher le texte des messages précédents -- Masquer le tex te des messages précédents -

> > > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

> > - Afficher le texte des messages précédents -- Masquer le texte d es messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
garnote
Salut Stéphane,

Il ya avait encore des problèmes avec mes formules, mais là je crois détenir la vérité ;-)

1) Plage horizontale n'importe où et résultat dans une autre plage horizontale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(plage;1))+1;9^9);COLONNE(A1)))
Validation matricielle et tirer vers la droite

2) Plage horizontale n'importe où et résultat dans une autre plage verticale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(plage;1))+1;9^9);LIGNE(A1)))
Validation matricielle et tirer vers le bas.

3) Plage verticale n'importe où et résultat dans une autre plage verticale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";LIGNE(plage)-LIGNE(INDEX(plage;1))+1;9^9);LIGNE(A1)))
Validation matricielle et tirer vers le bas.

4) Plage verticale n'importe où et résultat dans une autre plage horizontale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";LIGNE(plage)-LIGNE(INDEX(plage;1))+1;9^9);COLONNE(A1)))
Validation matricielle et tirer vers la droite.

Quant à trouver UNE formule qui tiendrait compte de ces quatre cas, je n'ose même pas y songer !
Moi pas envie de virer complètement fou ;-)

Si tu confirmes la validité de mes formules, j'ouvre ma bouteille de « Balvenie DoubleWood 12 ans »
et je déguste à ta santé ;-)


Serge




a écrit dans le message de news:
Salut Serge,

oui c'est bien cela en matricielle dans la matrice, c'est tout ce que
j'ai trouvé pour l'instant, mais je suis déjà content de cette piste
pour pouvoir généraliser.

Ce faisant c'est intéressant dans la perspective de boucler
"fonctionellement" un ensemble de cellule sans faire appel à VBA et
dans le contexte obtenir une liste sans vides ne serait pas forcément
la seule possibilité.

Je note au passage tes autres suggestions.

@+

--
lSteph

On 20 mar, 17:51, "garnote" wrote:
Ave,

=SI(NBVAL(plg)<COLONNE($1:$1);"";INDEX(plg;PETITE.VALEUR(SI(plg<>"";COLONNE­(plg)-(CELLULE("col";plg)-1);"");COLONNE($1:$1))))

Oui ça me semble correct mais on ne peut pas la coller dans une seule cellule et la recopier vers la droite.
Il faut, comme dans ma tentative de généralisation, sélectionner une plage horizontale avant de la valider.
Dans mes formules, j'ai remplacé COLONNE(1:n) par ta trouvaille COLONNE($1:$1).
Je me retrouve avec ceci :

Pour obtenir sur une ligne les n premières cellules non vides d'une plage horizontale quelconque de cellules contiguës,
sélectionnez une plage horizontale de n cellules contiguës et collez cette formule dans la barre de formules.
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(plage;­1))+1;9^9);COLONNE($1:$1)))
(Ctrl+Maj+Entrée)
Si on veut le résultat sur une colonne :
=TRANSPOSE(INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(IN­DEX(plage;1))+1;9^9);COLONNE($1:$1))))
(Ctrl+Maj+Entrée)

Si la plage d'origine est sur une colonne, remplacez COLONNE par LIGNE dans les deux formules précédentes.

Serge

a écrit dans le message de news:
Bonjour,

toujours en matricielle:

=SI(NBVAL(plg)<COLONNE($1:$1);"";INDEX(plg;PETITE.VALEUR(SI
(plg<>"";COLONNE(plg)-(CELLULE("col";plg)-1);"");COLONNE($1:$1))))

--
'lSteph

On 19 mar, 18:31, wrote:



> Oui, je m'en rends bien compte....
> de même que l'exemple part d'une plage horizontale mais n'a pas l'air
> de fonctionner sur une plage verticale.

> @+

> --
> lSteph

> On 19 mar, 18:01, "garnote" wrote:

> > Il me semble qu'il faut modifier quelque chose dans ta formule si
> > la première colonne de plg est différente de 1. Non ?

> > Serge

> > a écrit dans le message de news:
> >
> > ..ou encore pour plg (à définir en réf absolue)

> > =SI(NBVAL(plg)<COLONNE(A1);"";INDEX(plg;PETITE.VALEUR(SI
> > (plg<>"";COLONNE(plg));COLONNE(A1))))

> > en matricielle

> > --
> > lSteph

> > On 19 mar, 17:09, "garnote" wrote:

> > > Oui je comprends mais je cherche à généraliser pour un plage
> > > qui ne débute pas forcément à la première colonne tout en
> > > ayant le résultat dans une plage quelconque sans avoir
> > > à modifier manuellement certaines constantes de la formule.

> > > A+
> > > Serge

> > > a écrit dans le message de news:
> > >

> > > > > Tentative de généralisation..

> > > tu peux l'entrer en matricielle de X1 à...

> > > =SI(NBVAL($A$1:$J$1)<COLONNE()-23;"";INDEX($A$1:$J$1;PETITE.VALEUR(SI
> > > ($A$1:$J$1<>"";COLONNE($A$1:$J$1));COLONNE()-23)))

> > > @+

> > > --
> > > lSteph

> > > On 19 mar, 16:28, "garnote" wrote:

> > > > Salut,

> > > > ;-) regarde un peu plus haut.

> > > > Où ça ?
> > > > Et que dois-je y voir ?

> > > > Serge

> > > > a écrit dans le message de news:
> > > >
> > > > Salut Serge,

> > > > ;-) regarde un peu plus haut.

> > > > On 19 mar, 16:07, "garnote" wrote:

> > > > > Tentative de généralisation :- Masquer le texte des messages précédents -

> > > > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

> > > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

> > - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
LSteph
Bonsoir,

(ici déjà tard mon neurone va au lit)
je regarderai demain, mais si tu déguste avec ;-) mode et ration
il en restera...

@+

--
lSteph

garnote a écrit :
Salut Stéphane,

Il ya avait encore des problèmes avec mes formules, mais là je crois détenir la vérité ;-)

1) Plage horizontale n'importe où et résultat dans une autre plage horizontale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(plage;1))+1;9^9);COLONNE(A1)))
Validation matricielle et tirer vers la droite

2) Plage horizontale n'importe où et résultat dans une autre plage verticale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(plage;1))+1;9^9);LIGNE(A1)))
Validation matricielle et tirer vers le bas.

3) Plage verticale n'importe où et résultat dans une autre plage verticale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";LIGNE(plage)-LIGNE(INDEX(plage;1))+1;9^9);LIGNE(A1)))
Validation matricielle et tirer vers le bas.

4) Plage verticale n'importe où et résultat dans une autre plage horizontale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";LIGNE(plage)-LIGNE(INDEX(plage;1))+1;9^9);COLONNE(A1)))
Validation matricielle et tirer vers la droite.

Quant à trouver UNE formule qui tiendrait compte de ces quatre cas, je n'ose même pas y songer !
Moi pas envie de virer complètement fou ;-)

Si tu confirmes la validité de mes formules, j'ouvre ma bouteille de « Balvenie DoubleWood 12 ans »
et je déguste à ta santé ;-)


Serge




a écrit dans le message de news:
Salut Serge,

oui c'est bien cela en matricielle dans la matrice, c'est tout ce que
j'ai trouvé pour l'instant, mais je suis déjà content de cette piste
pour pouvoir généraliser.

Ce faisant c'est intéressant dans la perspective de boucler
"fonctionellement" un ensemble de cellule sans faire appel à VBA et
dans le contexte obtenir une liste sans vides ne serait pas forcément
la seule possibilité.

Je note au passage tes autres suggestions.

@+

--
lSteph

On 20 mar, 17:51, "garnote" wrote:
Ave,

=SI(NBVAL(plg)<COLONNE($1:$1);"";INDEX(plg;PETITE.VALEUR(SI(plg<>"";COLONNE­(plg)-(CELLULE("col";plg)-1);"");COLONNE($1:$1))))

Oui ça me semble correct mais on ne peut pas la coller dans une seule cellule et la recopier vers la droite.
Il faut, comme dans ma tentative de généralisation, sélectionner une plage horizontale avant de la valider.
Dans mes formules, j'ai remplacé COLONNE(1:n) par ta trouvaille COLONNE($1:$1).
Je me retrouve avec ceci :

Pour obtenir sur une ligne les n premières cellules non vides d'une plage horizontale quelconque de cellules contiguës,
sélectionnez une plage horizontale de n cellules contiguës et collez cette formule dans la barre de formules.
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(plage;­1))+1;9^9);COLONNE($1:$1)))
(Ctrl+Maj+Entrée)
Si on veut le résultat sur une colonne :
=TRANSPOSE(INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(IN­DEX(plage;1))+1;9^9);COLONNE($1:$1))))
(Ctrl+Maj+Entrée)

Si la plage d'origine est sur une colonne, remplacez COLONNE par LIGNE dans les deux formules précédentes.

Serge

a écrit dans le message de news:
Bonjour,

toujours en matricielle:

=SI(NBVAL(plg)<COLONNE($1:$1);"";INDEX(plg;PETITE.VALEUR(SI
(plg<>"";COLONNE(plg)-(CELLULE("col";plg)-1);"");COLONNE($1:$1))))

--
'lSteph

On 19 mar, 18:31, wrote:



Oui, je m'en rends bien compte....
de même que l'exemple part d'une plage horizontale mais n'a pas l'air
de fonctionner sur une plage verticale.
@+
--
lSteph
On 19 mar, 18:01, "garnote" wrote:
Il me semble qu'il faut modifier quelque chose dans ta formule si
la première colonne de plg est différente de 1. Non ?
Serge
a écrit dans le message de news:

..ou encore pour plg (à définir en réf absolue)
=SI(NBVAL(plg)<COLONNE(A1);"";INDEX(plg;PETITE.VALEUR(SI
(plg<>"";COLONNE(plg));COLONNE(A1))))
en matricielle
--
lSteph
On 19 mar, 17:09, "garnote" wrote:
Oui je comprends mais je cherche à généraliser pour un plage
qui ne débute pas forcément à la première colonne tout en
ayant le résultat dans une plage quelconque sans avoir
à modifier manuellement certaines constantes de la formule.
A+
Serge
a écrit dans le message de news:

Tentative de généralisation..




tu peux l'entrer en matricielle de X1 à...
=SI(NBVAL($A$1:$J$1)<COLONNE()-23;"";INDEX($A$1:$J$1;PETITE.VALEUR(SI
($A$1:$J$1<>"";COLONNE($A$1:$J$1));COLONNE()-23)))
@+
--
lSteph
On 19 mar, 16:28, "garnote" wrote:
Salut,
;-) regarde un peu plus haut.
Où ça ?
Et que dois-je y voir ?
Serge
a écrit dans le message de news:

Salut Serge,
;-) regarde un peu plus haut.
On 19 mar, 16:07, "garnote" wrote:
Tentative de généralisation :- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -






Avatar
LSteph
bonjour,

Pour être tout à fait sincère j'ai cru que tu y étais mais finalement je
ne trouve pas cela tellement mieux:

-Cela pose le pb inverse on ne peut pas l'entrer directement dans la
matrice voulue en une seule saisie matricielle, faut suivre la méthode
>> Validation matricielle et tirer vers la droite.
(Ca c'est pas très grave mais dans un cas comme l'autre c'est un point
qu'on aimerait surmonter)

-Là tu as voulu raccourcir du coup cela fait des #Ref dans les cellules
de droite de la plage résultat où l'on pourrait , si la plage source est
modifiée voir consécutivement apparaître les valeurs suivantes.

Pour la suite..
En résumé, la forme est différente des variantes sur lesquelles j'étais
parti mais on y coupera pas il faut chaque fois adapter selon la forme
du résultat et de la matrice.

De plus, le fin du fin pour une véritable généralisation (si tant est
qu'elle soit possible) devrait outre se poser où l'on veut, pouvoir
étendre la plage source à mesure qu'on étend la plage résultat.
Ca sentirait le Décaler() mais je sèche.

Et je viens de penser à un truc, mais alors , là il va te falloir
prévoir un carton de 6. Car tu va devoir beaucoup déguster:
;-))
Comment faire pour une plage rectangulaire (lignes x colonnes)
et pouvoir choisir l'ordre résultat de gauche à droite ou de haut en bas.

Bonne journée.

--
lSteph

LSteph a écrit :
Bonsoir,

(ici déjà tard mon neurone va au lit)
je regarderai demain, mais si tu déguste avec ;-) mode et ration
il en restera...

@+

--
lSteph

garnote a écrit :
Salut Stéphane,

Il ya avait encore des problèmes avec mes formules, mais là je crois
détenir la vérité ;-)

1) Plage horizontale n'importe où et résultat dans une autre plage
horizontale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(plage;1))+1;9^9);COLONNE(A1)))

Validation matricielle et tirer vers la droite

2) Plage horizontale n'importe où et résultat dans une autre plage
verticale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(plage;1))+1;9^9);LIGNE(A1)))

Validation matricielle et tirer vers le bas.

3) Plage verticale n'importe où et résultat dans une autre plage
verticale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";LIGNE(plage)-LIGNE(INDEX(plage;1))+1;9^9);LIGNE(A1)))

Validation matricielle et tirer vers le bas.

4) Plage verticale n'importe où et résultat dans une autre plage
horizontale :
Coller cette formule dans une cellule libre :
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";LIGNE(plage)-LIGNE(INDEX(plage;1))+1;9^9);COLONNE(A1)))

Validation matricielle et tirer vers la droite.

Quant à trouver UNE formule qui tiendrait compte de ces quatre cas, je
n'ose même pas y songer !
Moi pas envie de virer complètement fou ;-)

Si tu confirmes la validité de mes formules, j'ouvre ma bouteille de «
Balvenie DoubleWood 12 ans »
et je déguste à ta santé ;-)


Serge




a écrit dans le message de news:

Salut Serge,

oui c'est bien cela en matricielle dans la matrice, c'est tout ce que
j'ai trouvé pour l'instant, mais je suis déjà content de cette piste
pour pouvoir généraliser.

Ce faisant c'est intéressant dans la perspective de boucler
"fonctionellement" un ensemble de cellule sans faire appel à VBA et
dans le contexte obtenir une liste sans vides ne serait pas forcément
la seule possibilité.

Je note au passage tes autres suggestions.

@+

--
lSteph

On 20 mar, 17:51, "garnote" wrote:
Ave,

=SI(NBVAL(plg)<COLONNE($1:$1);"";INDEX(plg;PETITE.VALEUR(SI(plg<>"";COLONNE­(plg)-(CELLULE("col";plg)-1);"");COLONNE($1:$1))))


Oui ça me semble correct mais on ne peut pas la coller dans une seule
cellule et la recopier vers la droite.
Il faut, comme dans ma tentative de généralisation, sélectionner une
plage horizontale avant de la valider.
Dans mes formules, j'ai remplacé COLONNE(1:n) par ta trouvaille
COLONNE($1:$1).
Je me retrouve avec ceci :

Pour obtenir sur une ligne les n premières cellules non vides d'une
plage horizontale quelconque de cellules contiguës,
sélectionnez une plage horizontale de n cellules contiguës et collez
cette formule dans la barre de formules.
=INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(INDEX(plage;­1))+1;9^9);COLONNE($1:$1)))

(Ctrl+Maj+Entrée)
Si on veut le résultat sur une colonne :
=TRANSPOSE(INDEX(plage;PETITE.VALEUR(SI(plage<>"";COLONNE(plage)-COLONNE(IN­DEX(plage;1))+1;9^9);COLONNE($1:$1))))

(Ctrl+Maj+Entrée)

Si la plage d'origine est sur une colonne, remplacez COLONNE par
LIGNE dans les deux formules précédentes.

Serge

a écrit dans le message de news:

Bonjour,

toujours en matricielle:

=SI(NBVAL(plg)<COLONNE($1:$1);"";INDEX(plg;PETITE.VALEUR(SI
(plg<>"";COLONNE(plg)-(CELLULE("col";plg)-1);"");COLONNE($1:$1))))

--
'lSteph

On 19 mar, 18:31, wrote:



Oui, je m'en rends bien compte....
de même que l'exemple part d'une plage horizontale mais n'a pas l'air
de fonctionner sur une plage verticale.
@+
--
lSteph
On 19 mar, 18:01, "garnote" wrote:
Il me semble qu'il faut modifier quelque chose dans ta formule si
la première colonne de plg est différente de 1. Non ?
Serge
a écrit dans le message de news:

..ou encore pour plg (à définir en réf absolue)
=SI(NBVAL(plg)<COLONNE(A1);"";INDEX(plg;PETITE.VALEUR(SI
(plg<>"";COLONNE(plg));COLONNE(A1))))
en matricielle
--
lSteph
On 19 mar, 17:09, "garnote" wrote:
Oui je comprends mais je cherche à généraliser pour un plage
qui ne débute pas forcément à la première colonne tout en
ayant le résultat dans une plage quelconque sans avoir
à modifier manuellement certaines constantes de la formule.
A+
Serge
a écrit dans le message de news:

Tentative de généralisation..




tu peux l'entrer en matricielle de X1 à...
=SI(NBVAL($A$1:$J$1)<COLONNE()-23;"";INDEX($A$1:$J$1;PETITE.VALEUR(SI
($A$1:$J$1<>"";COLONNE($A$1:$J$1));COLONNE()-23)))
@+
--
lSteph
On 19 mar, 16:28, "garnote" wrote:
Salut,
;-) regarde un peu plus haut.
Où ça ?
Et que dois-je y voir ?
Serge
a écrit dans le message de news:

Salut Serge,
;-) regarde un peu plus haut.
On 19 mar, 16:07, "garnote" wrote:
Tentative de généralisation :- Masquer le texte des messages
précédents -


- Afficher le texte des messages précédents -- Masquer le texte
des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte
des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des
messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des
messages précédents -


- Afficher le texte des messages précédents -








1 2 3