Une routine vb ?
Résolu
sam130242
Messages postés
72
Date d'inscription
Statut
Membre
Dernière intervention
-
sam130242 Messages postés 72 Date d'inscription Statut Membre Dernière intervention -
sam130242 Messages postés 72 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Bonjour,
j'ai un tableau de plusieurs centaines de lignes et quelques colonnes
la colonne A est renseignée par certains codes par ex :
ligne 1 col A : AAA
ligne 2 col A : AAA
ligne 3 col A : AAA
ligne 4 col A : BBB
ligne 5 col A : BBB
ligne 6 col A : CCC
ligne 7 col A : DDD
ligne 8 col A : DDD
ligne 9 col A : DDD
je voudrais pouvoir comptabiliser le nombre de codes (unitaires).
Dans cet exemple = 4 !
je ne sais pas comment rédiger une telle routine!
pouvez vous m'aider svp ?
merci
Bonjour,
j'ai un tableau de plusieurs centaines de lignes et quelques colonnes
la colonne A est renseignée par certains codes par ex :
ligne 1 col A : AAA
ligne 2 col A : AAA
ligne 3 col A : AAA
ligne 4 col A : BBB
ligne 5 col A : BBB
ligne 6 col A : CCC
ligne 7 col A : DDD
ligne 8 col A : DDD
ligne 9 col A : DDD
je voudrais pouvoir comptabiliser le nombre de codes (unitaires).
Dans cet exemple = 4 !
je ne sais pas comment rédiger une telle routine!
pouvez vous m'aider svp ?
merci
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
- Vb express - Télécharger - Langages
13 réponses
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!
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
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
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
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
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
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
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
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 ?