IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

fonction count sur excel 2010


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut fonction count sur excel 2010
    BOnjour

    j'ai un bout de code qui marche sans souci sur excel 2003 par contre sur excel 2010 il me met l'erreur suivante :

    erreur d'éxécution 1004 erreur définie par l'application ou pas l'objet

    le code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For k = 1 To Workbooks("clients.xls").Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
      ' code pour effectuer des calculs
     
    Next k
    le probleme ne se pose pas si je réecris en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Workbooks("clients.xls").activate
    For k = 1 To Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
      ' code pour effectuer des calculs
     
    Next k
    mais comme je travaille sur plusieurs classeur excel différent il faut que je reprenne tout le code vba pour réactiver les bons classeurs ....

    n'y a-t-il un moyen de garder le code sans avtgiver le classeur auparavant?

    merci

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    sur qu'elle ligne l'erreur ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut
    l'erreur se situe sur la lgine 3 cad

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For k = 1 To Workbooks("clients.xls").Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    je n'ai pas excel 2010 sous la main peu tu voir si tu as la même erreur sur la ligne suivante :

    que tu place avant le FOR ...

    et si tu as l'erreur regarde si celle-ci persiste avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox Workbooks("clients.xls").Sheets(1).Rows.Count

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    je pense à un conflit de formats...

    le classeur incriminé doit inclure des macros, hors sous 2007 et après les formats avec et sans diffèrent xlsx ou xlsm...

    Donc Excel ne sait pas retrouver ses petits...

    Si tu actives le classeur, l'interprétation ne suit pas le même processus vu que le classeur est actif et que ses macros ont été ou non activées = pas de dilemme

    test la même chose en sauvegardant ton classeur en xlsm sous le même code en le gardant non actif...

    cordialement,

    Didier

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Citation Envoyé par bbil Voir le message
    je n'ai pas excel 2010 sous la main peu tu voir si tu as la même erreur sur la ligne suivante :

    Ca devrait être OK vu qu'on aura : 1048576 donc qui rentre encore dans un Long, il en est autrement d'un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Dénombrer()
     
       MsgBox Worksheets(1).Cells.Count
     
    End Sub
    voir ce fil

    cordialement,

    Didier

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Ce n'est pas un problème d'entrer dans un long ...

    ce que je pense c'est que Rows ... sans rien devant s'applique à la feuille active .. et si la feuille active n'est pas un feuille de calcul mais un graphique ou autre on doit avoir l'erreur 1004 ...

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut
    en effet il n'y a pas d'erreur avec
    le msg affiché est bien 1048576 comme l'a dit Ormonth.

    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks("clients.xls").Sheets(1).Rows.Count
    n'affiche pas d'erreur
    par contre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets(1).Cells.Count
    affiche un dépssement de capacité comme décrit dans le fil dédié .


    donc il faut que j'enregistre tous mes classeurs en xlsm?
    c'est le seul changement que je teste.?

    mais si je l'enregistre au format 2010 peut on l'ouvrir avec excel 2003?

    merci

  9. #9
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pour le test d'affichage tu count tu as bien mis le message box avant le FOR .. et après l'action sur le MsgBox tu as bien l'erreur dans le FOR ..?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut
    oui c'est ca
    mon test est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MsgBox Rows.Count
    MsgBox Workbooks("clients.xls").Sheets(1).Rows.Count
    For k = 1 To Workbooks("clients.xls").Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
       ' code pour effectuer des calculs
     
    next k
    et j'ai pas d'erreur sur les 2 msgbox mais une erreur sur le for

    j'ai réenregistrer mon claseur contenant le code vba en .xlsm
    mais le même problème persiste

    il faut que je réecrive un code vb apour l'enregistrer automatiquement en .xlsm?
    tous les claseur doivent etre au meme format?

  11. #11
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Citation Envoyé par moimemessssssssss
    mais si je l'enregistre au format 2010 peut on l'ouvrir avec excel 2003?
    Non, pas directement.

    Citation Envoyé par bbil
    et si la feuille active n'est pas un feuille de calcul mais un graphique ou autre on doit avoir l'erreur 1004
    oui, mais on aurait le même comportement du coup sous 2003 normalement...

    cordialement,

    Didier

    Bonsoir,

    moimemessssssssss, note au passage la remarque pertinente de bbil, si ta feuille est une Worksheet, ne t'amuses pas à la noter un Sheet, ça te conduira à une galère possible un de ces jours d'autant plus dure à trouver que justement tu n'est pas au fait de la différence

    à première vue, le souci ne vient pas de :

    mais de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(Rows.Count, 2).End(xlUp).Row
    c'est à ce niveau qu'on doit creuser...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim zz
     
    MsgBox Rows.Count
    MsgBox Workbooks("toto.xls").Sheets(1).Rows.Count
    zz = Workbooks(fichier).Sheets(1).Cells(Rows.Count, 2).End(xlUp).Row
    MsgBox zz
     
    End Sub
    = erreur sur le dernier Msgbox

    cordialement,

    Didier

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut
    le souci lorsque je réenregistre tout en .xlsm il faut que je change

    Workbooks("clients.xls") en Workbooks("clients.xlsm") pour ce classeur

    et le faire pour tout les classeurs , non?

    y a til un autre moyen plus rapide ?

    c'est vrai qu'il aurait été plus simple de passer les noms des classeurs dans une variable!

    en effet je connais pas la différence entre sheet et Worksheet
    à quoi correspond cette différence?
    comment savez vous que j'ignore cette différence ( dû au code que j'ai donnée?)?

  13. #13
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    à quoi correspond cette différence?
    vois l'aide VBA à Worksheets (avec un s) et Worksheet et / ou les tutos DVP genre :

    Programmer efficacement avec Excel en VBA http://bidou.developpez.com/tutoriels/ExcelVBA/

    et comment savez vous que j'ignore cette différence ( dû au code que j'ai donnée?)?
    oui et réactions / fils

    cordialement,

    Didier

    Citation Envoyé par moimemessssssssss
    c'est vrai qu'il aurait été plus simple de passer les noms des classeurs dans une variable!
    et surtout plus propre etc... cf tuto Rabilloud, mais ça ne change rien, alors qu'on aurait pu espérer le contraire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub SoluceProprez()
    Dim objMonClass As Workbook
     
    Set objMonClass = Workbooks("toto.xls")
     
    Debug.Print objMonClass.Worksheets(1).Cells.Rows.Count ' = OK
     
    Debug.Print objMonClass.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row ' = Boum !
    End Sub
    cordialement,

    Didier

  14. #14
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bon je continue dans la même idée et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    With objMonClass.Worksheets(1)
     Debug.Print .Cells(.Rows.Count, 2).End(xlUp).Row ' = Boum ! ou pas boum ?
    end with

  15. #15
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Citation Envoyé par bbil Voir le message
    bon je continue dans la même idée et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    With objMonClass.Worksheets(1)
     Debug.Print .Cells(.Rows.Count, 2).End(xlUp).Row ' = Boum ! ou pas boum ?
    end with
    pas Boom !

    Ouf, c'est rassurant vu les variables objets....

    Dans le cas de 2007 et +, il faut donc être absolument explicite puisqu'on revient à écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub SoluceProprez2()
    Dim objMonCible As Worksheet
     
     
    Set objMonCible = Workbooks("toto.xls").Worksheets(1)
     
    Debug.Print objMonCible.Cells.Rows.Count ' = OK
     
    Debug.Print objMonCible.Cells(objMonCible.Rows.Count, 2).End(xlUp).Row ' = OK
    End Sub
    Ce qui s'écrit plus proprement ainsi, comme tu le soumets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub SoluceProprez3()
    Dim objMonCible As Worksheet
     
    Set objMonCible = Workbooks("toto.xls").Worksheets(1)
    With objMonCible
        Debug.Print .Cells.Rows.Count ' = OK
     
        Debug.Print .Cells(.Rows.Count, 2).End(xlUp).Row ' = OK
    End With
     
    Set objMonCible = nothing
    End Sub
    et montre encore l'avantage des With, end with, vu qu'on est explicite de base...

    Il reste donc le différentiel avec 2003 et la feuille active ou non qui doit bien être un souci d'ambiguité.

    Encore un point à veiller sur des codes antérieurs.. sauf s'ils sont très propres

    Ca va soulager moimemessssssssss surement....

    bien vu bbil et bonne nuit,

    Didier

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut
    bonjour

    merci pour vos réponses détaillées.

    boum siginifie ca marche pas?


    car

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub SoluceProprez()
    Dim objMonClass As Workbook
     
    Set objMonClass = Workbooks("toto.xls")
     
    Debug.Print objMonClass.Worksheets(1).Cells.Rows.Count '  o,k ca marche
     
    Debug.Print objMonClass.Worksheets(1).Cells(Rows.Count, 2).End(xlUp).Row ' ca marche pas ici  
     
    End Sub
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With objMonClass.Worksheets(1)
     Debug.Print .Cells(.Rows.Count, 2).End(xlUp).Row ' c marche
    end with

    bon il faut que je regarde plus en détail pour mieux comprendre les différences de syntaxe et la différence entre sheets et worksheets.

    en tout cas le fait de ne pas tout changer rassure

    je vais continuer des test

    merci

Discussions similaires

  1. [XL-2010] Étiquettes sur Excel 2010
    Par Morgble dans le forum Excel
    Réponses: 1
    Dernier message: 23/08/2011, 14h09
  2. [Débutant] Problème de représentation graphique sur Excel 2010
    Par Tuanou dans le forum VB.NET
    Réponses: 0
    Dernier message: 21/07/2011, 10h14
  3. Supprimer un graphique provenant de SAS ADD-IN sur EXCEL 2010
    Par Salamandar dans le forum ODS et reporting
    Réponses: 16
    Dernier message: 17/06/2011, 16h51
  4. [XL-2007] Fonction SI sur Excel 2007
    Par ANTMA dans le forum Excel
    Réponses: 5
    Dernier message: 28/08/2009, 11h51
  5. [VBA-E]Executer fonction VBA sur Excel sans activer la macro
    Par marie10 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 19/01/2006, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo