Compter nombre cellule non vide dans une colonne Excel (code VB)

Résolu
isfaen Messages postés 74 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 19 octobre 2011 - 11 juin 2010 à 14:56
 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

14 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
12 juin 2010 à 22:21
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.
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
12 juin 2010 à 22:25
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.
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 juin 2010 à 15:29
Bonjour,

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


Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 juin 2010 à 15:32
Désolé, si j'écris tout, cela surement mieux :

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


Amicalement,
Us.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
isfaen Messages postés 74 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 19 octobre 2011
11 juin 2010 à 15:33
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
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 juin 2010 à 15:36
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.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 juin 2010 à 15:39
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.
0
isfaen Messages postés 74 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 19 octobre 2011
11 juin 2010 à 15:48
J'ai effectivement commencé comme ça et VBA me donne la fonction COUNTIF que VB6 ne connait pas...


Alex
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 juin 2010 à 16:03
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.
0
isfaen Messages postés 74 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 19 octobre 2011
11 juin 2010 à 16:14
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
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
11 juin 2010 à 16:34
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.
0
kbalist Messages postés 36 Date d'inscription jeudi 28 janvier 2010 Statut Membre Dernière intervention 6 février 2011
12 juin 2010 à 08:37
salut

tu peux essayer de faire une boucle dans la colonne avec le test :
(x variable)
if Cells(x, colonne).Value <> "" then compteur += 1
0
isfaen Messages postés 74 Date d'inscription jeudi 10 juin 2010 Statut Membre Dernière intervention 19 octobre 2011
14 juin 2010 à 09:47
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
0
quentinclone
12 nov. 2012 à 22:06
Merci Us, c'est exactement ce que je cherchais aussi ! :D
C'est super tu m'enlève une épine du pied !
0
Rejoignez-nous