Compter nombre cellule non vide dans une colonne Excel (code VB) [Résolu]

isfaen 74 Messages postés jeudi 10 juin 2010Date d'inscription 19 octobre 2011 Dernière intervention - 11 juin 2010 à 14:56 - Dernière réponse :  quentinclone
- 12 nov. 2012 à 22:06
Salut à tous!

Je cherche une fonction déjà incrémentée dans VB qui compte le nombre de cellules non vides dans une colonne Excel.

En existe il une ou faut il créer soit même la sienne?

Je vous remercie par avance!



Alex
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 juin 2010 à 22:21
3
Merci
Bonjour,

Désolé isfaen pour le retard...

Je t'ai fait un exemple de code pour montrer le pilotage de VB6 vers Excel, avec le compte de cellule non vide, à partir des deux propositions précédentes.

- Dans VB6 , met une UserForm et 3 boutons avec le code ci-dessous :

'   Défintion générale des objets
    Dim ExcelApp As Object
    Dim ExcelClasseur As Object
    Dim ExcelFeuille As Object


Private Sub Command1_Click()

    Set ExcelApp = CreateObject("excel.application")
        ExcelApp.Visible = True
    Set ExcelClasseur = ExcelApp.Workbooks.Add
    Set ExcelFeuille = ExcelClasseur.sheets("Feuil1")
        ExcelFeuille.cells.Item(1, 1).Value = "Machin"
        ExcelFeuille.cells.Item(2, 1).Value = "Truc"
        ExcelFeuille.cells.Item(3, 1).Value = "Machine"
        ExcelFeuille.cells.Item(4, 1).Value = "Machin chose"
        
End Sub

Private Sub Command2_Click()
        
        ' 1ere methode
        ExcelFeuille.Range("b1").FormulaR1C1 = "=COUNTIF(C[-1],""<>"""""")-COUNTBLANK(C[-1])"
        MsgBox ExcelFeuille.Range("b1").Value
        
        ' 2ieme methode
        MsgBox ExcelApp.WorksheetFunction.CountIf(ExcelFeuille.Range("a:a"), "<>")
        
End Sub

Private Sub Command3_Click()
        ExcelApp.quit
End Sub


Ici je n'ouvre pas de fichier comme dans ton cas avec OPEN... Il suffit de reprendre tes lignes à la place...

Amicalement,
Us.

Merci us_30 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de us_30
Meilleure réponse
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 12 juin 2010 à 22:25
3
Merci
Il me vient aussi l'idée d'utiliser Colomns... ce qui donne alors :


Private Sub Command2_Click()
        
        ' 1ere methode
        ExcelFeuille.Range("b1").FormulaR1C1 = "=COUNTIF(C[-1],""<>"""""")-COUNTBLANK(C[-1])"
        MsgBox ExcelFeuille.Range("b1").Value
        
        ' 2ieme methode
        MsgBox ExcelApp.WorksheetFunction.CountIf(ExcelFeuille.Range("a:a"), "<>")
        
        ' 3ième méthode
        MsgBox ExcelApp.WorksheetFunction.CountIf(ExcelFeuille.Columns(1), "<>")
        
End Sub



Bonne prog,

Amicalement,
Us.

Merci us_30 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de us_30
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 11 juin 2010 à 15:29
0
Merci
Bonjour,

=NB.SI(A:A;"<>""")


Amicalement,
Us.
Commenter la réponse de us_30
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 11 juin 2010 à 15:32
0
Merci
Désolé, si j'écris tout, cela surement mieux :

=NB.SI(A:A;"<>""")-NB.VIDE(A:A)


Amicalement,
Us.
Commenter la réponse de us_30
isfaen 74 Messages postés jeudi 10 juin 2010Date d'inscription 19 octobre 2011 Dernière intervention - 11 juin 2010 à 15:33
0
Merci
Il me semble que tu me donnes la fonction pour Excel mais je travaille sous VB!
Merci en tout cas pour ta réponse


Alex
Commenter la réponse de isfaen
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 11 juin 2010 à 15:36
0
Merci
Bien sur on peut écrire cela de différentes manières... Par exemple :
NB.vide(a:a)
peut encore s'écrire : nb.si(a:a;"")

etc...

Us.
Commenter la réponse de us_30
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 11 juin 2010 à 15:39
0
Merci
En travaillant sous VB6, tu as donc fait un code pour faire référence à Excel, suffit de l'adapter... C'est assez simple me semble-t-il. Prend l'enregistreur de macro. récupère le code pour la formule précédente. Retranscrit le dans ton code VB6...

Us.
Commenter la réponse de us_30
isfaen 74 Messages postés jeudi 10 juin 2010Date d'inscription 19 octobre 2011 Dernière intervention - 11 juin 2010 à 15:48
0
Merci
J'ai effectivement commencé comme ça et VBA me donne la fonction COUNTIF que VB6 ne connait pas...


Alex
Commenter la réponse de isfaen
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 11 juin 2010 à 16:03
0
Merci
C'est pas plutôt "FormulaR1C1"... ?
Sinon tu peux encore passer par Worksheetfunction me semble-t-il...

tiens, en essayant sous Excel le code :
WorksheetFunction.CountIf(Range("a:a"), "<>")

Normalement, sous VB6 tu peux faire référence à n'importe quelle fonction intégrée dans Excel, je pense que tu code mal tes lignes plutôt, puisque tu fais interpréter tes lignes par VB6, et par par le VBA d'Excel... Tu as bien créé un objet Excel sous VB6 ?

Us.
Commenter la réponse de us_30
isfaen 74 Messages postés jeudi 10 juin 2010Date d'inscription 19 octobre 2011 Dernière intervention - 11 juin 2010 à 16:14
0
Merci
Je te met un exrait de mon code pour info:


Monfichier = "Mon chemin"
appExcel = CreateObject("Excel.application")
projExcel = appExcel.Workbooks.Open("G:\Alexandre\Micro vb\projections10.xls")
mortaliteExcel = appExcel.Workbooks.Open("G:\Alexandre\Micro vb\Tauxmortalité.xls")
mortalitesheetExcel = mortaliteExcel.ActiveSheet
ws1Excel = projExcel.ActiveSheet


Donc oui je crée bien un objet excel
Commenter la réponse de isfaen
us_30 2117 Messages postés lundi 11 avril 2005Date d'inscription 14 mars 2016 Dernière intervention - 11 juin 2010 à 16:34
0
Merci
Dans l'immédiat, je dois faire autre chose... Je vais me pencher sur ton pb un peu plus tard... en soirée...

Que cela n'empêche personne pour intervenir...

Amicalement,
Us.
Commenter la réponse de us_30
kbalist 36 Messages postés jeudi 28 janvier 2010Date d'inscription 6 février 2011 Dernière intervention - 12 juin 2010 à 08:37
0
Merci
salut

tu peux essayer de faire une boucle dans la colonne avec le test :
(x variable)
if Cells(x, colonne).Value <> "" then compteur += 1
Commenter la réponse de kbalist
isfaen 74 Messages postés jeudi 10 juin 2010Date d'inscription 19 octobre 2011 Dernière intervention - 14 juin 2010 à 09:47
0
Merci
Merci beaucoup Us, ça marche nickel!

Merci d'y avoir passer du temps, cela m'aide beaucoup (pour mon mémoire...).

Have a nice day!

Alex
Commenter la réponse de isfaen
quentinclone - 12 nov. 2012 à 22:06
0
Merci
Merci Us, c'est exactement ce que je cherchais aussi ! :D
C'est super tu m'enlève une épine du pied !
Commenter la réponse de quentinclone

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.