FONCTION ou MACRO comptant le nombre de ligne [Résolu/Fermé]

Signaler
-
Messages postés
23564
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2020
-
Bonjour,


Voilà j'ai un problème avec mon tableau. J'ai beau cherché depuis ce matin sur différents forum, je ne trouve pas la réponse à mon problème. Je ne sais toujours pas si je dois utiliser une macro ou une simple fonction peut me suffire.

Je vous expose mon problème.

J'aimerai compter le nombre de ligne d'un tableau répondant au critère d'une autre colonne. Cela parait simple de premier abord mais si je fais appel à vous c'est que cela se complique, je vais donc tenter d'illustrer le problème :


J'ai donc plusieurs colonnes

A (identifiant) - ... - AH (date)

J'aimerai donc compter le nombre de ligne en A avant une certaine date rentrer en colonne AH.
Là ou cela se complique est que le tableau a plusieurs lignes fusionnées (exemple ligne 9 et 10 correspondent au même identifiant). J'ai donc pour d'auter raison du scinder les cellules correspondant à la date en AH pour faire des fonctions SOMMEPROD. Maintenant le problème est d'éviter les doublons.

Bref, un problème un peu compliqué donc je peux aiguiller car ce n'est pas facile à exposer.


N'hesitez pas à m'aider et me poser des questions.


Bien à vous

Elariana

P.S : je travail sous open office calc, mais si j'ai la solution sous excel cela me va bien !

13 réponses

Messages postés
2368
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
8 octobre 2020
879
Bonjour,
Un peu embrouillé tout ça.
Si mon interprétation est correcte il faut dénombrer les lignes qui répondent à deux conditions :
la date en colonne AH est antérieure à une date fixée (en $AG$3 par exemple)
et la cellule correspondante en colonne A n'est pas vide
Dans cette hypothèse on peut appliquer =SOMMEPROD((AH2:AH100<$AG$3)*(A2:A100<>""))
Attention avec les cellules fusionnées la cellule qui contient une valeur n'est pas toujours celle que l'on croit en fonction de l'alignement choisi.
Cela répond en partie à ma question, car il me compte bien le nombre de ligne, le problème vient des cellules scinder. Je m'explique :

Pour un identifiant de la colonne A (identifiant), je peux avoir deux lignes fusionnés mais scindées en AH pour le champ date qui est donc mis en doublon. Cette formule proposée ne prend donc pas en compte mes doublons.
Messages postés
23564
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2020
6 407
Bonjour tout le monde,

Pour un identifiant de la colonne A (identifiant), je peux avoir deux lignes fusionnés mais scindées en AH pour le champ date qui est donc mis en doublon. Cette formule proposée ne prend donc pas en compte mes doublons.
Donc ça revient à dire que seule la présence d'une date t'interesse....

=NB.SI(AH2:AH100;"<" & $AG$3)

eric
Non justement la présence la date est intéressante uniquement comme critère, car avec cette fonction proposée, je compte les lignes de la colonne AH (champ date) et donc cela en compte les doublons.

En fait mon tableau se constitue de la sorte

En colonne A j'ai mes identifiant. : La plupart du temps j'ai un identifiant pour une seule ligne, mais certaine ligne sont fusionné je me retrouve donc avec un identifiant pour deux lignes. Par contre la ligne n'est pas fusionné dans sa totalité, notamment au niveau de la colonne AH (champ date) ou les lignes ont été scindés pour permettre d'autres calcul.

Vous me suivez toujours ?
Messages postés
23564
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2020
6 407
Vous me suivez toujours ?
non

1ère réponse mauvaise car Cette formule proposée ne prend donc pas en compte mes doublons.
2nde réponse mauvaise car donc cela en compte les doublons.

Dépose un fichier exemple ( en décrivant dessus les résultats souhaités) sur cijoint.fret colle ici le lien fourni
Merci de ton aide.
Alors j'ai simplifié le tableau pour résumer la colonne AH se trouve en J maintenant et l'identifiant qui m'intéresse en A B ou C au choix ce la ne change rien. J'ai fait un tableau général en bas à droite pour comprendre les différents calculs que j'entreprends. La ligne en rouge correspond au résultat sur lequel j'aimerai tomber avec une formule ou macro.

Lien openoffice calc :http://www.cijoint.fr/cjlink.php?file=cj201008/cijTx0yIWL.ods

lien excel : http://www.cijoint.fr/cjlink.php?file=cj201008/cij5yAA15M.xls
Messages postés
2368
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
8 octobre 2020
879
Bonjour,
Est-il normal de trouver 2010 en A6 et 2009 en J6 (28/04/2009)?
Effectivement c'est une erreur de ma part, en A6 il faudrait 2009.

Mais plus loin dans le tableau (car celui-ci est un extrait) on peut trouver des codes avec 2010.
Messages postés
2368
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
8 octobre 2020
879
Les résultats en ligne 14 doivent-ils devenir 3,5,6 au lieu de 2,3,4?
Non justement ils doivent être de 2, 3 et 4.
En fait la ligne 7 - 8 et 9 -10 représente deux conventions pour 4 dates. Le résultat 3,5,6 ne prend pas en compte les doublons.

