Question sur les plages variables (sans vba)

gadlun

XLDnaute Nouveau
Bonjour à tous,
Nouveau sur le forum et très débutant, j'ai un problème (sans doute pour vous tout simple, mais pas pour moi, donc soyez compréhensifs! ;) ) :
Je souhaiterais que l'ordinateur me dise combien il y a de lettre A dans une plage (je connais la formule nb.si); mais sur une plage dont les coordonnées seraient dispatchées dans différentes cellules. Mon problème concerne donc surtout cela: comment faire pour désigner une plage indirectement ? A la limite, le numéro de ligne est connu, par contre, le numéro de la colonne est variable. A la limite aussi, la largeur de la plage est calculable... Le tout sans passer par le V.B.A. ...
Merci par avance pour votre aide !
 

Pièces jointes

  • essai.xlsx
    8.6 KB · Affichages: 42
  • essai.xlsx
    8.6 KB · Affichages: 45
  • essai.xlsx
    8.6 KB · Affichages: 44

david84

XLDnaute Barbatruc
Re : Question sur les plages variables (sans vba)

Bonjour,
Ton exemple est bien sommaire...j'en resterai dons aux généralités.
Pour faire ce que tu veux, il te faut définir ta plage en utilisant la fonction DECALER pour la rendre dynamique.
Il te restera ensuite à utiliser cette plage définie dans la fonction NB.SI
A+
 

gadlun

XLDnaute Nouveau
Re : Question sur les plages variables (sans vba)

Bonjour david84, mais cela donnerait quoi comme formule ?
{=NB.SI(DECALER(B1;A1;1;2);"A")} me donne #VALEUR! (la plage concernée étant encadrée)...
Vraiment débutant suis-je... désolé et surtout merci !!!!!
 

Pièces jointes

  • essai.xlsx
    9.2 KB · Affichages: 39
  • essai.xlsx
    9.2 KB · Affichages: 40
  • essai.xlsx
    9.2 KB · Affichages: 46

david84

XLDnaute Barbatruc
Re : Question sur les plages variables (sans vba)

Re
Onglet Formules=>définir un nom :
- nom : par exemple "plage"
- fait référence à :=DECALER(Feuil1!$A$1;;;10;MAX(SI(Feuil1!$A$1:$Z$1000<>"";COLONNE(Feuil1!$A$1:$Z$1000))))
J'ai mis 10 au niveau des lignes puisque tu as dit que le n° de lignes est connu (sinon adapter).
La partie colonne est ramenée par
Code:
MAX(SI(Feuil1!$A$1:$Z$1000<>"";COLONNE(Feuil1!$A$1:$Z$1000)))
(à adapter de ton côté).
IL ne te reste ensuite qu'à utiliser plage dans la fonction NB.SI :
Code:
=NB.SI(Plage;"A")
Pour plus d'infos sur la fonction DECALER, voir Ce lien n'existe plus par exemple.
Voir également le classeur à télécharger Ce lien n'existe plus, toujours sur le même site (Excelabo).
A+
 

gadlun

XLDnaute Nouveau
Re : Question sur les plages variables (sans vba)

Bien cher david84,
Malgré tout ton aide précieuse, j'avoue être totalement largué... C'est sans doute pour cela aussi que je m'en tiens à l'excel "claissique", càd sans VBA ! Je vais essayer de cogiter ce fichier du site et l'exemple que tu m'as communiqué mais ce serait du chinois que ça ne changerait rien pour moi !
Là où j'en suis de la compréhension du problème, pour "économiser" "plage" et faire directement les choses, je présume que je peux théoriquement remplacer "plage" dans la fonction nb.si par ce qu'elle représente en termes de formules, à savoir ce que tu dis sur "décaler".
Je ne comprends pas non plus la formule "max" qui ramène la colonne (celle de la première case remplie?)
Mon problème est bien de faire une recherche sur une plage dont les coordonnées sont indiquées dans 4 cellules consécutives sur une ligne...
Je suis vraiment désolé mais franchement je suis pommé... je sais bien que pour aider quelqu'un il vaut mieux lui apprendre à pécher que de lui donner un poisson, mais là... je préfèrerai avoir le poisson et décortiqué le poisson ! (si cela t'ait possible)
 

david84

XLDnaute Barbatruc
Re : Question sur les plages variables (sans vba)

Re
Franchement, je ne vois pas ce que je peux faire de plus :
Définir un nom en allant dans l'onglet Formules=>bloc Noms définis=>Définir un nom.
Dans la boîte de dialogue qui s'ouvre, dans "Fait référence à" tu rentres la formule
Code:
=DECALER(Feuil1!$A$1;;;10;MAX(SI(Feuil1!$A$1:$Z$1000<>"";COLONNE(Feuil1!$A$1:$Z$1000))))
et dans nom, tu la nommes "Plage", puis tu utilises ce nom dans ta fonction NB.SI
Code:
=NB.SI(Plage;"A")
Il n'y a pas de VBA là-dedans.
A+
 

gadlun

XLDnaute Nouveau
Re : Question sur les plages variables (sans vba)

Merci vraiment pour ta patience... david84. Mon incapacité est si grande qu'elle me faire rire. J'ai fait encore un petit pas avec ta dernière explication. Mais apparemment, j'ai encore raté quelque chose dans l'adaptation de la formule... Je te joins mon fichier pour que tu m'expliques si tu en as encore la patience où cela buggue...;)
 

Pièces jointes

  • essai.xlsx
    8.9 KB · Affichages: 41
  • essai.xlsx
    8.9 KB · Affichages: 42
  • essai.xlsx
    8.9 KB · Affichages: 40

david84

XLDnaute Barbatruc
Re : Question sur les plages variables (sans vba)

Re
Il te faut placer la formule NB.SI en dehors de la plage définie sinon tu crées une référence circulaire.
L'argument largeur de la fonction DECALER étant défini par
Code:
COLONNE(Feuil1!$A$1:$Z$1000)))
, il te faut donc la placer en dehors d'une cellule de la plage A1-Z1000 (en AA1 par exemple).
Si cela ne te convient pas tu peux au choix :
- la placer sur une autre feuille
- redimensionner ta plage en fonction de tes besoins (la faire commencer en A2 pour placer ta formule en A1, réduire le nombre de ligne et/ou de colonnes de ta plage, etc.).
A+
 

gadlun

XLDnaute Nouveau
Re : Question sur les plages variables (sans vba)

Ca marche !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Mille fois merci david84 !
Je serai tenté de dire : soyons fous ! N'y aurait-il pas moyen malgré tout (je vais devoir gérer une quarantaine de ligne) de construire une formule plus abrupte que je pourrais copier d'une ligne sur l'autre ? Donc sans passer par la solution de la définition d'une plage comme celle que tu m'avais indiqué, même si cette solution serait élégante que la tienne ?
Merci encore (1001 x donc) :))
 

david84

XLDnaute Barbatruc
Re : Question sur les plages variables (sans vba)

Re
je ne comprends pas vraiment ta demande...si tu veux éviter de passer par une plage nommée, tu peux utiliser :
Code:
=NB.SI(DECALER(Feuil1!$A$1;;;10;MAX(SI(Feuil1!$A$1:$Z$1000<>"";COLONNE(Feuil1!$A$1:$Z$1000))));"A")
Formule à valider en matriciel (appuyer simultanément sur les touches Ctrl, Maj et entrée).
A+
 

Discussions similaires

Réponses
2
Affichages
113
Réponses
13
Affichages
313

Statistiques des forums

Discussions
312 206
Messages
2 086 202
Membres
103 157
dernier inscrit
youma