Une routine vb ?
Résolu/Fermé
sam130242
Messages postés
72
Date d'inscription
samedi 9 avril 2016
Statut
Membre
Dernière intervention
2 janvier 2017
-
29 avril 2016 à 11:01
sam130242 Messages postés 72 Date d'inscription samedi 9 avril 2016 Statut Membre Dernière intervention 2 janvier 2017 - 3 mai 2016 à 18:07
sam130242 Messages postés 72 Date d'inscription samedi 9 avril 2016 Statut Membre Dernière intervention 2 janvier 2017 - 3 mai 2016 à 18:07
A voir également:
- Une routine vb ?
- Vb - Télécharger - Langages
- Vb cable - Télécharger - Audio & Musique
- Vb editor - Télécharger - Langages
- Vb runtime - Télécharger - Divers Utilitaires
- Java routine environment - Télécharger - Langages
13 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 311
Modifié par michel_m le 29/04/2016 à 13:53
Modifié par michel_m le 29/04/2016 à 13:53
bonjour
une formule suffira
=SOMMEPROD(1/NB.SI(A1:A15;A1:A15))
Michel
une formule suffira
=SOMMEPROD(1/NB.SI(A1:A15;A1:A15))
Michel
sam130242
Messages postés
72
Date d'inscription
samedi 9 avril 2016
Statut
Membre
Dernière intervention
2 janvier 2017
Modifié par sam130242 le 29/04/2016 à 21:22
Modifié par sam130242 le 29/04/2016 à 21:22
bravo ! et merci !
j'avoue ne pas comprendre le fonctionnement de cette formule, mais ça marche ! c'est exactement ce que je voulais !
Question subsidiaire :
si mon tableau fait 15 lignes, la formule est celle décrite ci dessus (plage de A1 à A15).
Mais à chaque fois que je rajoute 1 ligne il faut que je réajuste "la plage" et que je modifie A15 en A16 ou A17 etc ... ?
Y a t-il une astuce pour ne pas avoir à modifier la plage à chaque fois que celle ci change de taille
merci
Cette question est d'ailleurs valable quelle que soit le type de formule!
j'avoue ne pas comprendre le fonctionnement de cette formule, mais ça marche ! c'est exactement ce que je voulais !
Question subsidiaire :
si mon tableau fait 15 lignes, la formule est celle décrite ci dessus (plage de A1 à A15).
Mais à chaque fois que je rajoute 1 ligne il faut que je réajuste "la plage" et que je modifie A15 en A16 ou A17 etc ... ?
Y a t-il une astuce pour ne pas avoir à modifier la plage à chaque fois que celle ci change de taille
merci
Cette question est d'ailleurs valable quelle que soit le type de formule!
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 311
Modifié par michel_m le 30/04/2016 à 07:56
Modifié par michel_m le 30/04/2016 à 07:56
Bonjour
avec la matricielle du matin, nombre de données <=100:
Si tu as des milliers de lignes, les formules matricielles sont très chronophages et il faut alors passer par du VBA (et non du vb)
Si c'est le cas, fais signe
Michel
avec la matricielle du matin, nombre de données <=100:
=SOMME(SI(A1:A100<>"";1/NB.SI(A1:A100;A1:A100);""))
Formule matricielle à valider par « ctrl+maj+entrée » (et non directement par « entrée »), le curseur clignotant dans la barre de formule. La formule est alors encadrée automatiquement par des accolades : { formule }
Si tu as des milliers de lignes, les formules matricielles sont très chronophages et il faut alors passer par du VBA (et non du vb)
Si c'est le cas, fais signe
Michel
ccm81
Messages postés
10905
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 décembre 2024
2 429
30 avril 2016 à 10:46
30 avril 2016 à 10:46
Bonjour
Pour compléter la proposition de Michel (salut à toi au passage), une non matricielle qui peut aller loin dans les lignes
Tu nommes dynamiquement la plage avec la formule
=DECALER(Feuil1!$A$1;0;0;NBVAL(Feuil1!$A:$A);1)
Puis la première formule de Michel devient
=SOMMEPROD(1/NB.SI(plage;plage))
Cdlmnt
Pour compléter la proposition de Michel (salut à toi au passage), une non matricielle qui peut aller loin dans les lignes
Tu nommes dynamiquement la plage avec la formule
=DECALER(Feuil1!$A$1;0;0;NBVAL(Feuil1!$A:$A);1)
Puis la première formule de Michel devient
=SOMMEPROD(1/NB.SI(plage;plage))
Cdlmnt
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sam130242
Messages postés
72
Date d'inscription
samedi 9 avril 2016
Statut
Membre
Dernière intervention
2 janvier 2017
30 avril 2016 à 17:06
30 avril 2016 à 17:06
1/ avant tout un commentaire d'ordre général :
Je vois que j'ai affaire à de vrais spécialistes !
Mais qu'est-ce que ces spécialistes ont à faire avec des gens de mon niveau ?
ça ne leur apporte rien (en terme de connaissances)
Il est vrai que nous sommes sur un forum dont un des objets est l'entre-aide, et je voulais remercier particulièrement les gens comme vous qui acceptent de dispenser de leur temps pour aider les autres "à tenter de s'améliorer" sur le sujet.
Donc merci, merci et merci à michel_m, ccm81... et les autres .... !!!
2/ (je ne perds pas le nord ! ...)
a/ je reprends l'idée de ccm81 : mais où dois-je placer mon "decaler ..." dans le tableau ?
b/ pour la matricielle : avec ou sans les accolades ça change quoi, je ne vois pas la différence
merci
Je vois que j'ai affaire à de vrais spécialistes !
Mais qu'est-ce que ces spécialistes ont à faire avec des gens de mon niveau ?
ça ne leur apporte rien (en terme de connaissances)
Il est vrai que nous sommes sur un forum dont un des objets est l'entre-aide, et je voulais remercier particulièrement les gens comme vous qui acceptent de dispenser de leur temps pour aider les autres "à tenter de s'améliorer" sur le sujet.
Donc merci, merci et merci à michel_m, ccm81... et les autres .... !!!
2/ (je ne perds pas le nord ! ...)
a/ je reprends l'idée de ccm81 : mais où dois-je placer mon "decaler ..." dans le tableau ?
b/ pour la matricielle : avec ou sans les accolades ça change quoi, je ne vois pas la différence
merci
ccm81
Messages postés
10905
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 décembre 2024
2 429
30 avril 2016 à 17:33
30 avril 2016 à 17:33
Bonjour
2. Le but est de nommer la plage à traiter, et décaler permet de la rendre évolutive
où dois je placer mon "décaler"
Onglet Formule/Nom definir/
Nom tu mets plage
Fait référence à
Tu mets la formule = DECALER(.....
https://support.microsoft.com/fr-fr/office/d%c3%a9finir-et-utiliser-des-noms-dans-les-formules-4d0f13ac-53b7-422e-afd2-abd7ff379c64?ui=fr-fr&rs=fr-fr&ad=fr#bmcreate_a_name_by_using_the_create_nam
Cdlmnt
2. Le but est de nommer la plage à traiter, et décaler permet de la rendre évolutive
où dois je placer mon "décaler"
Onglet Formule/Nom definir/
Nom tu mets plage
Fait référence à
Tu mets la formule = DECALER(.....
https://support.microsoft.com/fr-fr/office/d%c3%a9finir-et-utiliser-des-noms-dans-les-formules-4d0f13ac-53b7-422e-afd2-abd7ff379c64?ui=fr-fr&rs=fr-fr&ad=fr#bmcreate_a_name_by_using_the_create_nam
Cdlmnt
sam130242
Messages postés
72
Date d'inscription
samedi 9 avril 2016
Statut
Membre
Dernière intervention
2 janvier 2017
2 mai 2016 à 00:57
2 mai 2016 à 00:57
bonsoir,
j'ai reussi à faire fonctionner ce que je voulais faire avec un combiné de michel_m et ccm81, à savoir
a/ nommer la plage avec la fonction DECALER (avec nbval...)
b/ compter mes occurences uniques dans la col A avec la formule suivante :
"=SOMME(SI(plage_regrt<>"";1/NB.SI(plage_regrt;plage_regrt);""))"
Mon nouveau problème :
si je veux faire la même chose mais pour une autre colonne, faut-il que je nomme une nouvelle plage?
En fait ne peut-on pas définir 1 seule plage mais qui contiendrait le tableau en entier (avec toutes ses colonnes) et ensuite parametrer la colonne concernée par son numero par exemple?
ainsi la formule ci-dessus ressemblerait à (pour la 4eme col) :
"=SOMME(SI(ENCOURS_plage_regrt,4<>"";1/NB.SI(ENCOURS_plage_regrt,4;ENCOURS_plage_regrt,4);""))
je sais que ça ne fonctionne pas mais ce serait plus "dynamique"!
merci
j'ai reussi à faire fonctionner ce que je voulais faire avec un combiné de michel_m et ccm81, à savoir
a/ nommer la plage avec la fonction DECALER (avec nbval...)
b/ compter mes occurences uniques dans la col A avec la formule suivante :
"=SOMME(SI(plage_regrt<>"";1/NB.SI(plage_regrt;plage_regrt);""))"
Mon nouveau problème :
si je veux faire la même chose mais pour une autre colonne, faut-il que je nomme une nouvelle plage?
En fait ne peut-on pas définir 1 seule plage mais qui contiendrait le tableau en entier (avec toutes ses colonnes) et ensuite parametrer la colonne concernée par son numero par exemple?
ainsi la formule ci-dessus ressemblerait à (pour la 4eme col) :
"=SOMME(SI(ENCOURS_plage_regrt,4<>"";1/NB.SI(ENCOURS_plage_regrt,4;ENCOURS_plage_regrt,4);""))
je sais que ça ne fonctionne pas mais ce serait plus "dynamique"!
merci
ccm81
Messages postés
10905
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 décembre 2024
2 429
2 mai 2016 à 12:17
2 mai 2016 à 12:17
Bonjour
Possible, un exemple à adapter
http://www.cjoint.com/c/FEckhGQzAYQ
Cdlmnt
Possible, un exemple à adapter
http://www.cjoint.com/c/FEckhGQzAYQ
Cdlmnt
sam130242
Messages postés
72
Date d'inscription
samedi 9 avril 2016
Statut
Membre
Dernière intervention
2 janvier 2017
2 mai 2016 à 13:46
2 mai 2016 à 13:46
merci ccm81
je n'ai pas compris le COLONNE()-3 dans plagedyn !
1/ est-ce le nombre de col possibles à traiter ici les col A, E, I (et independamment de leur position (E aurait pu être en col B .etc..)
2/ ou est-ce le décalage entre les colonnes à traiter (je ne le pense pas : j'ai mis les colonnes mitoyennes et ça continue à fonctionner)
donc ? ...
merci pour une explication
cdlt
je n'ai pas compris le COLONNE()-3 dans plagedyn !
1/ est-ce le nombre de col possibles à traiter ici les col A, E, I (et independamment de leur position (E aurait pu être en col B .etc..)
2/ ou est-ce le décalage entre les colonnes à traiter (je ne le pense pas : j'ai mis les colonnes mitoyennes et ça continue à fonctionner)
donc ? ...
merci pour une explication
cdlt
ccm81
Messages postés
10905
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 décembre 2024
2 429
Modifié par ccm81 le 2/05/2016 à 14:02
Modifié par ccm81 le 2/05/2016 à 14:02
1. Supposons qu'on se place en colonne 11 (colonne K) avec la formule
K1=SOMMEPROD(1/NB.SI(plagedyn;plagedyn))
2. La référence pour la définition des plages est plage et est définie en colonne 1 (colonne A) (décalage de 0 ligne et 0 colonne par rapport à A1)
plage =DECALER(Feuil1!$A$1;0;0;NBVAL(Feuil1!$A:$A);1)
Dans la formule qui définit la plage plagedyn, la formule est
=DECALER(plage;0;COLONNE()-3;NBVAL(DECALER(plage;0;COLONNE()-3));1)
3. donc "actuellement" (en K1) colonne vaut 11 et colonne()-3 vaut 8, et plagedyn est décalée à partir de la colonne 1 de 8 colonnes, donc plagedyn est en colonne 1+8 = 9 (soit colonne I)
J'espère avoir été (suffisamment) clair
Cdlmnt
K1=SOMMEPROD(1/NB.SI(plagedyn;plagedyn))
2. La référence pour la définition des plages est plage et est définie en colonne 1 (colonne A) (décalage de 0 ligne et 0 colonne par rapport à A1)
plage =DECALER(Feuil1!$A$1;0;0;NBVAL(Feuil1!$A:$A);1)
Dans la formule qui définit la plage plagedyn, la formule est
=DECALER(plage;0;COLONNE()-3;NBVAL(DECALER(plage;0;COLONNE()-3));1)
3. donc "actuellement" (en K1) colonne vaut 11 et colonne()-3 vaut 8, et plagedyn est décalée à partir de la colonne 1 de 8 colonnes, donc plagedyn est en colonne 1+8 = 9 (soit colonne I)
J'espère avoir été (suffisamment) clair
Cdlmnt
sam130242
Messages postés
72
Date d'inscription
samedi 9 avril 2016
Statut
Membre
Dernière intervention
2 janvier 2017
Modifié par sam130242 le 2/05/2016 à 14:26
Modifié par sam130242 le 2/05/2016 à 14:26
merci beaucoup pour cette explication
en fait je n'ai pas compris mais c'est sans doute parce que ça ne correspond pas à ce que je veux faire ?
j'ai l'impression que dans ton exemple il y a un ordre de passage obligé au niveau des 3 cellules ?
en tout état de cause dans mon tableau, j'ai 1 cellule en J3 qui me donne le résultat du traitement de la colonne H et une cellule J4 qui me donne le resultat du traitement de la colonne D.
comment dois-je rediger ma formule ?
en fait je n'ai pas compris mais c'est sans doute parce que ça ne correspond pas à ce que je veux faire ?
j'ai l'impression que dans ton exemple il y a un ordre de passage obligé au niveau des 3 cellules ?
en tout état de cause dans mon tableau, j'ai 1 cellule en J3 qui me donne le résultat du traitement de la colonne H et une cellule J4 qui me donne le resultat du traitement de la colonne D.
comment dois-je rediger ma formule ?
ccm81
Messages postés
10905
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
27 décembre 2024
2 429
3 mai 2016 à 16:29
3 mai 2016 à 16:29
Je suis parti du principe qu'il y avait une relation entre la cellule résultat et la colonne traitée (colonne traitée = colonne de la cellule résultat -2)
'S'il y a une autre relation, à toi d'adapter sinon, ça ne sera pas possible ou alors via une macro
Cdlmnt
'S'il y a une autre relation, à toi d'adapter sinon, ça ne sera pas possible ou alors via une macro
Cdlmnt
sam130242
Messages postés
72
Date d'inscription
samedi 9 avril 2016
Statut
Membre
Dernière intervention
2 janvier 2017
3 mai 2016 à 18:07
3 mai 2016 à 18:07
merci!
cdlt
cdlt