[Excel] Sélectionner des plages non vides

Résolu/Fermé
corgeon Messages postés 426 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 28 août 2017 - 24 nov. 2008 à 16:46
corgeon Messages postés 426 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 28 août 2017 - 25 nov. 2008 à 11:07
Bonjour,

Commençons par expliquer ce que j'aimerais faire :

J'ai une plage de données XY de longueur variable, dont je connais uniquement le nombre maximum de valeurs. De cette plage de données, je récupère les coefficients de la régression linéaire dans 2 cases grâces aux formules :

=INDEX(DROITEREG(J3:J66;I3:I66;;1);1;1) pour le coefficient directeur

et

=INDEX(DROITEREG(J3:J66;I3:I66;;1);1;2) pour l'ordonnée à l'origine

66 étant la ligne maximale, au-delà de laquelle je n'aurais jamais de valeurs.

Le problème est que si mes valeurs s'arrêtent avant la ligne 66, je n'obtiens pas le résultat mais l'indication #VALEUR!. Il faut donc, pour chaque série XY, que je modifie la sélection pour effectuer ce calcul.
Or, j'aimerais automatisé ce calcul, c'est-à-dire ouvrir mon classeur, coller ma série XY et obtenir directement les coefficients de la régression.

Est-ce que quelqu'un pourrait m'aider à réaliser ce que j'aimerais faire ?

Pour vous aider à m'aider, j'ai deux idées, mais je ne sais pas les mettre en oeuvre.
La première serait de sélectionner la plage tant que les cellules ne sont pas vides.
La seconde serait de ne sélectionner que les cellules non vides.

D'avance, je vous remercie pour votre aide.

4 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 705
24 nov. 2008 à 18:02
bonjour

j'ai fait un essai afin de mieux comprendre ce que renvoie DECALER

DECALER renvoie une référence à une plage qui correspond à un nombre déterminé de lignes et de colonnes d'une cellule ou plage de cellules. La référence qui est renvoyée peut être une cellule unique ou une plage de cellules. Vous pouvez spécifier le nombre de lignes et de colonnes à renvoyer.

DECALER(J3;;;NBVAL(J3:J66);1)

Ainsi tu te positionne en J3 sans décale de ligne ni de colonne et tu prend une plage avec autant de lignes qu'il y a de valeurs dans (J3:J66) sur une colonne.

En fait si tu as 5 lignes remplies, ta plage devient J3:J7 ce qu'il me semble que tu cherchais.
0
corgeon Messages postés 426 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 28 août 2017 24
24 nov. 2008 à 18:28
Bonjour wilfried_42 (t'es de Saint-Étienne ?) !

Merci à toi aussi pour ton aide !

En fait, rien a fonctionné, mais je pense savoir pourquoi. En fait, les cases vides ne sont pas comptées comme vides car pour les remplir j'avais utiliser une fonction SI afin de me rendre les dernières cases, dont je n'ai pas besoin, vide :

=SI(A59-$M$9>0;A59-$M$9;"")

Ainsi, je pense que le fait d'avoir insérer cette fonction SI fait que Excel ne la considère pas comme vide...

Je vais réfléchir à comment remédier à ce problème et je reviens vous donner des nouvelles.

Encore merci à vous deux !

PS : je viens de vérifier en supprimant les cases normalement vides et vos formules fonctionnent :-)
0
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 244
24 nov. 2008 à 18:32
re:

dans ce cas, tu remplaces nbval($I$3:$I$66) pare nb.si($I$3:$I$66;"> ")
0
corgeon Messages postés 426 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 28 août 2017 24
25 nov. 2008 à 11:07
Bonjour Wilfried_42 et gbinforme !

J'ai enfin réussi à faire ce que je voulais grâce à votre aide et en filoutant avec Excel. Je m'explique :

