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

Signaler
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011
-
 quentinclone -
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

Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Bonjour,

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


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

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


Amicalement,
Us.
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011

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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011

J'ai effectivement commencé comme ça et VBA me donne la fonction COUNTIF que VB6 ne connait pas...


Alex
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011

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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
36
Date d'inscription
jeudi 28 janvier 2010
Statut
Membre
Dernière intervention
6 février 2011

salut

tu peux essayer de faire une boucle dans la colonne avec le test :
(x variable)
if Cells(x, colonne).Value <> "" then compteur += 1
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011

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

Merci Us, c'est exactement ce que je cherchais aussi ! :D
C'est super tu m'enlève une épine du pied !