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

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

14 réponses

Meilleure réponse
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de us_30
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de us_30
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
0
Merci
Bonjour,

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


Amicalement,
Us.
Commenter la réponse de us_30
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
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
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011
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
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
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
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
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
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011
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
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
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
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011
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
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
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
Messages postés
36
Date d'inscription
jeudi 28 janvier 2010
Statut
Membre
Dernière intervention
6 février 2011
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
Messages postés
74
Date d'inscription
jeudi 10 juin 2010
Statut
Membre
Dernière intervention
19 octobre 2011
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
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