Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel
Excel Forum d'entraide sur Excel. Vos questions sur les fonctions, formules, manipulations, et tout sujet qui ne trouve pas sa place dans un sous-forum.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/03/2011, 22h10   #1
Membre habitué
 
Inscription : juin 2007
Messages : 173
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 173
Points : 145
Points : 145
Par défaut Somme de recherche à critères variables

Bonjour ,

Le sujet n'est pas simple a expliquer et la solution est complexe.

Je dispose de 3 colonnes de valeurs
dans mon exemple, on va dire que:
La colonne 1 correspond à l'age d'une personne
La colonne 2, au nombre de cheveux qu'elle a sur la tete
La colonne 3, au nombre de lignes qu'elle peut taper sur ordinateur / minute.

Je veux créer une matrice qui contient en ordonnée, l'age de la personne, en abscisse le nombre de cheveux sur la tete, avec des classes assez fines, soit 400 cellules de matrice (20*20)
Dans cette matrice, je veux obtenir le nombre de ligne totale que peuvent écrire les personnes correspondantes à chaque classe de chaque axe.
C'est à dire que, par exemple, je veux additionner les lignes que peuvent écrire les gens entre 45 et 50 ans qui ont entre 15000 et 15500 cheveux sur la tête. (*400 cas)

Il est facile de le faire en code VBA mais si ma liste contient 7000 lignes, j'ai peur que la boucle de travail qui va étudier 400 cases * 7000 lignes soit un poil longue (pour une histoire de cheveux...).

Je pense qu'il peut etre possible de le faire en formule matricielle mais je viens de perdre mon Week end dessus.

Merci d'avance à ceux qui pourront répondre.
COCONUT2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 09h32   #2
Membre actif
 
Bert Tranz
Inscription : juillet 2008
Messages : 149
Détails du profil
Informations personnelles :
Nom : Bert Tranz
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2008
Messages : 149
Points : 163
Points : 163
Bonjour,
Tu dois pouvoir faire quelquechose avec la formule sommeprod, je t'ai joint un exemple pour que tu puisses l'adapter à ton cas.
N'hésites pas si tu as besoin.

Cdlt
Fichiers attachés
Type de fichier : xls Test nb lignes.xls (18,5 Ko, 18 affichages)
tranzebou est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/03/2011, 19h01   #3
Membre Expert
 
Inscription : novembre 2006
Messages : 1 464
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : novembre 2006
Messages : 1 464
Points : 1 410
Points : 1 410
avec rechercheV aussi
la séquence est assez simple, bien vérifier la premiere et la derniere colonne pour les éccarts.
Code :
1
2
 
=SI(ET(RECHERCHEV(A2;A24:$C$43;2;FAUX)>0;RECHERCHEV(A2;A24:$C$43;2;FAUX)<$C$1);RECHERCHEV(A2;A24:$C$43;3;FAUX);"")
oops, j'avais mal lu, si tu veux les additionner, effectivement sommeprod est mieux
Fichiers attachés
Type de fichier : xls exemple.xls (34,0 Ko, 4 affichages)
alsimbad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 15h24   #4
Membre habitué
 
Inscription : juin 2007
Messages : 173
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 173
Points : 145
Points : 145
merci à vous deux.
Effectivement le somme prod est le mieux approprié.
Maintenant, je dois appliquer ce sommeprod dans une boucle qui récupère des listes de tailles variables.
Je récupère une liste, je mets la matrice à jour
puis je récupère une autre liste....

Le somme prod ne marche plus car il ne fonctionne que si les plages de données contiennent des cases non vides.

J'avais vu une solution avec des étiquettes qui savent se redimensionner grace à une formule mais là !

Un truc accessible via la commande
Affichage -> nom
Si quelqu'un a un tutoriel sur le sujet, merci de faire passer
COCONUT2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 06h04   #5
Membre Expert
 
Inscription : novembre 2006
Messages : 1 464
Détails du profil
Informations personnelles :
Âge : 49

Informations forums :
Inscription : novembre 2006
Messages : 1 464
Points : 1 410
Points : 1 410
Citation:
Envoyé par COCONUT2
Le somme prod ne marche plus car il ne fonctionne que si les plages de données contiennent des cases non vides.
c'est faux, il marche parfaitement avec des cellules vide. il ne marche pas si tes cellules a calculer contiennent du texte, et surtout, et je pense que c'est ton cas, si les plages a calculer sont de longueurs deifferentes.
pour ce qui est de creer des plages dynamiques, il te faut utiliser les fonctions decaler et nbval
Code :
=DECALER(A1;;;NBVAL(A:A)).
s'il y a des cellules vides, je te conseile de l'utiliser en prenant toujour la meme colonne pour le nombre de cellule. personnelement, s'il y a un colonne date, c'est celle que j'utilise
Code :
=DECALER(c1;;;NBVAL(A:A))
alsimbad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 23h50   #6
Membre habitué
 
Inscription : juin 2007
Messages : 173
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 173
Points : 145
Points : 145
Par défaut Exact

C'est exact Alsimbad

Effectivement j'avais à gérer des longueur de listes variables et c'est ce qui me gênait.

Pour les personnes intéressées par cette fonction, je la spécifie car elle n'est pas intuitive:
-Votre champs de liste est parfaitement défini et stable dans ses dimensions
Vous pouvez le sélectionner puis noter simplement son nom dans le champs à gauche juste au dessus du tableur, là où est écrit le nom de la case sélectionnée.

-Votre champs est de longueur variable,
Sélectionner la première case du champs puis Insertion - Nom - Définir
Vous pouvez alors donner le nom du champs puis, comme l'a indiqué Alsimba, dans la case "Fait référence à" , la formule
Code :
=DECALER(A1;;;NBVAL(A:A))
Avec A1 = case de début et NBVAL(A:A) qui donne le nombre de valeurs présentes.
Mais on peut tres bien noter NBVAL(B:B) ce qui permettra d'avoir un champs correspondant au nombre de valeurs de la colonne B.

C'est notamment pratique quand la colonne B contient une liste de valeurs et la colonne A des formules de calculs.
Ainsi, on peut tirer les formules sur 300 lignes en colonne A si on est sur que la colonne B n'aura jamais plus de 300 valeurs.

CA permettra à la fonction SOMMEPROD d'utiliser des champs de longueur variable qui sont toujours renseignés
COCONUT2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h54.


 
 
 
 
Partenaires

Hébergement Web