Définir une plage de cellules non vides

Résolu/Fermé
Néo - 27 avril 2010 à 16:50
 Néo - 29 avril 2010 à 08:27
Bonjour,

Je cherche à faire quelques calculs (type régression linéaire) sur une plage de cellules continues et de longueur maximum définie (disons de B1 à K1).

Jusque là, pas de problème.

Cette plage contient toujours des données continues entre ses bornes, mais la première donnée peut se trouver à n'importe quel endroit (en F1 par exemple)

J'arrive sans difficulté à définir l'emplacement de la dernière donnée à prendre en compte pour le calcul : =DROITEREG(DECALER(F1;;;;NBVAL(F1:K1)))

mais comment indiquer dans ma formule que la première cellule non vide de la plage (B1:K1) est F1 (dans cet exemple) ?

Merci d'avance pour votre aide.


6 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 27/04/2010 à 17:59
Bonjour

définir la zone nonvide dans B1:K1 (debut vide)
=ADRESSE(1;MIN(SI(B1:K1<>"";COLONNE(B1:K1))))&":K1"
formule matricielle à valider par Ctrl+maj+entrée curseur dans barre de formule
:-x
1
commentcamarcheeay Messages postés 666 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
27 avril 2010 à 19:43
Elle est intéressante cette idée. Peux tu la commenter un peu?
Merci!
0
commentcamarcheeay Messages postés 666 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
28 avril 2010 à 14:27
Je reformule le problème :
On a une plage de B1 à K1 dans laquelle il y a une plage de cellules successives non vides. On veut connaitre l'adresse de première cellule dans cette plage qui n'est pas vide et l'adresse de la dernière cellule.

Numéro de colonne de la première cellule non vide :
=MIN(SI(B1:K1<>"";COLONNE(B1:K1)))
! à faire valider par ctl+shift+entrer

Numéro de colonne de la dernière cellule non vide
=MAX(SI(B1:K1<>"";COLONNE(B1:K1)))
! à faire valider par ctl+shift+entrer

Inspiré par la solution de "michel_m" ci dessus.
1
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
28 avril 2010 à 14:30
Merci de rafraichir avant d'envoyer un post...
0
commentcamarcheeay Messages postés 666 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
28 avril 2010 à 14:37
J'ai rattrapé ça. J'ai répondu à ton dernier mot là-haut.
Ne t'inquiète pas, je respecte la propriété intellectuelle comme tu as pu le constater ;-)
0
commentcamarcheeay Messages postés 666 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
Modifié par commentcamarcheeay le 28/04/2010 à 17:11
La syntaxe est la suivante. Je l'ai testé et elle marche bien :

=1/DROITEREG(INDIRECT(ADRESSE(LIGNE(B1);MIN(SI(B1:AS1<>"";COLONNE(B1:AS1))))&":"&ADRESSE(LIGNE(B1);MAX(SI(B1:AS1<>"";COLONNE(B1:AS1))))))

Elle n'a pas marché avant parce que la fonction DROITEREG(arg) nécessite un champs en argument de type B2:D2 pas un texte "B2:D2". Or la fonction adresse retourne une chaine de caractères. D'où le besoin d'utiliser la fonction INDIRECT().
! Il ne faut tout de même pas oublier de valider avec ctrl+maj+entree
1
Fantastique, ça marche !
C'est en effet la fonction INDIRECT() qui manquait, alors qu'elle avait été signalée dans une des premières réponses.

Merci à tous pour votre aide précieuse.
0
commentcamarcheeay Messages postés 666 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
27 avril 2010 à 17:42
Bonjour,

Essaye cette formule. Je pense qu'elle définit bien la zone à corréler.

=DECALER(INDIRECT(ADRESSE(1;NB.VIDE(Feuil1!$B$1:$K$1)+2;1;1);VRAI);;;;NBVAL(Feuil1!$B$1:$K$1))

Tout ce qu'il fallait c'est la fonction "NB.VIDE". mais il faut par contre être sûr que toutes tes valeurs seront dans la zone B1:K1
0
Merci pour vos réponses.

Ca ne marche pas encore :)
En fait, mes valeurs sont continues dans la zone B1:K1 mais peuvent être par exemple en F1:H1.
De ce fait, je dois définir l'adresse du début et l'adresse de fin de la plage de valeur.

Je n'ai pas encore essayé la formule matricielle proposée par michel_m, mais de ce que j'en comprend, la fin de la plage de valeur est définie comme K1.

Est-ce plus clair ainsi ?
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 28/04/2010 à 14:09
En fait, mes valeurs sont continues dans la zone B1:K1 mais peuvent être par exemple en F1:H1.
Tu aurais pu le dire AVANT mais ce n'est pas bien dur à faire une fois qu'on a résolu le départ:

=ADRESSE(1;MIN(SI(B1:K1<>"";COLONNE(B1:K1))))&":"&ADRESSE(1;MAX(SI(B1:K1<>"";COLONNE(B1:K1))))

toujours en matricielle

j'espère que tu ne va pas encore nous sortir un "en fait, mes valeurs...." ;-)
0
commentcamarcheeay Messages postés 666 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
28 avril 2010 à 14:30
J'étais entrain de rédiger ça, mais apparemment tu es plus rapide.
Je te remercie pour la solution ci-dessous, elle m'a donné une idée sur le calcul matriciel sur Excel
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
commentcamarcheeay Messages postés 666 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 30 mars 2020 86
28 avril 2010 à 15:05
Si tu veux éviter de faire des tests 'si', il y a cette écriture qui suit. Cependant, il s'agit toujours d'un calcul de matrice à faire valider par ctl+shift+entrer. Ce n'est finalement qu'une variante. Je suis entrain de chercher s'il y a possibilité de faire un calcul normal.


Numéro de colonne de la première cellule non vide :
=MIN(NON(ESTVIDE(B1:K1))*COLONNE(B1:K1))
! à faire valider par ctl+shift+entrer

Numéro de colonne de la dernière cellule non vide
=MAX(NON(ESTVIDE(B1:K1))*COLONNE(B1:K1))
! à faire valider par ctl+shift+entrer
0
Merci pour vos réponses. Même si elles ne me permettent pas pour l'instant d'aboutir, j'apprends des choses intéressantes !

Mes essais me conduisent irrémédiablement à #VALEUR!

Voici la formule que j'utilise qui s'inspire de vos messages :

=1/DROITEREG(ADRESSE(15;MIN(SI(K15:AS15<>"";COLONNE(K15:AS15)))+1)&":"&ADRESSE(15;MAX(SI(K15:AS15<>"";COLONNE(K15:AS15)))))

On est en ligne 15 et la plage qui contient un certain nombre de valeurs contiguës est K15:AS15.

Au préalable, j'utilisais la formule :

=-1/DROITEREG(DECALER(O15;;;;NBVAL(O15:AS15)))

qui repère bien la fin de la plage de données mais qui m'impose de spécifier la première cellule non vide de la plage K15:AS15 (ici O15) dans la formule. (La fonction DROITEREG nécessite une plage ce données contiguës).

De nouvelles lumières ?
Merci d'avance.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 28/04/2010 à 16:56
As tu validé, comme je te l'avais déjà indiqué, par Ctrl+maj+entree et non par entree comme d'hab, le curseur clignotant dans la barre de formule;
une fois validée correctement, XL encadre automatiquement la formule par des accolades {}

lorsqu'XL répond "valeur" cela veut généralement dire que l'on a mal valider
0