begin process at 2010 02 10 15:48:29
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

Fonction Nb.si généralisée à tout type de critère


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fonction Nb.si généralisée à tout type de critère

samedi 27 juin 2009 à 11:40:55 | Fonction Nb.si généralisée à tout type de critère

RODAVAFLO

Bonjour,

La formule Nb.si permet de déterminer le nombre de cellules qui répondent à un critère dans une plage définie.  J'aimerais pouvoir avoir une possibilité de critère que simplement une valeur.  Par exemple, j'aimerais, dans une plage donnée, connaître :
le nombre de cellules qui sont de type date
le nombre de cellues qui sont de type texte
La fonction nb.si ne me permet pas de définir mes critères comme cela, donc je dois créer une formule qui permet, en fonction d'une plage sélectionnée de donner le nombre de cellules qui répondent à mon critère.  J'avais donc envie de créer une formule du type Nb.si.texte ou Nb.si.date.  Le problème, c'est que je coïnce dans la rédaction du programme de la fonction.  Il faut que je puisse déterminer quelle est, pour une place sélectionnée :
les indices col et li de la première cellule
les indies col et li de la dernière cellule
Ex : si ma plage est A10:B50, A10:B50 est l'information que je rentrerai dans la formules, mais dans le développement, il faut que je trouve que ma ligne 1 est 10, ma dernière ligne est 50, ma col 1 est A et  ma dernière colonne est B. A partir de là, je pourrai passer en revue toutes les cellules de la plage et faire des tests sur leur format pour voir celles qui répondent à mon critère.

Merci d'avance pour votre aide,


                     RODAVAFLO
samedi 27 juin 2009 à 19:45:44 | Re : Fonction Nb.si généralisée à tout type de critère

PCPT

Administrateur CodeS-SourceS
topic déplacé de VB6 vers VBA!! attention aux rubriques


samedi 27 juin 2009 à 23:22:49 | Re : Fonction Nb.si généralisée à tout type de critère

RODAVAFLO

Je ne sais pas dans quelle rubrique placer ma question !
dimanche 28 juin 2009 à 12:01:52 | Re : Fonction Nb.si généralisée à tout type de critère

PCPT

Administrateur CodeS-SourceS
pas besoin de reposer ta question

comme indiqué, elle était mal placée, je l'ai mise dans la rubrique appropriée

Vous êtes ici : Thèmes / Visual Basic 6 / Langages dérivés / VBA /





lundi 29 juin 2009 à 19:26:58 | Re : Fonction Nb.si généralisée à tout type de critère

us_30

Membre Club
Bonjour,

Drôle de réponse acceptée... hein PCPT ?...

RODAVAFLO > Je te propose de mieux regarder NB.SI, on peut lui faire additionner le nombre de date ainsi :

=NB.SI(D10:D25;">=1/1/1901")

et en bloquant le style en format date dans la plage D10:D25... Donc avec Données > Validation...

Autrement, on peut encore faire une petite macro du type :

Function NBDATE(Plage As Range) As Long

Dim Cellule As Range
For Each Cellule In Plage
    If InStr(1, Cellule.NumberFormat, "y") > 0 Then NBDATE = NBDATE + 1
    'MsgBox Cellule.NumberFormat
Next

End Function

A adapter aux besoins...

Amicalement,
Us.

lundi 29 juin 2009 à 19:39:46 | Re : Fonction Nb.si généralisée à tout type de critère

us_30

Membre Club
Réponse acceptée !
Ou mieux...

Function NBDATE(Plage As Range) As Long

Dim Cellule As Range
For Each Cellule In Plage
    If IsDate(Cellule.Value) Then NBDATE = NBDATE + 1
Next

End Function

Amicalement,
Us.
lundi 29 juin 2009 à 22:27:24 | Re : Fonction Nb.si généralisée à tout type de critère

RODAVAFLO

Génial, ça marche. J'opte pour la solution 2, elle est simple et limpide.

Par contre, j'ai voulu faire pareil mais cette fois, avec le type de format texte et ça marche pas.

IsText(cellule.value) : ca marche pas
cellule.istext non plus
Je sais qu'il existe la formule "Type" qui renvoit comme réponse 2 si la cellule est de type texte, mais je n'arrive pas non plus à l'appliquer.

Tu peux aussi m'aider sur ce coup là ?
lundi 29 juin 2009 à 23:10:17 | Re : Fonction Nb.si généralisée à tout type de critère

RODAVAFLO

Faut pas essayer de comprendre, mais j'ai trouvé

