Définir une plage de cellules non vides

Résolu
Néo -  
 Néo -
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
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 667 Date d'inscription   Statut Membre Dernière intervention   86
 
Elle est intéressante cette idée. Peux tu la commenter un peu?
Merci!
0
commentcamarcheeay Messages postés 667 Date d'inscription   Statut Membre Dernière intervention   86
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
Merci de rafraichir avant d'envoyer un post...
0
commentcamarcheeay Messages postés 667 Date d'inscription   Statut Membre Dernière intervention   86
 
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 667 Date d'inscription   Statut Membre Dernière intervention   86
 
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
Néo
 
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 667 Date d'inscription   Statut Membre Dernière intervention   86
 
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
Néo
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
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 667 Date d'inscription   Statut Membre Dernière intervention   86
 
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 667 Date d'inscription   Statut Membre Dernière intervention   86
 
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
Néo
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 315
 
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