Compter les cellules colorer avec MFC et filtrées
Résolu/Fermé
kim67
-
12 nov. 2012 à 11:11
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 21 nov. 2012 à 17:11
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 21 nov. 2012 à 17:11
A voir également:
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350.
- Mise en forme conditionnelle Excel : toutes les techniques - Guide
- Si valeur comprise entre x et y alors excel ✓ - Forum Excel
- Formule excel pour additionner plusieurs cellules - Guide
- Somme si date comprise entre ✓ - Forum Excel
7 réponses
pépé35530
Messages postés
2942
Date d'inscription
vendredi 1 mai 2009
Statut
Membre
Dernière intervention
19 mars 2016
1 386
12 nov. 2012 à 11:58
12 nov. 2012 à 11:58
Bonjour,
Pourquoi ne pas utiliser la focntion nb.si avec le même critère que pour les cases colorées ?
A+
pépé
Pourquoi ne pas utiliser la focntion nb.si avec le même critère que pour les cases colorées ?
A+
pépé
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
12 nov. 2012 à 13:21
12 nov. 2012 à 13:21
Bonjour,
a savoir qu'il y a des données filtrées qui ne sont, évidement pas à prendre en compte.
Tu as oublié ce fil https://forums.commentcamarche.net/forum/affich-26088654-excel2007compter-info-cellules-non-cache ?
Soit c'est avec une colonne supplémentaire (avec =SOUS.TOTAL(103;A2)), soit c'est en vba...
eric
a savoir qu'il y a des données filtrées qui ne sont, évidement pas à prendre en compte.
Tu as oublié ce fil https://forums.commentcamarche.net/forum/affich-26088654-excel2007compter-info-cellules-non-cache ?
Soit c'est avec une colonne supplémentaire (avec =SOUS.TOTAL(103;A2)), soit c'est en vba...
eric
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
12 nov. 2012 à 15:57
12 nov. 2012 à 15:57
re,
Et le VBA je ne connaît pas (bien que je ne rechigne pas à apprendre !! )
Et bien tu vas apprendre... ;-)
NB : si le seul filtre actif est sur la date NB.SI() proposé au-dessus est suffisant.
Si plusieurs filtres sont actifs combiner tous les critères par formule devient vite lourd et contraignant en saisie.
La fonction personnalisée ligVisible(plage) retourne une matrice avec :
- 0 si la ligne est masquée
- 1 si la ligne est visible
(plage doit faire 1 colonne de large sinon #NOMBRE!)
Exemple syntaxe :
=ligVisible(A2:A14)
retourne :
{0;1;0;0;1;0;0;1;0;0;1;0;0}
Exemple 2 : nombre de dates visibles <= aujourd'hui :
=SOMMEPROD((ligVisible(A2:A14))*(A2:A14<=AUJOURDHUI()))
retourne :
3
Code à mettre dans un module général :
https://www.cjoint.com/?BKmpUTZuD0V
eric
Et le VBA je ne connaît pas (bien que je ne rechigne pas à apprendre !! )
Et bien tu vas apprendre... ;-)
NB : si le seul filtre actif est sur la date NB.SI() proposé au-dessus est suffisant.
Si plusieurs filtres sont actifs combiner tous les critères par formule devient vite lourd et contraignant en saisie.
La fonction personnalisée ligVisible(plage) retourne une matrice avec :
- 0 si la ligne est masquée
- 1 si la ligne est visible
(plage doit faire 1 colonne de large sinon #NOMBRE!)
Exemple syntaxe :
=ligVisible(A2:A14)
retourne :
{0;1;0;0;1;0;0;1;0;0;1;0;0}
Exemple 2 : nombre de dates visibles <= aujourd'hui :
=SOMMEPROD((ligVisible(A2:A14))*(A2:A14<=AUJOURDHUI()))
retourne :
3
Code à mettre dans un module général :
Function ligVisible(plage As Range) As Variant Dim c As Range, réponse() As Long ' une seule colonne acceptée dans 'plage' If plage.Columns.Count > 1 Then ligVisible = xlErrNum ReDim réponse(1 To plage.Rows.Count) For Each c In plage réponse(c.Row - plage.Row + 1) = (Not c.EntireRow.Hidden) * -1 Next c ligVisible = Application.Transpose(réponse) End Function
https://www.cjoint.com/?BKmpUTZuD0V
eric
Coucou !
Alors j'ai lu (et relu ^^) ton message. J'ai regardé ta feuille aussi.
Mais pourquoi est-ce que à la place de la réponse de la formule apparaît #NAME ?
Je supose que tu te souviens que j'ai beaucoup de mal ^^ (d'ailleurs je suis toujours blonde hein !! ) donc, si tu propose de m'aider, ce ne sera pas de tout repos hihi !
Alors j'ai lu (et relu ^^) ton message. J'ai regardé ta feuille aussi.
Mais pourquoi est-ce que à la place de la réponse de la formule apparaît #NAME ?
Je supose que tu te souviens que j'ai beaucoup de mal ^^ (d'ailleurs je suis toujours blonde hein !! ) donc, si tu propose de m'aider, ce ne sera pas de tout repos hihi !
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
Modifié par eriiic le 13/11/2012 à 10:39
Modifié par eriiic le 13/11/2012 à 10:39
Bonjour,
il faut accepter les macros à l'ouverture du fichier.
C'est différent selon la version excel.
Sur 2003 : 'outils / options... / sécurité / sécurité des macros...' cocher 'niveau moyen'
Rouvrir le fichier
Sur 2010 : ' fichiers / options / centre de gestion de la confidentialité / paramètre du centre de gestion de la confidentialité...' cocher 'désactiver / toutes les macros avec notification'
Rouvrir le fichier
A l'ouverture cliquer sur la bande jaune en haut pour accepter les macros.
Pour l'utiliser sur tes classeurs :
- soit garder le classeur exemple ouvert
- soit copier le code dans un module général de ton classeur (mais essaie déjà de voir si ça te va).
Alt+F11 pour ouvrir l'éditeur VBE, clic-droit sur le projet à gauche et 'insérer un module'.
Copier coller le code depuis 'Function' jusqu'à 'End Function' dans Module1
Ensuite elle sera disponible comme toutes les autres fonctions excel (dans catégorie Personnalisée)
eric
il faut accepter les macros à l'ouverture du fichier.
C'est différent selon la version excel.
Sur 2003 : 'outils / options... / sécurité / sécurité des macros...' cocher 'niveau moyen'
Rouvrir le fichier
Sur 2010 : ' fichiers / options / centre de gestion de la confidentialité / paramètre du centre de gestion de la confidentialité...' cocher 'désactiver / toutes les macros avec notification'
Rouvrir le fichier
A l'ouverture cliquer sur la bande jaune en haut pour accepter les macros.
Pour l'utiliser sur tes classeurs :
- soit garder le classeur exemple ouvert
- soit copier le code dans un module général de ton classeur (mais essaie déjà de voir si ça te va).
Alt+F11 pour ouvrir l'éditeur VBE, clic-droit sur le projet à gauche et 'insérer un module'.
Copier coller le code depuis 'Function' jusqu'à 'End Function' dans Module1
Ensuite elle sera disponible comme toutes les autres fonctions excel (dans catégorie Personnalisée)
eric
pépé35530
Messages postés
2942
Date d'inscription
vendredi 1 mai 2009
Statut
Membre
Dernière intervention
19 mars 2016
1 386
13 nov. 2012 à 09:45
13 nov. 2012 à 09:45
Bonjour,
Concernant la fonction NB.SI il me semble qu'il y a un bug :
lorsque l'on travaille sur des dates, la fonction ne fonctionne pas lorsque le critière est une date, une adresse de cellule ou la fonction aujourdhui().
Pourtant les docs proposent bien cette option.
Par contre, pas de problèmes pour des chaînes de caractères ou des nombres.
Une explication ?
A+
pépé
Concernant la fonction NB.SI il me semble qu'il y a un bug :
lorsque l'on travaille sur des dates, la fonction ne fonctionne pas lorsque le critière est une date, une adresse de cellule ou la fonction aujourdhui().
Pourtant les docs proposent bien cette option.
Par contre, pas de problèmes pour des chaînes de caractères ou des nombres.
Une explication ?
A+
pépé
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
Modifié par eriiic le 13/11/2012 à 10:41
Modifié par eriiic le 13/11/2012 à 10:41
Bonjour pépé,
Quand tu fais référence à une fonction ou une cellule il faut conserver le test en chaine (entre des " ") et concaténer avec la variable.
Exemples de syntaxe :
=NB.SI(A2:A15;"<=09/11/2012")
=NB.SI(A2:A15;"<=" & AUJOURDHUI())
=NB.SI(A2:A15;"<=" & A6)
eric
Quand tu fais référence à une fonction ou une cellule il faut conserver le test en chaine (entre des " ") et concaténer avec la variable.
Exemples de syntaxe :
=NB.SI(A2:A15;"<=09/11/2012")
=NB.SI(A2:A15;"<=" & AUJOURDHUI())
=NB.SI(A2:A15;"<=" & A6)
eric
pépé35530
Messages postés
2942
Date d'inscription
vendredi 1 mai 2009
Statut
Membre
Dernière intervention
19 mars 2016
1 386
13 nov. 2012 à 14:37
13 nov. 2012 à 14:37
Bonjour eriiic,
Merci pour l'info. Cela fonctionne effectivement.
Ce qui est perturbant, c'es que Excel rajoute dans certaines configurations des guillemets et dans d'autres non.
L'aide n'indique pas cette particularité et la doc que j'avais n'abordait pas ce problème.
kim67 avait le même problème avec sa formule. En la corrigeant, il devrait résoudre son problème de comptage.
=count.if(A2;A19;"<"&TODAY())
Merci et bonne journée
Merci pour l'info. Cela fonctionne effectivement.
Ce qui est perturbant, c'es que Excel rajoute dans certaines configurations des guillemets et dans d'autres non.
L'aide n'indique pas cette particularité et la doc que j'avais n'abordait pas ce problème.
kim67 avait le même problème avec sa formule. En la corrigeant, il devrait résoudre son problème de comptage.
=count.if(A2;A19;"<"&TODAY())
Merci et bonne journée
Erci,
Pour comprendre le VBA j'ai pris la liberté de voguer sur les terribles flôts d'Internet...
Je suis tombé sur un site que je trouve très bien :
http://www.info-3000.com/vbvba
J'ai appris à faire quelques petites manip concernant les macros :
Faire une macro grâce à l'enregistrement, la modifier et par la même la créer sur le Visual Basic... Et même l'insérer dans la barre d'outils et en modifier l'îcone (pas d'ironie svp ^^)
Maintenant je continue le cours mais je t'avoue que je suis tombé sur quelque chose qui me complique la vie...
http://www.info-3000.com/vbvba/variableconstante.php
Les variables et constantes... Je ne comprends rien !!
J'ai voulu aller plus loin en me disant que peut-être je comprendrais après mais...
Il s'agit des ImputBox... Avec des messages
http://www.info-3000.com/vbvba/inputbox.php
J'ai à chaque fois collé les codes pour voir ce que ça donnait. Mais Je ne comprends pas ...
1) Qu'est-ce que c'est c'est foutus variables ?? A quoi ca sert, ou tu les mets ????
2) C'est peut être un peu foufou, mais je ne vois pas concrêtement quand on se sert de ça puisque ça affiche un message tout bête en incluant une donnée que tu as rentrée...
3) Je ne comprends pas quand il parle de STRING, d'INTEGRER...
Je crois que j'ai besoin de ton aide ^^ Mais me chamboule pas trop ce que j'ai appris hein ^^
Pour comprendre le VBA j'ai pris la liberté de voguer sur les terribles flôts d'Internet...
Je suis tombé sur un site que je trouve très bien :
http://www.info-3000.com/vbvba
J'ai appris à faire quelques petites manip concernant les macros :
Faire une macro grâce à l'enregistrement, la modifier et par la même la créer sur le Visual Basic... Et même l'insérer dans la barre d'outils et en modifier l'îcone (pas d'ironie svp ^^)
Maintenant je continue le cours mais je t'avoue que je suis tombé sur quelque chose qui me complique la vie...
http://www.info-3000.com/vbvba/variableconstante.php
Les variables et constantes... Je ne comprends rien !!
J'ai voulu aller plus loin en me disant que peut-être je comprendrais après mais...
Il s'agit des ImputBox... Avec des messages
http://www.info-3000.com/vbvba/inputbox.php
J'ai à chaque fois collé les codes pour voir ce que ça donnait. Mais Je ne comprends pas ...
1) Qu'est-ce que c'est c'est foutus variables ?? A quoi ca sert, ou tu les mets ????
2) C'est peut être un peu foufou, mais je ne vois pas concrêtement quand on se sert de ça puisque ça affiche un message tout bête en incluant une donnée que tu as rentrée...
3) Je ne comprends pas quand il parle de STRING, d'INTEGRER...
Je crois que j'ai besoin de ton aide ^^ Mais me chamboule pas trop ce que j'ai appris hein ^^
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
13 nov. 2012 à 18:57
13 nov. 2012 à 18:57
Re,
1) les variables servent à conserver une valeur et la faire évoluer au cours du traitement.
Plus tard il faudra que tu regardes leur portée et leur durée de vie.
2) les exemples ne sont peut-être pas terribles ni concrets, ils sont là juste pour montrer l'utilisation d'une fonction.
3) si tu ne connais pas les strings je vais t'apprendre ce que c'est.
Ci-joint un petit exemple peut-être un peu plus complet pour te mettre le pied à l'étrier.
https://www.cjoint.com/?BKns2GY5d2M
J'ai pris le temps de tout commenter, alors prend le tien pour lire tous les commentaires ;-)
Tu n'as pas dit si tu étais arrivée à faire tourner la fonction.
eric
1) les variables servent à conserver une valeur et la faire évoluer au cours du traitement.
Plus tard il faudra que tu regardes leur portée et leur durée de vie.
2) les exemples ne sont peut-être pas terribles ni concrets, ils sont là juste pour montrer l'utilisation d'une fonction.
3) si tu ne connais pas les strings je vais t'apprendre ce que c'est.
Ci-joint un petit exemple peut-être un peu plus complet pour te mettre le pied à l'étrier.
https://www.cjoint.com/?BKns2GY5d2M
J'ai pris le temps de tout commenter, alors prend le tien pour lire tous les commentaires ;-)
Tu n'as pas dit si tu étais arrivée à faire tourner la fonction.
eric
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
Modifié par eriiic le 13/11/2012 à 23:50
Modifié par eriiic le 13/11/2012 à 23:50
PS
comme on me le fait remarquer à juste titre : pour avoir le prix TTC il multiplier le prix hors taxe par (1 + tva3)
Ca fera l'objet de ton 1er TP : corriger les erreurs du code ;-)
eric
Bon, je ramasse les copies, copie blanche =0
Voilà la solution : https://www.cjoint.com/?BKnxYe6F9Hr
J'ai ajouté également un appel de procédure par bouton
eric
comme on me le fait remarquer à juste titre : pour avoir le prix TTC il multiplier le prix hors taxe par (1 + tva3)
Ca fera l'objet de ton 1er TP : corriger les erreurs du code ;-)
eric
Bon, je ramasse les copies, copie blanche =0
Voilà la solution : https://www.cjoint.com/?BKnxYe6F9Hr
J'ai ajouté également un appel de procédure par bouton
eric
Coucou !
Désolée hier je n'ai pas eu le temps de regarder.
Merci pour tes info, oui oui explique moi j'apprends !!
Pour la formule du coup j'ai pas essayé, je trouve ça super interessant enfaite le code VBA du coup ben j'ai complètement oublié d'essayer ^^
Je vais faire mon tp et promis je ne triche pas !! Je reviens dans.. euh ben dés que j'ai fini ^^
Désolée hier je n'ai pas eu le temps de regarder.
Merci pour tes info, oui oui explique moi j'apprends !!
Pour la formule du coup j'ai pas essayé, je trouve ça super interessant enfaite le code VBA du coup ben j'ai complètement oublié d'essayer ^^
Je vais faire mon tp et promis je ne triche pas !! Je reviens dans.. euh ben dés que j'ai fini ^^
Voila, alors ma réponse est :
Next lig ' ligne suivante
Application.EnableEvents = False 'bloquer la détection des évènements
Range("F2") = nbArticle ' inscription du résultat
[G2] = totalHT * (1 + tva3) ' façon courte de désigner une cellule, inscription du résultat
Application.EnableEvents = True 'rétablir la détection des évènements
Par contre quand je fais F8 ca sélectionne tout et quand je fais F5 il y a une boîte de dialogue qui me demande de rechercher quelque chose, j'ai donc simplement supprimé ton message et j'ai essayé de décortiquer ton code.
J'ai bien lu tes annotations et pour la plus part je crois avoir compris. Dr'ailleurs je prends toujours le temps de te lire, c'est juste que je n'arrivais pas à tout saisir. Mais j'ai l'impression que ça va mieux.
J'ai repris ton doc et j'ai mis dans le code ce que j'avais compris.. ou non.
Merci beaucoup en tout cas, j'ai déjà bien compris certaines choses
Next lig ' ligne suivante
Application.EnableEvents = False 'bloquer la détection des évènements
Range("F2") = nbArticle ' inscription du résultat
[G2] = totalHT * (1 + tva3) ' façon courte de désigner une cellule, inscription du résultat
Application.EnableEvents = True 'rétablir la détection des évènements
Par contre quand je fais F8 ca sélectionne tout et quand je fais F5 il y a une boîte de dialogue qui me demande de rechercher quelque chose, j'ai donc simplement supprimé ton message et j'ai essayé de décortiquer ton code.
J'ai bien lu tes annotations et pour la plus part je crois avoir compris. Dr'ailleurs je prends toujours le temps de te lire, c'est juste que je n'arrivais pas à tout saisir. Mais j'ai l'impression que ça va mieux.
J'ai repris ton doc et j'ai mis dans le code ce que j'avais compris.. ou non.
Merci beaucoup en tout cas, j'ai déjà bien compris certaines choses
J'ai trouvé un autre document qui complete bien les explications du site.
Mais comme toujours, ...
C'est sur le chapitre If - Then - Else
Function ComprisEntre15et20 (nombre As Integer) As Boolean
If (nombre < 15) Then
ComprisEntre15et20 = False
ElseIf (nombre > 20) Then
ComprisEntre15et20 = False
Else
ComprisEntre15et20 = True
End If
End Function
Pourquoi ne pas mettre
If (nombre < 15) Then
ComprisEntre15et20 ) = False
ElseIf (nombre > 20) = False
ElseIf (nombre >= 15) = True
End If
End Function
??? hihi je n'ai peut être pas bien cerné la facon de penser de VBA
Mais comme toujours, ...
C'est sur le chapitre If - Then - Else
Function ComprisEntre15et20 (nombre As Integer) As Boolean
If (nombre < 15) Then
ComprisEntre15et20 = False
ElseIf (nombre > 20) Then
ComprisEntre15et20 = False
Else
ComprisEntre15et20 = True
End If
End Function
Pourquoi ne pas mettre
If (nombre < 15) Then
ComprisEntre15et20 ) = False
ElseIf (nombre > 20) = False
ElseIf (nombre >= 15) = True
End If
End Function
??? hihi je n'ai peut être pas bien cerné la facon de penser de VBA
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
14 nov. 2012 à 16:26
14 nov. 2012 à 16:26
Et bien voilà, tu avances.
j'ai demandé à excel de compter de la A2 à A30 par exemple et que demain il s'avère que j'ai plus 29 lignes à calculer mais 40 ?
Une fois créée, une fonction personnalisée s'utilise comme n'importe quelle fonction excel.
Donc tu fais pareil qu'avant, mêmes possibilités :
- mettre tout de suite une grande plage
- nommer la plage et insérer des lignes à l'intérieur du tableau au fur et à mesure des besoins.
- utiliser un nom dynamique
- sur 2010 : convertir la plage en tableau et utiliser les références structurées
Exemple avec un nom dynamique : https://www.cjoint.com/?BKoqzbooICS
J'ai modifié le code pour qu'il accepte des plages de plusieurs colonnes.
eric
j'ai demandé à excel de compter de la A2 à A30 par exemple et que demain il s'avère que j'ai plus 29 lignes à calculer mais 40 ?
Une fois créée, une fonction personnalisée s'utilise comme n'importe quelle fonction excel.
Donc tu fais pareil qu'avant, mêmes possibilités :
- mettre tout de suite une grande plage
- nommer la plage et insérer des lignes à l'intérieur du tableau au fur et à mesure des besoins.
- utiliser un nom dynamique
- sur 2010 : convertir la plage en tableau et utiliser les références structurées
Exemple avec un nom dynamique : https://www.cjoint.com/?BKoqzbooICS
J'ai modifié le code pour qu'il accepte des plages de plusieurs colonnes.
eric
Coucou !
Oui j'avance et heureusement.
Cependant, j'ai un soucis... J'ai repris exactement la même formule dinamique et la même ecriture VBA que toi. J'ai ensuite mis en action et je n'obtient aucune réponse ######
J'ai donc modifié le nom pour mettre ColF7 au lieu de colDates. Pas de réponse. J'ai alors compris que je devais sûrement définir, comme toi, ColF7... Mais lorsque j'ai cherché où tu avais définit la tienne je n'ai pas trouvé. Tu as effectivement mis la formule pour le montrer mais je n'ai pas trouvé dans VBA où tu l'avais saisie.
Je suis perplexe du coup !!
Ca veut dire qu il faut faire trois ecriture ? Une VBA de base (livisible), une dans la case où i y aura la réponse, et une pour définir la zone ??
J'ai compris hier ce que c'était C dans "Dim C" ^^ c'était dans le cours de Cathy ^^ Hey hey
Oui j'avance et heureusement.
Cependant, j'ai un soucis... J'ai repris exactement la même formule dinamique et la même ecriture VBA que toi. J'ai ensuite mis en action et je n'obtient aucune réponse ######
J'ai donc modifié le nom pour mettre ColF7 au lieu de colDates. Pas de réponse. J'ai alors compris que je devais sûrement définir, comme toi, ColF7... Mais lorsque j'ai cherché où tu avais définit la tienne je n'ai pas trouvé. Tu as effectivement mis la formule pour le montrer mais je n'ai pas trouvé dans VBA où tu l'avais saisie.
Je suis perplexe du coup !!
Ca veut dire qu il faut faire trois ecriture ? Une VBA de base (livisible), une dans la case où i y aura la réponse, et une pour définir la zone ??
J'ai compris hier ce que c'était C dans "Dim C" ^^ c'était dans le cours de Cathy ^^ Hey hey
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
15 nov. 2012 à 09:14
15 nov. 2012 à 09:14
Bonjour,
Ca veut dire qu il faut faire trois ecriture ? Une VBA de base (livisible), une dans la case où i y aura la réponse, et une pour définir la zone ??
exactement
On défini un nom dans le Gestionnaire de nom :
https://www.cjoint.com/?BKpi7MvqBv2
avec =DECALER(Feuil1!$A$2;;;NBVAL(Feuil1!$A:$A)-1;)
le nom dynamique définit une plage qui s'étend au fur et à mesure des saisies dans A.
Ne pas laisser de trou.
Si en A15 tu saisis 07/11/12, F1 passera à 4.
- sur 2010 : convertir la plage en tableau et utiliser les références structurées
La tu m'as completement perdu !!
Cette méthode est intéressante, surtout si tu as plusieurs plages dans tes sommeprod() car toutes les plages doivent y avoir la même taille.
Si tu utilises un nom dymamique à l'intérieur, tu dois le faire pour toutes les plages utilisées dans le sommeprod(). C'est plus sumple avec les références structurées.
Par contre si tu passes ton classeur à qcq'un qui n'a pas 2010 il ne fonctionnera plus
Tu as déjà pas mal de choses à assimiler, tu dis si ça vaut le coup...
eric
Ca veut dire qu il faut faire trois ecriture ? Une VBA de base (livisible), une dans la case où i y aura la réponse, et une pour définir la zone ??
exactement
On défini un nom dans le Gestionnaire de nom :
https://www.cjoint.com/?BKpi7MvqBv2
avec =DECALER(Feuil1!$A$2;;;NBVAL(Feuil1!$A:$A)-1;)
le nom dynamique définit une plage qui s'étend au fur et à mesure des saisies dans A.
Ne pas laisser de trou.
Si en A15 tu saisis 07/11/12, F1 passera à 4.
- sur 2010 : convertir la plage en tableau et utiliser les références structurées
La tu m'as completement perdu !!
Cette méthode est intéressante, surtout si tu as plusieurs plages dans tes sommeprod() car toutes les plages doivent y avoir la même taille.
Si tu utilises un nom dymamique à l'intérieur, tu dois le faire pour toutes les plages utilisées dans le sommeprod(). C'est plus sumple avec les références structurées.
Par contre si tu passes ton classeur à qcq'un qui n'a pas 2010 il ne fonctionnera plus
Tu as déjà pas mal de choses à assimiler, tu dis si ça vaut le coup...
eric
Ben mon envie d'apprendre te dirais bien OUI OUI APPRENDS MOI APRENDS MOI ^^
C'est quelque chose qui ne me sera pas utile ici je pense. Donc très probablement, si tu le veux bien, dés qu'on aura fini avec mon document, je serai prête à apprendre la lecon suivante.
Par contre, j'ai fait ce que tu m'as dit. C'est super, maintenant je sais nommer des choses :D
mais le problème c'est que ... Sur mon document j'ai essayé et j'obtient O... J'ai vérifié, je ne me suis pas trompé dans le nom de la colonne. La formule VBA est toujours la bonne et la formule est exacte aussi.... Alors je me suis dis que jallais te montrer. Et puis là... Lorsque j'ai copié la feuille j'ai carrément eu droit à ####
Je ne comprends rien, pourtant tout me semble bon. QU'est ce que j'ai fais de mal ??
Encore une fois je te remercie pour le temps que tu prends pour me repondre, je me doute que ce n est pas facile avec quelqu un en face de toi qui te trouve des questions à chaque nouvelle info... :/
C'est quelque chose qui ne me sera pas utile ici je pense. Donc très probablement, si tu le veux bien, dés qu'on aura fini avec mon document, je serai prête à apprendre la lecon suivante.
Par contre, j'ai fait ce que tu m'as dit. C'est super, maintenant je sais nommer des choses :D
mais le problème c'est que ... Sur mon document j'ai essayé et j'obtient O... J'ai vérifié, je ne me suis pas trompé dans le nom de la colonne. La formule VBA est toujours la bonne et la formule est exacte aussi.... Alors je me suis dis que jallais te montrer. Et puis là... Lorsque j'ai copié la feuille j'ai carrément eu droit à ####
Je ne comprends rien, pourtant tout me semble bon. QU'est ce que j'ai fais de mal ??
Encore une fois je te remercie pour le temps que tu prends pour me repondre, je me doute que ce n est pas facile avec quelqu un en face de toi qui te trouve des questions à chaque nouvelle info... :/
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
Modifié par eriiic le 15/11/2012 à 09:44
Modifié par eriiic le 15/11/2012 à 09:44
Quand tu as des ##### c'est que la colonne est trop petite pour afficher.
Elargis la et tu lis #NOM! : un nom dans la formule n'est pas reconnu.
ligVisible sans doute...
Donc tu as bien mis la fonction, mais une fonction personnalisée doit être dans un module général, pas dans un module de feuille.
Clic-droit dans le projet pour insérer un module puis couper-coller le code, ça devait aller mieux.
Accessoirement dans la définition de ColF7 tu as utilisé des références structurées.
Bon, ça c'est fait ! ;-)
eric
PS : tu as utilisé les ref structurées, mais mal...
Et si tu les utilises, tu peux les utiliser directement dans la formule, inutile de passer par un nom (sauf si tu veux éclaircir et raccourcir ma formule)
Donc en B498 :
=SOMMEPROD(ligVisible(Table_FY1213_Master_Plan_Opérations[F7])*(Table_FY1213_Master_Plan_Opérations[F7]<=$E$498))
eric
Elargis la et tu lis #NOM! : un nom dans la formule n'est pas reconnu.
ligVisible sans doute...
Donc tu as bien mis la fonction, mais une fonction personnalisée doit être dans un module général, pas dans un module de feuille.
Clic-droit dans le projet pour insérer un module puis couper-coller le code, ça devait aller mieux.
Accessoirement dans la définition de ColF7 tu as utilisé des références structurées.
Bon, ça c'est fait ! ;-)
eric
PS : tu as utilisé les ref structurées, mais mal...
Et si tu les utilises, tu peux les utiliser directement dans la formule, inutile de passer par un nom (sauf si tu veux éclaircir et raccourcir ma formule)
Donc en B498 :
=SOMMEPROD(ligVisible(Table_FY1213_Master_Plan_Opérations[F7])*(Table_FY1213_Master_Plan_Opérations[F7]<=$E$498))
eric
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
Modifié par eriiic le 15/11/2012 à 10:01
Modifié par eriiic le 15/11/2012 à 10:01
J'avais édité mon post (le PS), tu n'as pas vu je crois.
Je précise qu'une référence structurée s'étend automatiquement au fur et à mesure des saisies
Je précise qu'une référence structurée s'étend automatiquement au fur et à mesure des saisies
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 249
21 nov. 2012 à 17:11
21 nov. 2012 à 17:11
Bonjour,
Pour ton problème de lignes vides sur l'autre fichier je pense que tu n'as pas le choix. Il faut les enlever et partir sur un fichier propre avant tout traitement des données.
Pour te donner une idée, avec ses 65000 lignes vides, enregistré sur 2003 il fait 5 Mo. Donc sûrement autant en mémoire vive d'ou les lenteurs insupportables...
Si c'est un problème d'extraction tu peux toujours poser la question au forum Base de Données, ils connaissent peut-être ton logiciel.
J'ai complété la fonction par d'autres.
Dont une qui te permet de connaitre directement le nombre de dates affichées <= date, en comptant ou non les cellules vides sans formule sommeprod().
Mais ça reste une formule matricielle (même si on la valide normalement) donc à utiliser raisonnablement.
https://www.cjoint.com/?BKvrhc5Rgod
eric
Pour ton problème de lignes vides sur l'autre fichier je pense que tu n'as pas le choix. Il faut les enlever et partir sur un fichier propre avant tout traitement des données.
Pour te donner une idée, avec ses 65000 lignes vides, enregistré sur 2003 il fait 5 Mo. Donc sûrement autant en mémoire vive d'ou les lenteurs insupportables...
Si c'est un problème d'extraction tu peux toujours poser la question au forum Base de Données, ils connaissent peut-être ton logiciel.
J'ai complété la fonction par d'autres.
Dont une qui te permet de connaitre directement le nombre de dates affichées <= date, en comptant ou non les cellules vides sans formule sommeprod().
Mais ça reste une formule matricielle (même si on la valide normalement) donc à utiliser raisonnablement.
https://www.cjoint.com/?BKvrhc5Rgod
eric
12 nov. 2012 à 13:01
J'ai déjà essayé avec cette formule :
=count.if(A2;A19;<TODAY())
Mais Excel ne l'accepte pas. Probablement ai-je oublié quelque chose ?
12 nov. 2012 à 13:13
il faut écrire A2:A19 (deux points) et non pas A2;A19 (point virgule) pour indiquer une plage.
12 nov. 2012 à 13:15
J'ai donc bien mis la "bonne" formule (avec ":" et non ";") et ça ne fonctionne pas.
12 nov. 2012 à 13:20
=COUNT.IF(A2:A19;"<" & TODAY())
Cordialement.
12 nov. 2012 à 13:24