En fait, il y avait encore un problème avec la fonction NB.SI que Wilfried m'a indiqué (ça me renvoyait #REF!). J'ai alors contourné le problème en ajoutant une colonne calculant le logarithme de mes données, seulement si la case n'est pas vide, sinon renvoyer la valeur 0 (un log ne renvoie jamais 0) :

=SI(I3<>"";LN(I3);0)

Ensuite, j'ai modifier la formule de NB.SI que tu Wilfried m'a donnée en remplaçant le "> " en "<>0" et tout fonctionne nickel !

Encore merci à vous deux, cela me fera gagner un temps fou maintenant que ce calcul est automatisé.

@ bientôt peut-être !
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 705
24 nov. 2008 à 16:58
bonjour

Essaies peut-être comme ceci :

=INDEX(DROITEREG(DECALER(J3;;;NBVAL(J3:J66);1);DECALER(I3;;;NBVAL(I3:I66);1);;1);1;2)

Cette formule crée les plages renseignées en I et J mais les données présentes doivent être consécutives.

Je ne connais pas ton tableau et je te laisse essayer.
-1
corgeon Messages postés 426 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 28 août 2017 24
24 nov. 2008 à 17:39
Bonjour gbinforme,

Avant toute chose, j'aimerais te remercier pour t'être intéressé à mon problème.

Alors voici ce qu'il en est :
J'ai entré ta formule dans un case, et il m'a retourné l'indication #VALEUR!
J'ai alors fait des recherches sur les formules NBVAL et DECALER afin de savoir ce que je faisais. Autant j'ai compris ce que fait NBVAL, autant je n'ai pas compris ce que fait DECALER.
J'ai donc essayé, sans grande conviction, d'utiliser la fonction NBVAL comme ceci :

J3:J(NBVAL(J3:J66)+3)

Mais évidemment Excel ne comprend pas ce langage.

Enfin, j'ai fait un essai afin de mieux comprendre ce que renvoie DECALER, et quand je tape

=DECALER(J3;;;NBVAL(J3:J66);1)

dans une case (L22 par exemple), cela me renvoie la valeur de la case J de la même ligne que la case dans laquelle je l'ai tapé (J22 pour l'exemple).

J'espère être claire dans mes explications. Vois-tu ce qui ne va pas ?
0
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 244 > corgeon Messages postés 426 Date d'inscription lundi 3 avril 2006 Statut Membre Dernière intervention 28 août 2017
24 nov. 2008 à 18:02
Bonjour

on va faire au plus simple : si tes valeurs sont contigues c'est plus facile

Déjà une explication sur DECALER puisque l'on va encore s'en servir
entre [] indique que les valeurs sont optionnelles
=DECALER(Cellule,Lignes,Colonnes,[Nbligne], [nbcolonne])

Decaler comme son nom l'indique sert à DECALER Cellule ou une plage selon des parametres entier
DECALER(A1,1,1) ==> je Decale A1, d'une ligne et d'une colonne donc résultat est B2

Le 2 parametres entre [] permettent de definir un nombre de ligne ou de colonne pour en recupérer un plage

c'est principalement ce que l'on cherche, definir une plage
Personnellement, en Cellule de référence je n'utilise jamais la cellule de la plage à trouver, pour eviter, en cas de suppression de la ligne ou se trouve la cellue de reference, de perdre ma formule
Donc je vais partir de la ligne 1 : Cellule I1, pour avoir I3, je decale de 2 lignes, 0 colonnes
=DECALER($I$1;2;0)
ensuite je dois definir ma plage : mon nombre de ligne correspond au nombre de valeur dans ma plage I3:I66 et mon nombre de colonne = 1 : ce qui me donne :
=DECALER($I$1;2;0; nbval($I$3:$I$66);1)

Menu insertion / Nom / Definir
Le nom : coli
fait référence à : mettre la fomule ci-dessus
cliquer sur ajouter

faire pareil avec la colonne J
ensuite remplace tes plages dans ta formule par coli et colj
0