Définir une plage de cellules non vides
Résolu/Fermé
A voir également:
- La plage propagée n'est pas vide
- Coeur vide ✓ - Forum Facebook
- Supprimer page vide word - Guide
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image d’ours polaire sur une image de plage. retrouvez l'image originale de la plage. que cache l'ours polaire ? - Forum Loisirs / Divertissements
- Selectionner plage jusqu'à la dernière cellule non vide vba - Forum VB / VBA
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image de manchots sur une image de plage. retrouvez l'image originale de la plage. que cachent les manchots ? - Forum Graphisme
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
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
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
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
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.
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.
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
28 avril 2010 à 14:30
Merci de rafraichir avant d'envoyer un post...
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
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 ;-)
Ne t'inquiète pas, je respecte la propriété intellectuelle comme tu as pu le constater ;-)
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
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/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
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
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
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
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 ?
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 ?
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
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:
toujours en matricielle
j'espère que tu ne va pas encore nous sortir un "en fait, mes valeurs...." ;-)
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...." ;-)
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
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
Je te remercie pour la solution ci-dessous, elle m'a donné une idée sur le calcul matriciel sur Excel
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
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
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
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.
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.
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
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
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
27 avril 2010 à 19:43
Merci!