Trop de ligne à compter ?

Résolu
Bonjour,

je fais actuellement du traitement de données, de beaucoup de donnée et la première étape de macro est le comptage des lignes. Elles sont 54320 dans mon premier fichier, je voulais utiliser la fonction countA pour enregistrer ce nombre dans une variable.

donc un code basique :
dim M_nb_colonne as integer
dim M_nb_ligne as long 

M_nb_colonne = appl.countA(dec.wkcol.range("4:4"))
M_nb_ligne = appl.countA(dec.wkcol.Range("B:B"))


dec.wkcol est une worksheet et appl l'application dans laquelle je travaille (acompagnée d'un appl.visible = false et tout le toin toin pour qu'elle travail en fond)

la première instruction fonctionne très bien
la deuxième me renvoit : run-time error 1004 ( application-defined or object-defined error )

D'ou ma question est-il possible d'utiliser countA pour un long
1/ si non : y'a-t-il un autre moyen de connaitre le nombre de ligne ?
2/ si oui : pour quoi ça marche pas ? (snif)

3 réponses

  1. J'ai finalement trouver le problême, j'ai oublier de te dire que
    dim appl as new excel.application 
    


    est dans un autre module donc forcement l'objet n'est pas déclaré dans le module renseignement d'où l'erreur.
    Bilan il fallait déclarer hors de toute sub :
    public appl as new excel.application 
    


    et tout fonctionne

    Merci Patrice 33740 de t'être interessé à mon problème !
    1. ça c'est presque ce que j'ai déjà, la seule différence c'est que je fais :

      dim appl as new excel.application 
      


      ce qui me chiffonne c'est que le premier marche (M_nb_colonne) très bien et pas le second ( j'ai aussi vérifié, je ne suis as en numérotation R1C1)
      1. il y a une autre différence : wkcol au lieu de dec.wkcol
      2. dec est un module ou j'ai déclaré toutes mes variables publiques (wkcol en fait partie) j'ai fait un set dec.wkcol dans le module qui ouvre le classeur et qui fait l'importation des données.
        si le problème avait été au niveau de la déclaration de dec.wkcol, le nb de colonne n'aurait pas marché.

        Comme j'étais bloqué j'ai fais un contage de bourrin manuel :

        dim I as long
        I  = 1
        do while dec.wkcol.cells( I ,  1 ) <> ""
            I = I + 1 
        loop
        M _nb_ligne = I


        en attendant de trouver mieux
      3. C'est bizarre, avec 2002, ton code fonctionne bien.

        As-tu essayé sans le new ?
        Set appl = Excel.Application

        C'est plus rapide sans qu'avec
      4. Dans ma version (2010 je crois) j'ai une erreur quand je ne met pas le new
    2. ceci fonctionne :
      Dim appl As Application
      Dim wkcol As Worksheet
      Set appl = Application
      Set wkcol = ActiveSheet
      
      Dim M_nb_colonne As Integer
      Dim M_nb_ligne As Long
      
      M_nb_colonne = appl.CountA(wkcol.Range("4:4"))
      M_nb_ligne = appl.CountA(wkcol.Range("B:B"))