COMPRIS ENTRE dans un CountIf en VBA

Bonjour,

C'est la premiere fois que je viens poster une question sur ce genre de forum car en général je trouve une réponse à mes problèmes dans d'autres forum... Cependant là je bloque sur un quelque chose de surement très bête mais qui m'empèche d'avancer dans ma programmation.

Je m'explique:

J'ai un tableau de données dont l'une des colonnes (en l'occurence la colonne K) est une colonne de chiffre (certain positifs, certains négatifs) et de mots (cela doit vous paraitre bizarre d'avoir une colonne avec des chiffres et des mots mais c'est normal car ce sont des échéances et certaines échéances surviennent apres un "événement").

OBJECTIF: Je souhaite pouvoir compter le nombre de cellules de ma colonne K dont le contenu est un nombre compris entre 0 (strictement) et 30.

Les seules choses que j'ai réussi à faire c'est de compter le nombre de cellules de ma colonne K dont le contenu est un nombre inférieur à 0 ; et compter toutes les cellules de ma colonnes K.

Voici les codes que j'utilise et qui fonctionnent :

Sub CompterRetard()
 Dim compteur As Integer
 compteur = Application.WorksheetFunction.CountIf(Range("K2:K2000"), "<=0")
 Sheets("Feuil1").Range("M2").Value = compteur
 End Sub
Sub CompterEnCours()
 Dim compteur As Integer
 compteur = Application.WorksheetFunction.Count(Range("K1:K" & Range("K2000").End(xlUp).Row))
 Sheets("Feuil1").Range("M4").Value = compteur
 End Sub

Voici celui qui ne fontionne pas :

Sub CompterApproche()
 Dim compteur As Integer
 compteur = Application.WorksheetFunction.CountIf(Range("K2:K2000"), "<=0" and ">30")
 Sheets("Feuil1").Range("M3").Value = compteur
 End Sub

Il m'affiche l'erreur suivante : incompatibilité de type

SVP aidez moi !!

Bonjour,

Bon.. ce n'est pas avec CountIf mais ça marche

149dieze17.xlsm (20.08 Ko)

Bonjour Psykopat,

Waw je ne pensais pas obtenir une réponse dans les 20 minutes !

Effectivement ca fonctionne ! Merci beaucoup !

Cependant je souhaiterais avoir un code qui permet d'afficher les "lettres" des colonnes afin de pouvoir l'assimiler au reste de mon code. est ce possible tu penses ?

Merci encore en tout cas !

Bonsoir,

La fonction utilisée et la syntaxe ne sont pas les bonnes :

... = WorksheetFunction.CountIfs(Range("K2:K2000"), "<=0", ">30")

Cordialement.

Merci MFerrand de ton intervention mais le probleme persiste sous une autre forme puisqu'une erreur lors de la compilation apparait.

Voici le message d'erreur : erreur 1004 impossible de lire la propriété CountIfs de la classe Worksheetfuntion...

capturer

Bonjour Dieze,

Je comprend pas ce que tu veux pour les lettres des colonnes.

Quand Est-ce que tu les veux, où, pourquoi ?

Bonjour psykopat,

Dans ce code :

Sub CompterApproche()
 Dim compteur As Integer
 compteur = Application.WorksheetFunction.CountIf(Range("K2:K2000"), "<=0" and ">30")
 Sheets("Feuil1").Range("M3").Value = compteur
 End Sub

j'utilise "K" pour spécifier la colonne qui correspond à ma colonne "date d'échéance", or j'ai pour ambition d'importer des fichiers excels dont le format et la disposition des colonnes ne seront pas toujours les meme. Par conséquent, je vais coder une page "parametre" qui permettra a un utilisateur tiers qui ne connait rien en VBA de remplir un champ en ayant juste à mettre le nom de la colonne et non pas le numéro car dans tout le reste j'ai mis des lettres... c'est de l'odre du prefectionnement.

Mais dans un sens, je ne vois pas pourquoi ce ne serait pas possible d'utiliser la fonction Count (ou ses dérivés) lorsque l'on veut mettre une condition "compris entre".

As tu compris ?

En gros, l'utilisateur rentre "J" et ta fonction vas utiliser "J" au lieu de "K" c'est ça ? ^^

exactement ! ^^

excuse moi la synthèse et moi ca fait 2

ça fonctionne de A à Z J'essaye de faire pour les colonnes AA AB ...

82dieze17.xlsm (20.89 Ko)

T'es un tueur ! MERCI beaucoup Psykopat, c'est exactement ce qu'il me fallait !

Si tu aimes les défis (un petit car je suppose que c'est du pipi de chat pour toi), j'ai pour ambition de rajouter un deuxieme critere à celui du "compris entre".

En effet, dans une autre colonne (imaginons la "B"), je voudrais imposer un critère qui est du texte (et si possible peu importe si c'est en majuscule ou en minuscule).

Exemple: Compter le nombre de cellules/lignes ayant :

- Critere 1 : un chiffre compris entre 0 et 30 en colonne "A" (réalisé)

- Critère 2 : un texte comprenant "DUPONT Jean" en colonne "B"

je pensais soit utiliser la fonction "trie" avant de commencer l'incrémentation soit analyser chaque celulles par la fonction

Cell("X, X").Text

Que me conseillerais tu ?

merci d'avance

Tu veux que par exemple la ligne 10 il y ait :

Colonne A : 20 (donc comprit entre 0 et 30)

Colonne B : DUPOND

Donc bon

et ligne 11:

Colonne A : 20

Colonne B : LUCAS

donc faux

??

ps : voici le fichier qui peut prendre n'importe qu'elle colonne en paramètre

15dieze17.xlsm (21.59 Ko)

Oui c'est exactement ca . Du coup il suffirait de mettre une condition en string en reprenant un VarType. mais je ne connais pas la valeur correspond à un string

Merci pour le doc , je regarde ca.

Finalement j'ai trouvé le numéro du vartype , c'est 8 pour un string. Cependant le code s'arrete dès que ma condition sur mon string n'est pas respecté.

Il doit y avoir un problème sur le fichier précédent mais celui là est bon

et

gère le Dupond quelques soit comment il est écrit (DuPonD , DUPond, ...)

ps : en effet c'est du pipi de chat :p

36dieze17.xlsm (21.76 Ko)

Bonjour,

Je n'avais pas regardé tes conditions, focalisé par l'erreur de fonction et de syntaxe, mais... en effet tes deux conditions n'ont aucune chance d'être réunies en même temps, c'est donc ta méthode de calcul qui ne permettra de toute façon pas d'aboutir au résultat.

je ne vois pas pourquoi ce ne serait pas possible d'utiliser la fonction Count (ou ses dérivés) lorsque l'on veut mettre une condition "compris entre".

Tu veux utiliser des fonctions de feuille de calcul, que tu les voies ou pas, elles ont une syntaxe, définie par le concepteur de la fonction, et si tu y déroges, tu n'auras pas le résultat voulu !

En l'occurrence, utiliser des moyens proprement VBA plutôt que des moyens Excel, sera certainement plus efficace et probablement plus rapide : parcourir ta colonne au moyen d'une boucle et compter les valeurs qui répondent aux conditions une à une...

Dis-toi aussi, chaque fois que tu écris Range ou Cells (sans rien devant) tu produis une expression non qualifiée, donc une incertitude sur l'identification de l'objet qui reste soumise au contexte d'exécution lequel peut toujours subir des variations. Ce n'est jamais un code sûr car insuffisamment précis...

Cordialement.

D'accord merci MFerrand pour ton explication. J'ai pu créer un aglo qui fonctionne très bien du coup

Merci beaucoup !

NB: je considere le topic comme résolu

Rechercher des sujets similaires à "compris entre countif vba"