J'espère être clair.

Merci pour ton aide
Messages postés
2368
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
8 octobre 2020
879
En comptant les codes en colonne C: entrer en M14
=SOMMEPROD(($J$6:$J$100<="30/06/2009"*1)*($C$6:$C$100<>""))

Suggestion pour M15:
=SOMMEPROD(($I$6:$I$11="oui")*($J$6:$J$11<="30/06/09"*1)*($F$6:$F$11))

Il est possible d'améliorer le tableau récapitulatif: en M13 entrer 30/06/2009 et mettre la cellule au format personnalisé mmm aaaa pour afficher juin 2009. Idem pour N13, O13 etc.
Dans les formules remplacer "30/06/2009"*1 par M$13.
Les formules sont ainsi "copiables" horizontalement.
Super la formule fonctionne parfaitement. Merci beaucoup.

Maintenant pour avoir l'air moins bête, pourrais-tu me donner une explication à cette formule. Notamment sur la deuxième partie : *($C$6:$C$100<>""))

Concernant ta suggestion pour M15, il me semble que c'est la formule que j'ai mis dans la cellule non ?

Merci de ton aide l'ami

EDIT : finalement je n'arrive pas à la faire fonctionner dans mon tableau, je réessaye et vous tiens au courant
Messages postés
2368
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
8 octobre 2020
879
$C$6:$C$100<>"" en clair: C6:C100 différent (<>) de rien ("")
Pour M15 la syntaxe est différente dans le fichier Excel.
Un dernier conseil: essayez d'abandonner le bouton "fusionner et centrer" et surtout dans les feuilles avec pas mal de calculs.
ok j'ai compris d'où venait l'erreur. En fait le tableau que j'ai fourni n'était qu'un extrait. Il se trouve que dans le tableau original, il y a des lignes ou le champ date (colonne j dans l'exemple) n'est pas encore rempli. Donc il me semble que la formule n'est pas efficace dans ce cas.
Messages postés
2368
Date d'inscription
mercredi 3 février 2010
Statut
Membre
Dernière intervention
8 octobre 2020
879
Ajoutez un condition de date postérieure au 01/01/1900 pour éviter que les cellules vides ne soient assimilées à 0.
=SOMMEPROD(($J$6:$J$100<="30/06/2009"*1)*($J$6:$J$100>"01/01/1900"*1)*($C$6:$C$100<>""))
Super merci beaucoup de ton aide, la formule fonctionne cette fois parfaitement.

Pour ce qui est de la structure du tableau, j'ai en fait hérité de ce tableau, et je suis donc censé faire des tableaux intermédiaires pour réaliser des graphiques. Je pense à l'avenir en modifier la structure ou encore mieux l'integrer sur une base de donnée.

Voila merci pour tout
bonjour à tous

une question simple !!
je voudrais, sur ma colonne A, en partant de la dernière ligne (65536) remonter à la première ligne du dessus qui est renseignée (par ex ligne 1300) et mettre dans ma macro une variable : for i = 2 to 1300

le but final , en partant de cet exemple, est de filter différentes valeurs de la colonne A, de la ligne 2 à 1300 (ici). le nombres de lignes pouvant varier ...

ensuite, est-ce que je dois intégrer un nouvelle variable pour faire un filtre auto, en fonction de la valeur de ma cellule??

merci
Messages postés
23564
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2020
6 407
Bonjour,

for i = 2 to [A65536].end(xlup).row

eric
merci eric

j'ai une dernière question, je voudrais qu'il me copie les infos de chaque ligne (don i=i+1) mais j'ai tenté les Rows, range ou cells, mais il ne veut pas. la syntaxe ne doit pas être bonne ! !

Range(i, 26).Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste

c'est pour copier les infos de chaque ligne dans un new fichier

merci
Messages postés
23564
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2020
6 407
Re,

[A1:A1300].AutoFilter Field:=1, Criteria1:=ActiveCell


Mais tu n'es pas obligé d'activer une cellule pour l'utiliser, c'est même une perte de temps dans la macro.

Par exemple si ton critère est en E1 (ligne 1 colonne 5) :
[A1:X1300].AutoFilter Field:=1, Criteria1:=Cells(1,5)

eric

edit: tu as changé ta question....
je verrais ça après manger
Messages postés
23564
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2020
6 407
Bon comme c'était vite fait...

Si tu dois copier toutes les lignes il faut le faire en une fois :
[A1:X1300].Copy
Workbooks.Add
ActiveSheet.Paste

erix
non c'est une la fois !!!
un fichier à créer pour chaque ligne

++

encore merci
Messages postés
23564
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
14 octobre 2020
6 407
Ak, ok....

    Dim lig As Long
    For lig = 2 To 5
        Rows(lig).Copy
        Workbooks.Add
        ActiveSheet.Paste
    Next lig


eric