Function NbSiTexte(Plage As Range) As Integer
Dim Cellule As Range
NbSiTexte = 0
For Each Cellule In Plage
    If Application.WorksheetFunction.IsText(Cellule.Value) Then NbSiTexte = NbSiTexte + 1
Next
End Function

Il y a tout de même quelque chose qui m'intrigue.  Comment peut-on faire pour déterminer les indices ligne colonne des première et dernière cellule de "Plage"

Encore mille fois merci pour ton aide.

      RODAVAFLO 

mardi 30 juin 2009 à 15:23:54 | Re : Fonction Nb.si généralisée à tout type de critère

us_30

Membre Club
Réponse acceptée !
Bonjour,

RODAVAFLO > La solution que tu proposes est probablement la seule correcte, car en effet il n'existe pas beaucoup de méthode pour savoir si une chaîne est du texte sans faire une batterie de test... Je ne détaillerai pas plus, mais en qlq mots, lorsque j'utilise Cellule.numbreformat je fais appel à une "instruction" du VBA (c.a.d. propre à Excel), qu'alors Isdate est une instruction du VB (=identique à toutes les plateformes de programmation VBE et VB6)...

Pour déterminer les indices de la plage, voici un exemple à étudier :

Function essai(Plage As Range)

MsgBox "premiere cellule : ligne=" & Plage.Row & " / colonne=" & Plage.Column
MsgBox "nb de ligne selectionnée =" & Plage.CurrentRegion.Rows.Count
MsgBox "nb de colonne selectionnée =" & Plage.CurrentRegion.Columns.Count

End Function

Il existe d'autres façons de faire... Ici on récupère l'indice (chiffré) de la colonne et de la ligne de la première cellule constituant la plage, puis le nombre de ligne et de colonne de la plage... On doit additionner le tout pour obtenir la dernière cellule... en faisant attention de retirer 1 car on parle d'indice...
En principe on peut accèder à ce que l'on veut ensuite avec Cells... On peut également faire en sorte de se balader dans la plage qu'en coordonnées relatifs... bon ensuite c'est un cours complet... mais tu as normalement assez d'indices pour savoir vers quoi chercher...

Amicalement,
Us.

PS : PCPT > en MP... tout de suite !...



Cette discussion est classée dans : fonction, type, nb, plage, critère


Répondre à ce message

Sujets en rapport avec ce message

Accelerer une Boucle [ par ITALIA ] Bonjour voici un morceau de code vba, il permet de lire une plage de valeur de bas en haut et de gauche à droite.Il supprimer les cases vides et decal preciser le type de retour d'une fonction [ par janineinfo ] salut tt le monde,Vous pouvez m'aider?comment faire pour preciser le type de retour d'une fonction en vb.netmerci, comment saisir une plage de données (de type A1:A6 par ex.) dans une listbox? [ par dbg ] Dans une listbox, j'aimerai pouvoir saisir une plage de données, et que la valeur de la listbox soit de type A1:A6 par ex. Quelqu'un aurait une idée? Fonction PolyA d'excel sur vba [ par husker ] Bonjour,Ce forum à l'air plus axé sur vb mais je poste quand meme le sujet et désolé si j'ai pas mis dans le bon theme.Je suis débutant sur vba et j'a Créer une boucle afin de Sélectionner en fonction d'une valeur dans une colonne la plage qui y correspond la copier et la coller dans un autre fichier [ par rvtoulon ] Bonjour, j'ai un tableau excel dans lequel figure divers éléments:<col style="WIDTH: 34pt; mso-width-source: userset; mso-width-a Operations sur plages discontinues [ par bguichardaz ] Bonjour,J'ai un fichier des colonnes avec plein de chiffre dont certains sont positifs, d'autres négatifs. Je souhaite faire l'addition des chiffres n Lire données avec fonction Split [ par romanosky35 ] Bonjour,Je suis débutant, j'utilise Visual basic 2005 Express Edition et j'appelle à l'aide toutes les personnes qui savent comment fonctionne la fonc type de donnée incompatible dans l'expression du critère [ par CHPIC ] Bonjour à tous , quelqu'un  pourrait il m'aider .J'ai une BDD Access avec entre autre un champ DATE (type date) crée par VB6 .Je souhaiterai trier par Anlyser une fonction mathématique pour ensuite la desiner [ par ggolp ] Bonjour a tous,Je suis actuellement en train de coder un programme qui me déssine une fonction mathématique dans un repère xy (en VB6).J'ai tout d'abo


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales